link:http://elton.javaeye.com/category/28869
之前說過, 修改窗口大小,窗口樣式的方法。 這裏說明一下修改窗口的圖標,光標和背景的方法。
修改窗口大小,樣式是在創建窗口的時候進行的,而修改圖標,光標和背景是在設計窗口類的時候進行的。 由於MFC封裝了相關操作。 所以我們需要將自己寫的窗口類應用到MFC的框架中。
1. 通過窗口類進行修改
在BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)方法中添加窗口類,如:
- 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; // 窗口類的類型,而不是窗口類型
然後再進行註冊
- RegisterClass(&wndcls);
最後在CREATESTRUCT中指定窗口類
- cs.lpszClass = L"eltonCls";
由於View是在Frame之上的。 所以上面改的背景色,光標會被view覆蓋在下面。 所以同樣需要修改View的PreCreateWindow函數,在PreCreateWindow中添加:
- cs.lpszClass = L"eltonCls";
這樣就可以修改了窗口類的樣式。
2. 通過MFC的AfxRegisterWndClass全局函數修改
之前爲了修改一下圖標之類的,構造一個窗口類有點太麻煩, MFC爲我們提供了一個全局函數AfxRegisterWndClass
- LPCTSTR AFXAPI AfxRegisterWndClass(
- UINT nClassStyle,
- HCURSOR hCursor = 0,
- HBRUSH hbrBackground = 0,
- HICON hIcon = 0
- );
這樣,利用這個函數,在CMainFrame::PreCreateWindow中的輸入:
- cs.lpszClass = AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW, 0, 0, LoadIcon
- (NULL,IDI_APPLICATION));
在View的PreCreateWindow同樣需要輸入:
- cs.lpszClass = AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW, LoadCursor(NULL, IDC_CROSS),
- (HBRUSH)GetStockObject(BLACK_BRUSH), LoadIcon(NULL, IDI_APPLICATION));
以確保在Frame上面的View也設置了相關背景和光標。