MFC 修改視窗樣式

2021-06-17 01:21:16 字數 2774 閱讀 6127

之前說過, 修改視窗大小,視窗樣式的方法。 這裡說明一下修改視窗的圖示,游標和背景的方法。

修改視窗大小,樣式是在建立視窗的時候進行的,而修改圖示,游標和背景是在設計視窗類的時候進行的。 由於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

longsetwindowlong(hwndhwnd,// handle to window

intnindex,// offset of value to set

longdwnewlong// new value);

我們可以在cmainframe::oncreate(lpcreatestruct lpcreatestruct)呼叫該函式。與setwindowlong函式相對應的還有getwindowlong,用來獲取指定視窗的資訊。(了解一下)

而在視窗建立後修改游標,背景等,我們可以使用乙個類似的函式---setclasslong(),看看原型 ?

12

3

dwordsetclasslong(hwndhwnd,// handle to window

intnindex,// index of value to change

longdwnewlong// 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...