一.在窗口创建之前改变窗口的大小和标题

要改变应用程序窗口的大小可以通过在PreCreatWindowl函数中修改CREATSTRUCT结构体变量成员的值

BOOL CMainFrame::PreCreatWindow(CREATSTRUCT cs)

{

if(!CFrameWnd::PreCreatWindow(cs))

return FALSE;

(在这个函数的地方改变CREATSTRUCT结构体变量的值)

cs.cx=300;//把cx的值改为300

cs.cy=200;//把cy的值改为200

return TRUE;

}

2.改变应用程序窗口的标题

要改变应用窗口的标题可以通过改变CREATSTRUCT结构体成员变量的 lpszName参数的值来实现。

BOOL CMainFrame::PreCreatWindow(CREATSTRUCT cs)

{

if(!CFrameWnd::PreCreatWindow(cs))

return FALSE;

(在这个函数的地方改变CREATSTRUCT结构体变量的值)

cs.cx=300;//把cx的值改为300

cs.cy=200;//把cy的值改为200

cs.style&=~FWS_ADDTOTITLE;//其中FWS_ADDTOTITLE是指示将文档的标题加到窗口上,这是MFC默认的                               //式,所以需要将这个默认的方式去掉以后才可以加自己的标题。

cs.lpszName="李现会";

return TRUE;

}

二 在窗口创建之后改变窗口的大小和标题

1.首先介绍一下 SetWindowLong();函数;

SetWindowLong(HWND hWnd,int index, LONG dwNewLong );SetWindowLong()实现了改变窗口的属性的功能。

第一个参数是指向了 需要改变的窗口的句柄。

第二个参数是要改变窗口的具体的方面。

第三个参数是要把该窗口改变成什么样子;

通常SetWindowLong();函数可以在窗口创建之后改变窗口的外观。

在单文档文件中,通常是在PreCreatWindow函数中实现“预创建”窗口。而在OnCreat()函数中,当执行到return 0;语句的时候已经创建完成了窗口。所以在OnCreat()函数中调用SetWindowLong();函数来实现窗口创建完成之后的改变窗口的外观。

所以在OnCreat()函数中调用SetWindowLong()函数具体用法如下:

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
 if (CFrameWnd::OnCreate(lpCreateStruct) ==
-1)
  return -1;
 
 if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT,
WS_CHILD | WS_VISIBLE | CBRS_TOP
  | CBRS_GRIPPER | CBRS_TOOLTIPS
| CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
  !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))

{
  TRACE0("Failed to create
toolbar\n");
  return
-1;     
// fail to create
 }

if (!m_wndStatusBar.Create(this) ||
  !m_wndStatusBar.SetIndicators(indicators,

sizeof(indicators)/sizeof(UINT)))
 {
  TRACE0("Failed to create status
bar\n");
  return
-1;     
// fail to create
 }

// TODO: Delete these three lines if you don't
want the toolbar to
 //  be dockable
 m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
 EnableDocking(CBRS_ALIGN_ANY);
 DockControlBar(&m_wndToolBar);

SetWindowLong(m_hWnd,GWL_STYLE,WS_OVERLAPPEDWINDOW);//在MFC中如果想在窗口创建之后改变窗口的外观,可以通过调用SetWindowLong();函数

return 0;
}

其中 WS_OVERLAPPEDWINDOW定义如下:

#define WS_OVERLAPPEDWINDOW(WS_OVERLAPPED | WS_SYSMENU | WS_CAPTION | WS_MINIMIZEBOX
| WS_MAXIMIZE | WS_THICKFRAME);

其中 WS_SYSMENU是系统菜单,不包括按钮。

使得窗口可以最大化和最小化。

2.用SetWindowLong()和GetWindowLong()两个函数结合来改变窗口的某些属性;

如法如下:

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
 if (CFrameWnd::OnCreate(lpCreateStruct) ==
-1)
  return -1;
 
 if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT,
WS_CHILD | WS_VISIBLE | CBRS_TOP
  | CBRS_GRIPPER | CBRS_TOOLTIPS
| CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
  !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))

{
  TRACE0("Failed to create
toolbar\n");
  return
-1;     
// fail to create
 }

if (!m_wndStatusBar.Create(this) ||
  !m_wndStatusBar.SetIndicators(indicators,

sizeof(indicators)/sizeof(UINT)))
 {
  TRACE0("Failed to create status
bar\n");
  return
-1;     
// fail to create
 }

// TODO: Delete these three lines if you don't
want the toolbar to
 //  be dockable
 m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
 EnableDocking(CBRS_ALIGN_ANY);
 DockControlBar(&m_wndToolBar);

SetWindowLong(m_hWnd,GWL_STYLE,GetWindowLong(m_hWnd,GWL_STYLE)&~WS_MAXIMIZEBOX);//
在MFC中如果想在窗口创建之后改变窗口的外观,可以通过调用SetWindowLong();函数

return 0;
}可以看到在SetWindowLong();函数的第三个参数处实用了GetWindowLong();函数,该函数返回的是函数的类型,该类型和
WS_MAXIMIZEBOX的去反相与,成为SetWindowLong()函数的第三个参数,所以新设置的窗口不再有最大化这个选项了。

VC++ 定制应用程序的外观的更多相关文章

  1. 通过用 .NET 生成自定义窗体设计器来定制应用程序

    通过用 .NET 生成自定义窗体设计器来定制应用程序 https://www.microsoft.com/china/MSDN/library/netFramework/netframework/Cu ...

  2. 用VC制作应用程序启动画面

    摘 要:本文提供了四种启动画面制作方法. 使用启动画面一是可以减少等待程序加载过程中的枯燥感(尤其是一些大型程序):二是 可以用来显示软件名称和版权等提示信息.怎样使用VC++制作应用程序的启动画面呢 ...

  3. iOS 9应用开发教程之定制应用程序图标以及真机测试

    iOS 9应用开发教程之定制应用程序图标以及真机测试 定制ios9应用程序图标 在图1.12中可以看到应用程序的图标是网状白色图像,它是iOS模拟器上的应用程序默认的图标.这个图标是可以进行改变的.以 ...

  4. [Windows][VC]开机自动启动程序的几种方法

    原文:[Windows][VC]开机自动启动程序的几种方法 很多监控软件要求软件能够在系统重新启动后不用用户去点击图标启动项目,而是直接能够启动运行,方法是写注册表Software\\Microsof ...

  5. VC++DLL动态链接库程序

    VC++DLL动态链接库程序 VC++DLL动态链接库程序 C++ DLL 导出函数 使用VS2017等IDE生成dll程序,示例如下: C++ DLL 导出类 1.导出类中第一种方法:简单导出类(不 ...

  6. 【vc】1_Windows程序内部运行机制

    创建一个Win32应用程序步骤: 1.编写WinMain函数; 2.创建窗口(步骤如下): a.设计(一个)窗口类(WNDCLASS) b.注册(该)窗口类. c.创建窗口. d.显示并更新窗口. 3 ...

  7. Windows 开发之VC++垃圾清理程序软件

    概述 本程序软件的主要实现垃圾文件清理的功能,即对指定的文件格式的临时文件或垃圾文件进行遍历.扫描.显示.删除清理等功能.在程序界面设计方面,对默认对话框重新自定义绘制,主要包括标题栏的重绘.对话框边 ...

  8. 深入浅出话VC++(1)——Windows程序内部运行机制

    一.引言 要想熟练掌握Windows应用程序的开发,首先需要理解Windows平台下程序运行的内部机制,然而在.NET平台下,创建一个Windows桌面程序,只需要简单地选择Windows窗体应用程序 ...

  9. VC++如何在程序中用代码注册和卸载ocx控件(代码)

    方法一:在dos或Windows命令行下运行:regsvr32 ocxname.ocx 注册 示例:regsvr32 netshare.ocx     //注册netshare.ocx控件regsvr ...

随机推荐

  1. Mysql生成索引的方式

    1.选择索引的数据类型 MySQL支持很多数据类型,选择合适的数据类型存储数据对性能有很大的影响.通常来说,可以遵循以下一些指导原则: (1)越小的数据类型通常更好:越小的数据类型通常在磁盘.内存和C ...

  2. Tomcat数据库连接池配置

    Tomcat数据库连接池配置 1.            Server.xml的配置 (1)找到tomcat所在目录下的conf\server.xml文件 (2)在文件最后一个</host> ...

  3. Ansible 从MySQL数据库添加或删除用户

    mysql_user - 从MySQL数据库添加或删除用户. 概要 要求(在执行模块的主机上) 选项 例子 笔记 状态 支持 概要 从MySQL数据库添加或删除用户. 要求(在执行模块的主机上) My ...

  4. Mysql count(1) group_concat 高级用法(count 过滤条件,group_concat过滤条件)

    1.官方文档: count:COUNT(expr) [over_clause] https://dev.mysql.com/doc/refman/8.0/en/group-by-functions.h ...

  5. mysql安装笔记-rpm

    基本内容: 1.需要解决两个依赖 2.需要解决一个包冲突 3.安装mysql服务,以及客户端client 4.修改root的随机密码 5.授予root用户,从任何机器访问任何数据库的任何表的权限 1. ...

  6. Java对称与非对称加密解密,AES与RSA

    加密技术可以分为对称与非对称两种. 对称加密,解密,即加密与解密用的是同一把秘钥,常用的对称加密技术有DES,AES等 而非对称技术,加密与解密用的是不同的秘钥,常用的非对称加密技术有RSA等 为什么 ...

  7. mysql异常

    一.Can't connect to MySQL server on 'localhost' (10061)翻译:不能连接到 localhost 上的mysql分析:这说明“localhost”计算机 ...

  8. hover

    hover - Bing dictionary US[ˈhɒvə(r)] v.盘旋:徘徊:犹豫:巡弋 网络翱翔:悬停:盘旋于

  9. sqlite小知识

    删除数据时,由于缓存关系,数据了文件大小不会一下子减小,可以通过执行vacuum;或新建表时使用自动整理大小来实现. sqlite的大小理论上可以达到140T. 暂时,使用C的api,只能使用不是.开 ...

  10. 关于元表,self,元方法__index

    这是需要仔细分辨的几个概念. 元表:相当于table的隐藏属性. 只有固定的一些方法,如__index,__tostring,__add等,称为元方法. 虽然是固定的,但是任何table都可以作为任何 ...