VC++ 深入詳解 學習筆記(5) -- 修改窗口樣式續

link:http://elton.javaeye.com/category/28869

之前說過, 修改窗口大小,窗口樣式的方法。 這裏說明一下修改窗口的圖標,光標和背景的方法。

修改窗口大小,樣式是在創建窗口的時候進行的,而修改圖標,光標和背景是在設計窗口類的時候進行的。 由於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也設置了相關背景和光標。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章