VC++ 定制应用程序的外观
一.在窗口创建之前改变窗口的大小和标题
要改变应用程序窗口的大小可以通过在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++ 定制应用程序的外观的更多相关文章
- 通过用 .NET 生成自定义窗体设计器来定制应用程序
通过用 .NET 生成自定义窗体设计器来定制应用程序 https://www.microsoft.com/china/MSDN/library/netFramework/netframework/Cu ...
- 用VC制作应用程序启动画面
摘 要:本文提供了四种启动画面制作方法. 使用启动画面一是可以减少等待程序加载过程中的枯燥感(尤其是一些大型程序):二是 可以用来显示软件名称和版权等提示信息.怎样使用VC++制作应用程序的启动画面呢 ...
- iOS 9应用开发教程之定制应用程序图标以及真机测试
iOS 9应用开发教程之定制应用程序图标以及真机测试 定制ios9应用程序图标 在图1.12中可以看到应用程序的图标是网状白色图像,它是iOS模拟器上的应用程序默认的图标.这个图标是可以进行改变的.以 ...
- [Windows][VC]开机自动启动程序的几种方法
原文:[Windows][VC]开机自动启动程序的几种方法 很多监控软件要求软件能够在系统重新启动后不用用户去点击图标启动项目,而是直接能够启动运行,方法是写注册表Software\\Microsof ...
- VC++DLL动态链接库程序
VC++DLL动态链接库程序 VC++DLL动态链接库程序 C++ DLL 导出函数 使用VS2017等IDE生成dll程序,示例如下: C++ DLL 导出类 1.导出类中第一种方法:简单导出类(不 ...
- 【vc】1_Windows程序内部运行机制
创建一个Win32应用程序步骤: 1.编写WinMain函数; 2.创建窗口(步骤如下): a.设计(一个)窗口类(WNDCLASS) b.注册(该)窗口类. c.创建窗口. d.显示并更新窗口. 3 ...
- Windows 开发之VC++垃圾清理程序软件
概述 本程序软件的主要实现垃圾文件清理的功能,即对指定的文件格式的临时文件或垃圾文件进行遍历.扫描.显示.删除清理等功能.在程序界面设计方面,对默认对话框重新自定义绘制,主要包括标题栏的重绘.对话框边 ...
- 深入浅出话VC++(1)——Windows程序内部运行机制
一.引言 要想熟练掌握Windows应用程序的开发,首先需要理解Windows平台下程序运行的内部机制,然而在.NET平台下,创建一个Windows桌面程序,只需要简单地选择Windows窗体应用程序 ...
- VC++如何在程序中用代码注册和卸载ocx控件(代码)
方法一:在dos或Windows命令行下运行:regsvr32 ocxname.ocx 注册 示例:regsvr32 netshare.ocx //注册netshare.ocx控件regsvr ...
随机推荐
- conductor 系统任务
动态任务: 参数: dynamicTaskNameParam:来自任务输入的参数的名称,其值用于调度任务. 例如 如果参数的值为ABC,则调度的下一个任务类型为“ABC”. Example { &qu ...
- ssh-keygen生成私钥和公钥
ssh-keygen生成私钥和公钥 例: 用户名:root 服务器地址:192.168.1.10 生成:ssh-keygen -t rsa -b 4096 -C“root@192.168.1.10” ...
- 53. Maximum Subarray (Array; DP)
Find the contiguous subarray within an array (containing at least one number) which has the largest ...
- 【英宝通Unity4.0公开课学习 】(五)47讲到75讲
不知不觉今天都已经看了快30讲了,虽然很想快马加鞭地将后面的内容看完,但为了学习的质量,还是挺下来写一篇blog :) 这两天有些昏昏沉沉的,但感觉生活还安排得不错,原因找去找来觉得是没怎么开窗透气. ...
- C#.net随机数函数
(1)Random rnd = new Random(); int rndNum = rnd.Next(); //int 取值范围内的随机数 int rndNum = rnd.Ne ...
- LocalBroadcastManager 的使用
一.使用本地广播发送一条广播(本例为自己发送自己接收,本地广播也可以是其他应用接收)然后接收到广播时回调Receiver类中的回调方法onReceive()在此方法中自定义发出通知 代码 packag ...
- MySql删除表、数据
程度从强到弱 1.drop table tb drop将表格直接删除,没有办法找回 2.truncate (table) tb 删除表中的所有数据,不能与where一起使用 ...
- svn回退版本/取消修改
取消对代码的修改分为两种情况: 第一种情况:改动没有被提交(commit). 这种情况下,使用svn revert就能取消之前的修改. svn revert用法如下: # svn revert [ ...
- pkg_config找不到库
解决方法 假设libavutil默认安装时libavutil.pc安装到了 /usr/lib64/lib/pkgconfig/ 中,而 echo $PKG_CONFIG_PATH 结果中没有这个路径, ...
- 使用JDBC连接MySql时出现:The server time zone value '�й���ʱ��' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration
在连接字符串后面加上?serverTimezone=UTC 其中UTC是统一标准世界时间. 完整的连接字符串示例:jdbc:mysql://localhost:3306/test?serverTime ...