VC++ 深入详解 学习笔记(5) -- 修改窗口样式续
2012-02-13 13:30
483 查看
From: http://elton.iteye.com/blog/301503
之前说过, 修改窗口大小,窗口样式的方法。 这里说明一下修改窗口的图标,光标和背景的方法。
修改窗口大小,样式是在创建窗口的时候进行的,而修改图标,光标和背景是在设计窗口类的时候进行的。 由于MFC封装了相关操作。 所以我们需要将自己写的窗口类应用到MFC的框架中。
1. 通过窗口类进行修改
在BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)方法中添加窗口类,如:
Cpp代码
WNDCLASS wndcls;
wndcls.cbClsExtra = 0;
wndcls.cbWndExtra = 0;
wndcls.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
wndcls.hCursor = LoadCursor(NULL, IDC_ARROW);
wndcls.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wndcls.hInstance = AfxGetInstanceHandle();
wndcls.lpfnWndProc = ::DefWindowProc;
wndcls.lpszClassName = L"eltonCls";
wndcls.lpszMenuName = NULL;
wndcls.style = CS_HREDRAW | CS_VREDRAW; // 窗口类的类型,而不是窗口类型
然后再进行注册
Cpp代码
RegisterClass(&wndcls);
最后在CREATESTRUCT中指定窗口类
Cpp代码
cs.lpszClass = L"eltonCls";
由于View是在Frame之上的。 所以上面改的背景色,光标会被view覆盖在下面。 所以同样需要修改View的PreCreateWindow函数,在PreCreateWindow中添加:
Cpp代码
cs.lpszClass = L"eltonCls";
这样就可以修改了窗口类的样式。
2. 通过MFC的AfxRegisterWndClass全局函数修改
之前为了修改一下图标之类的,构造一个窗口类有点太麻烦, MFC为我们提供了一个全局函数AfxRegisterWndClass
Cpp代码
LPCTSTR AFXAPI AfxRegisterWndClass(
UINT nClassStyle,
HCURSOR hCursor = 0,
HBRUSH hbrBackground = 0,
HICON hIcon = 0
);
这样,利用这个函数,在CMainFrame::PreCreateWindow中的输入:
Cpp代码
cs.lpszClass = AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW, 0, 0, LoadIcon
(NULL,IDI_APPLICATION));
在View的PreCreateWindow同样需要输入:
Cpp代码
cs.lpszClass = AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW, LoadCursor(NULL, IDC_CROSS),
(HBRUSH)GetStockObject(BLACK_BRUSH), LoadIcon(NULL, IDI_APPLICATION));
以确保在Frame上面的View也设置了相关背景和光标。
之前说过, 修改窗口大小,窗口样式的方法。 这里说明一下修改窗口的图标,光标和背景的方法。
修改窗口大小,样式是在创建窗口的时候进行的,而修改图标,光标和背景是在设计窗口类的时候进行的。 由于MFC封装了相关操作。 所以我们需要将自己写的窗口类应用到MFC的框架中。
1. 通过窗口类进行修改
在BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)方法中添加窗口类,如:
Cpp代码
WNDCLASS wndcls;
wndcls.cbClsExtra = 0;
wndcls.cbWndExtra = 0;
wndcls.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
wndcls.hCursor = LoadCursor(NULL, IDC_ARROW);
wndcls.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wndcls.hInstance = AfxGetInstanceHandle();
wndcls.lpfnWndProc = ::DefWindowProc;
wndcls.lpszClassName = L"eltonCls";
wndcls.lpszMenuName = NULL;
wndcls.style = CS_HREDRAW | CS_VREDRAW; // 窗口类的类型,而不是窗口类型
然后再进行注册
Cpp代码
RegisterClass(&wndcls);
最后在CREATESTRUCT中指定窗口类
Cpp代码
cs.lpszClass = L"eltonCls";
由于View是在Frame之上的。 所以上面改的背景色,光标会被view覆盖在下面。 所以同样需要修改View的PreCreateWindow函数,在PreCreateWindow中添加:
Cpp代码
cs.lpszClass = L"eltonCls";
这样就可以修改了窗口类的样式。
2. 通过MFC的AfxRegisterWndClass全局函数修改
之前为了修改一下图标之类的,构造一个窗口类有点太麻烦, MFC为我们提供了一个全局函数AfxRegisterWndClass
Cpp代码
LPCTSTR AFXAPI AfxRegisterWndClass(
UINT nClassStyle,
HCURSOR hCursor = 0,
HBRUSH hbrBackground = 0,
HICON hIcon = 0
);
这样,利用这个函数,在CMainFrame::PreCreateWindow中的输入:
Cpp代码
cs.lpszClass = AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW, 0, 0, LoadIcon
(NULL,IDI_APPLICATION));
在View的PreCreateWindow同样需要输入:
Cpp代码
cs.lpszClass = AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW, LoadCursor(NULL, IDC_CROSS),
(HBRUSH)GetStockObject(BLACK_BRUSH), LoadIcon(NULL, IDI_APPLICATION));
以确保在Frame上面的View也设置了相关背景和光标。
相关文章推荐
- VC++ 深入详解 学习笔记(5) -- 修改窗口样式续
- VC 深入详解 学习笔记
- 孙鑫VC学习笔记:第九讲 界面修改,工具栏,状态栏,启动画面的制作
- VC++学习笔记之创建窗口
- 孙鑫VC学习笔记:第十一讲 (五) 如何使窗口具有滚动条
- VS2013MFC对话框工程学习笔记五 - 了解窗口和窗口控件的属性并修改
- 孙鑫 VC++ 深入详解 笔记 1
- 【转】修改默认样式 Flex学习笔记
- 【MongoDB学习笔记12】深入MongoDB的更新(update)操作:数组修改
- STL学习笔记一(深入VC之STL系列)
- .Net学习笔记----2015-07-14(CSS当中的样式属性详解)
- MFC学习 修改窗口样式
- 孙鑫VC学习笔记:第十讲画图 在窗口中贴上位图
- 学习笔记之MFC修改默认窗口大小
- 孙鑫VC学习笔记:第九讲 界面修改,工具栏,状态栏,启动画面的制作
- 《TCP-IP详解 卷2:实现》学习笔记—mbuf的深入解析
- 黑马程序员_学习笔记5——DIV+css样式详解
- 小结9.6——学习深入详解VC++
- <深入理解JavaScript>学习笔记(5)_强大的原型和原型链
- django学习笔记---如何自定义中间件详解