VC++ 深入详解 学习笔记(5) -- 修改窗口样式续

来源:互联网 发布:中信淘宝v卡白金卡 编辑:程序博客网 时间:2024/05/21 08:47

From: http://elton.iteye.com/blog/301503


之前说过, 修改窗口大小,窗口样式的方法。 这里说明一下修改窗口的图标,光标和背景的方法。

修改窗口大小,样式是在创建窗口的时候进行的,而修改图标,光标和背景是在设计窗口类的时候进行的。 由于MFC封装了相关操作。 所以我们需要将自己写的窗口类应用到MFC的框架中。

 

1. 通过窗口类进行修改

在BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)方法中添加窗口类,如:

Cpp代码  收藏代码
  1. WNDCLASS wndcls;  
  2. wndcls.cbClsExtra = 0;  
  3. wndcls.cbWndExtra = 0;  
  4. wndcls.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);  
  5. wndcls.hCursor = LoadCursor(NULL, IDC_ARROW);  
  6. wndcls.hIcon = LoadIcon(NULL, IDI_APPLICATION);  
  7. wndcls.hInstance = AfxGetInstanceHandle();  
  8. wndcls.lpfnWndProc = ::DefWindowProc;  
  9. wndcls.lpszClassName = L"eltonCls";  
  10. wndcls.lpszMenuName = NULL;  
  11. wndcls.style = CS_HREDRAW | CS_VREDRAW; // 窗口类的类型,而不是窗口类型  

然后再进行注册

Cpp代码  收藏代码
  1. RegisterClass(&wndcls);  

 最后在CREATESTRUCT中指定窗口类

Cpp代码  收藏代码
  1. cs.lpszClass = L"eltonCls";  

 由于View是在Frame之上的。 所以上面改的背景色,光标会被view覆盖在下面。 所以同样需要修改View的PreCreateWindow函数,在PreCreateWindow中添加:

Cpp代码  收藏代码
  1. cs.lpszClass = L"eltonCls";  

 这样就可以修改了窗口类的样式。

 

2. 通过MFC的AfxRegisterWndClass全局函数修改

之前为了修改一下图标之类的,构造一个窗口类有点太麻烦, MFC为我们提供了一个全局函数AfxRegisterWndClass

Cpp代码  收藏代码
  1. LPCTSTR AFXAPI AfxRegisterWndClass(  
  2.    UINT nClassStyle,  
  3.    HCURSOR hCursor = 0,  
  4.    HBRUSH hbrBackground = 0,  
  5.    HICON hIcon = 0   
  6. );   

 这样,利用这个函数,在CMainFrame::PreCreateWindow中的输入:

Cpp代码  收藏代码
  1. cs.lpszClass = AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW, 0, 0, LoadIcon  
  2.         (NULL,IDI_APPLICATION));   

 在View的PreCreateWindow同样需要输入:

Cpp代码  收藏代码
  1. cs.lpszClass = AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW, LoadCursor(NULL, IDC_CROSS),  
  2.         (HBRUSH)GetStockObject(BLACK_BRUSH), LoadIcon(NULL, IDI_APPLICATION));  

 以确保在Frame上面的View也设置了相关背景和光标。


原创粉丝点击