使用SDK實現MFC模式的處理方法 一

2021-04-20 09:44:09 字數 914 閱讀 6055

沒有,想用sdk而已, 程式看的清爽. 討厭mfc許多麻煩的**.有時候明明很簡單,卻只好用mfc,不爽.

如果你嘗試模仿mfc, 你就會發現似乎有一道過不去的坎, 你想實現自己的cwnd, cdialog, 可是發現很難實現復用. 因為你的"cwnd,cdialog"似乎必須要有乙個尾巴, 這個尾巴就是wndproc, 乙個被要求是__stdcall 的函式.  

假設,你實現了你的基類: cmywindow, 然後你的程式中有兩個視窗: cpigwnd 和 cwolfwnd. 你如何使用乙個wndproc來處理兩個視窗? 你的基類設計也已經失敗了.

實際上,mfc使用了一種 很麻煩的技術實現如何讓每乙個類只與乙個視窗控制代碼想關聯, 而mfc只有乙個wndproc,叫什麼afxwndproc之類的, 在這個afxwndproc中, 他會檢查 hwnd hwnd 引數, 然後通過 fromhandle() ,使hwnd 轉換為cwnd, 然後才呼叫cwnd類的訊息處理函式. 這個是非常麻煩的過程, 想想看mfc把hwnd都存在乙個**中, 然後需要的時候通過hashtable來定位.  從這點看,不得不說sdk的實現非常優雅,準確的說,很純潔.

其實在::createwindowex 中有乙個

怎麼辦? 如果有乙個wndproc能有乙個this指標,指向各自的類,那該有多好啊~

這是乙個稱為動態函式的技術, 

1.我們事先製造乙個wndproc的模板,裡面有乙個叫pthis的指標,他有乙個特徵值. 

2.cmywindow在構造時, 複製wndproc的模板, 然後把pthis的值,改寫成cmywindow例項的this指標.

3.在createwindow時, wndproc 就使用cmywindow的wndproc.

通過這幾步, 很完滿的實現了控制代碼與類的繫結, 相信也比mfc的實現清晰許多,(我一直覺得,mfc是m$的技術人員賣弄技術的產品)

MFC與SDK的不同

先來看一下,什麼是mfc,什麼是sdk吧,sdk software development kit 軟體開發包 mfc microsoft foundations classes 微軟基礎類庫 mfc不只是乙個功能單純的介面開發系統,它提供的類絕大部分用來進行介面開發,關聯乙個視窗的動作,但它提供的...

SDK和MFC的區別

sdk 就是software development kit 軟體開發包 mfc 就是microsoft foundation classes 微軟函式類庫 mfc是對api函式的封裝,也算是vc裡的sdk 用vc編寫windows程式有兩種 1.windwos c方式 sdk 2.c 方式 即對s...

MFC與SDK的不同

size medium sdk software development kit 軟體開發包 mfc microsoft foundations classes 微軟基礎類庫 mfc不只是乙個功能單純的介面開發系統,它提供的類絕大部分用來進行介面開發,關聯乙個視窗的動作,但它提供的類中有好多類不與乙...