mfc 學習筆記

2021-08-01 08:48:47 字數 3367 閱讀 8829

關於訊息id:

win32中,每乙個按鈕需要手動設定訊息id,並到訊息處理函式中分支判斷並處理,在處理函式中,未處理的訊息default返回false時,系統會有預設處理,返回true時需要自己處理,if default return true,show maybe error哈;

但在mfc中,新增按鈕,改好訊息id後,只需雙擊便自動生產乙個對映的成員函式來處理訊息,每個訊息id物件乙個成員函式(訊息對映)。注意,改了某個按鈕的id後前乙個id的巨集和成員處理函式不會被刪除。

mfc整體框架:

mfc內部共有六大關鍵技術,架構起了mfc開發平台:

訊息對映

執行時型別識別

動態建立

永久儲存

訊息傳遞

模式對話方塊和非模式對話方塊:

對於非模式對話方塊,enddialog(idxx);並不能關閉,只是隱藏了非模式對話方塊,可以再次showwindow(xx)而不需要再次create()。可以使用destroywindow()真正關閉,這是乙個視窗、控制項通用關閉函式。

cwnd 成員函式:

destroywindow():

create()、createex():建立並設定顯示風格等,ex有擴充套件風格

getdlgitem():通過id獲取物件指標,臨時物件指標,不要儲存,同fromhande()

獲取視窗控制代碼:pwnd = getdlgitem(id)//獲取某視窗物件指標     1、pwnd->m_hwnd;       2、operate hwnd();3、getsafehwnd()

fromhandle(hwnd):如果有某視窗的控制代碼,可以將其轉為其物件指標。產生的臨時物件,只限於當前韓式使用,不要將其儲存與members or global

attach() 、detach():為乙個cwnd物件嫁接和移除視窗控制代碼,成對使用,一般init()和 destroy()中使用,否則關閉時會出錯。可用(****)cwnd::getdlgitem(nid)代替,靜態建立。動態建立:先new then create。

subclasswindow()unsubclasswindow() :子類和反子類化,能通過子類(自定義)接收視窗訊息

subclassdlgitem():子類化指定id對應的控制項,能通過子類(自定義)接收視窗訊息

**1.有控制代碼轉為cwnd物件

(1)fromhandle和getglgitem:產生乙個臨時性視窗指標,只限於在當前函式內使用;

(2)attach和detach成對使用為乙個cwnd物件嫁接和移除視窗控制代碼。只用attach在摧毀視窗時會出現錯誤;

(3)subclasswindow和unsubclasswindow,子類化和反子類化,還能通過子類接收視窗訊息;

(4)subclassdlgitem,子類化指定id對應的空間視窗,還能通過子類接收視窗訊息;

2.獲取視窗資訊函式

(1)getwindowtext和setwindowtext獲取和設定視窗的文字;

(2)getstyle和modifystyle:獲取和設定視窗的基礎風格;

(3)getexstyle和modifystyleex:獲取和設定視窗的寬展風格;

3.視窗狀態函式

(1)getwindowrect:獲得以螢幕座標係為基礎的視窗矩形區域;

(2)getclientrect:獲得以物件關聯的以其客戶區為基礎的客戶區矩形視窗,,left和top均為0;

(3)iswindowvisible()判斷視窗可見或被隱藏;

(4)isiconic判斷視窗是否為最小化;

(5)iszoomed判斷視窗是否為最大化;

(6)gettopwindow:獲得當前父視窗內所有子視窗中最低(top)的子視窗

(7)getforegroundwindow:獲取工作列內的乙個主視窗

(8)getactivewindow:在同一程序內的所有視窗處於啟用狀態的視窗

4.視窗操作函式

(1)showwindow:改變視窗的顯示狀態,包括最大化和最小化、隱藏……;

(2)enablewindow(true)啟用視窗或控制項;enablewindow(true)禁用視窗或控制項;

(3)movewindow:移動視窗,二維;

(4)setwindowpos:視窗移動,三維,此函式後最好invalidata()重新整理一下 &wndtop從別的子物件下面移動;swp_nosize(寬高不變),swp_nomove(x、y方向不移動,z軸移動);

常用於前端顯示功能的開發&wndtopmost;

(5)findwindow:查詢視窗控制代碼,可利用工具spy++獲取其他視窗控制代碼;

(6)centerwindow:居中視窗,視窗以螢幕居中,視窗內的控制項以視窗居中;

(7)inflaterect:擴充套件視窗尺寸;

(8)bringwindowtotop:setwindowpos的子函式,和 setwindowpos(&wndtop……)一樣,處理子視窗內層疊關係

(9)setfforegroundwindow:將工作列內的乙個主視窗推到前面(對主視窗bringwindowtotop也能起到同樣的功能)

(10)setactivewindow:在同一程序內的,所有視窗中的乙個視窗設定為啟用狀態。

(11)falshwindow:指定視窗閃爍,(如:聊天工具有資訊)

5.視窗關係

(1)getdlgitem:根據id獲取乙個子視窗的物件位址(控制代碼)

(2)getdlgitemtext和setdlgitemtext:根據id獲取(設定)乙個子視窗的標題文字

(3)getdlgitemint和setdlgitemint:根據id獲取(設定)乙個子視窗內顯示的數字

(4)getdlgctrlid和setdlgctrlid:根據視窗物件內的控制代碼獲取(設定)視窗的id

(5)getparent和ischild:求出父視窗和判斷乙個視窗是否為子視窗

(6)getwindow:獲得視窗,可獲得子視窗下乙個或上乙個視窗

6.函式等價關係

()ischild與getparent

()isiconic與getstyle()&ws_minimize

()iszoomed與getstyle()&ws_maximize

()iswindowvisible與getstyle()&ws_visible

()setdlgitemtext與getdlgitem(...)->setwindowtext

5.計時器

(1)settimer(123,50,null);123為這個時間函式的id,50為50ms啟動一次時間訊息函式wm_ontimer;

(2)killtimer()結束某個時間函式;

6.常用重新整理函式

(1)invalidata和invalidatarect

(2)updatawindow

(3)redrawwindow

MFC學習筆記( )

選單響應順序 view類 文件類 框架類 應用程式類 訊息分類 標準訊息 除wm command之外,所有以wm 開頭的訊息。從cwnd派生的類,都可以接收到這類訊息。命令訊息 來自選單 加速鍵或工具欄按鈕的訊息。這類訊息都以wm command呈現。在mfc中,通過選單項的標識 id 來區分不同的...

MFC學習筆記

1.oncreate函式目前來看只執行了一次 2.對於隱藏的this指標,不是類中的函式成員。當在類的非靜態成員函式中訪問類的非靜態成員的時候,編譯器會自動將物件本身的位址作為乙個隱含引數傳遞給函式 也就是說,即使你沒有寫上this指標,編譯器在編譯的時候也是加上this的,它作為非靜態成員函式的隱...

MFC 學習筆記

作業 用單文件檢視完成左鍵使圓圈變小,右鍵使圓圈變大,按住ctrl的同時移動滑鼠使圓圈跟著移動。document處理頁面的資料 view呈現和互動。on wm lbuttonup等滑鼠訊息帶著uint nflags 掩碼 引數,記錄滑鼠訊息的同時的附加資訊 比如ctrl或shift鍵 在initin...