之前說過, 修改視窗大小,視窗樣式的方法。 這裡說明一下修改視窗的圖示,游標和背景的方法。
修改視窗大小,樣式是在建立視窗的時候進行的,而修改圖示,游標和背景是在設計視窗類的時候進行的。 由於mfc封裝了相關操作。 所以我們需要將自己寫的視窗類應用到mfc的框架中。
1. 通過視窗類進行修改
在bool cmainframe::precreatewindow(createstruct& cs)方法中新增視窗類,如:
wndclass wndcls;
wndcls.cbcl***tra = 0;
wndcls.cbwndextra = 0;
wndcls.hbrbackground = (hbrush)getstockobject(black_brush);
wndcls.hcursor = loadcursor(null, idc_arrow);
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
在view的precreatewindow同樣需要輸入:
cs.lpszclass = afxregisterwndclass(cs_hredraw | cs_vredraw, loadcursor(null, idc_cross),
在視窗建立之後修改:
在視窗建立之後利用
setwindowlong
函式來改變視窗的外觀,
看看函式原型:?
12
3
long
setwindowlong(
hwnd
hwnd,
// handle to window
int
nindex,
// offset of value to set
long
dwnewlong
// new value);
我們可以在cmainframe::oncreate(lpcreatestruct lpcreatestruct)呼叫該函式。與setwindowlong函式相對應的還有getwindowlong,用來獲取指定視窗的資訊。(了解一下)
而在視窗建立後修改游標,背景等,我們可以使用乙個類似的函式---setclasslong(),看看原型 ?
12
3
dword
setclasslong(
hwnd
hwnd,
// handle to window
int
nindex,
// index of value to change
long
dwnewlong
// new value);
至於引數中有那些符合的取值,msdn中詳細介紹。我們使用此函式在viwe類中的oncreate()函式呼叫它。
ps:afxgetinstancehandle()獲取程式控制程式碼
巨集makeintresouce將乙個int型資源轉換成與資源管理函式相容的資源型別——是乙個巨集!!!
MFC中更改視窗樣式
使用mfc生成多文件應用程式時,會自動生成cmainframe類和cchildframe類,要修改視窗的樣式,可以在cchildframe的precreatewindow方法中進行修改,如下 bool cchildframe precreatewindow createstruct cs 是通過指定...
如何修改MFC視窗標題
mfc程式的預設的標題是 無標題 title 其中title是應用程式的名稱,我們應如何修改mfc視窗標題來符合自己的要求?mfc程式的文件類中定義了乙個虛函式settitle,用於設定視窗標題的前半部分,如果只是要修改 無標題 部分,可以過載文件類的該函式。視窗標題的後半部分可以通過setwind...
如何修改MFC視窗標題
mfc程式的預設的標題是 無標題 title 其中title是應用程式的名稱,我們應如何修改mfc視窗標題來符合自己的要求?mfc程式的文件類中定義了乙個虛函式settitle,用於設定視窗標題的前半部分,如果只是要修改 無標題 部分,可以過載文件類的該函式。視窗標題的後半部分可以通過setwind...