如何自己寫Win32控制項

2021-09-30 06:57:00 字數 1560 閱讀 1456

最早時候就曾經**看到過說所有控制項都是視窗(

window

),更有甚者說都是物件,這個就不扯了。自己做好的控制項是做成

lib還是

dll那是後話,

mfc我是不熟悉了,

win32

還是看了幾天的。大致把製作的整個流程簡要的記錄一下。

自己做的控制項最主要的功能就是接受你發給他的命令,也就是要給外部呼叫的介面。控制項有自己的訊息處理函式比如

return

defwindowproc(hwnd,message,wparam,lparam);

這裡有兩類訊息,一類是系統定義的以

wm開頭,一類是自己定義的,當然隨便你自己定義啦。對應的訊息看到是呼叫相應的函式完成的,這也就是說控制項的行為就可以另外編寫邏輯部分,然後提供介面給這裡呼叫即可。

之所以說控制項就是視窗是因為他有自己的視窗類,以及初始化函式,同時也有建立的函式。視窗類的定義和註冊也做成提供給外部的介面,在外部必要的時候呼叫。而控制控制項是通過傳送訊息來實現的,為了更加好看,可以定義乙個巨集,比如

pe_openfile(hwnd, path)        sendmessage((hwnd), pem_openfile, 0, (lparam)(path))

那麼建立視窗和控制項唯一不同的地方就是,內部的建立和銷毀訊息是

wm_nccreate

和wm_ncdestroy

,先不管這兩個訊息。我們看到

wm_nccreate

之前有個

getwindowlong

,其內有個

setwindowlong

。這兩個是關鍵的,這樣就設定了這個控制項的屬性,使其關聯起來,第二個引數

msdn

上是沒有說明設定為

0是什麼意思的,其實這兩個函式的第二個引數設定

0表示讀取的意思,第乙個是讀取該控制項的屬性,然後第二個函式在增加第三個引數的屬性的同時讀取賦予給這個控制項。

一切都ok

了!那麼控制項建立可在外部的

wm_create

之時呼叫,當然也可以在使用其功能前呼叫即可。

一切提供給外部的呼叫都

port

在乙個標頭檔案中,這樣使用的時候包含這個標頭檔案就好了。

接下來解釋那兩個訊息,這兩個訊息是因為我們建立了子視窗,也就是我們自己的控制項。

這兩個訊息與

wm_create,wm_destroy

之間的順序關係是這樣的,只看銷毀吧。

hwnd = parent, umsg = wm_destroy

hwnd = child, umsg = wm_destroy

hwnd = child, umsg = wm_ncdestroy

hwnd = parent, umsg = wm_ncdestroy

wm_destroy

是通知子視窗銷毀,然後子視窗通過接受

wm_ncdestroy

進行銷毀,並傳送給父視窗,進行銷毀。

細節部分介紹的差不多,總體思路就是和建立視窗差不多,但是要搞個頭檔案,把一些個常量和功能的函式另外乙個視窗類的初始化和建立的介面搞進去。

win32 控制項操作

int getwindowtext hwnd hwnd,lptstr lpstring,int nmaxcount boolsetwindowtext hwndhwnd,lpctstrlpstring 問題 如下,vc6 問題描述請看注釋.char sztext 256 wparam wparam ...

Win32控制項使用 Edit控制項

drecik學習經驗分享 edit控制項是乙個很強大的輸入控制項,可以處理很多樣式,通過vs的控制項屬性來設定,有單行,多行,密碼框,滾動條等。其中通知碼可以如下所示 獲得edit控制項輸入的內容可以通過之前討論過的通用函式 參考前面的博文 getwindowtext等。剪下,複製,刪除當前選擇內容...

duilib 封裝win32控制項

思路 就是建立乙個duilib控制項來容納win32控制項。1.和網上的資料一樣,我們建立乙個duilib控制項 pragma once include resource.h include stdafx.h class cwndui public ccontrolui cwndui void vi...