日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Win32窗体控件方法与消息

發布時間:2025/3/21 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Win32窗体控件方法与消息 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

在Windows中,每個窗體的子控件也稱之為窗體,創建一個控件的方法是CreateWindow

控件公共方法

如GetWindowText,EnableWindow等方法,幾乎每個控件都擁有這些特性,所以這些方法是公用的

控件自身特性

如CheckBox擁有GetCheck和SetCheck方法,windows為每個控件定義了不同的消息事件來進行交互,
比如你調用SetCheck方法,那么實際上就是向Windows內部發送一個BM_SETCHECK的消息,當Windows收到這個消息時就會去處理.
以此類推,其他的控件也是類似的方法.一切都是基于消息來的.如下示例

#define Button_GetCheck(hwndCtl) ((int)(DWORD)SNDMSG((hwndCtl), BM_GETCHECK, 0L, 0L)) #define Button_SetCheck(hwndCtl, check) ((void)SNDMSG((hwndCtl), BM_SETCHECK, (WPARAM)(int)(check), 0L))

Win32 控件API

在WindowsX.h頭文件中定義了很多控件的宏,以方便開發者調用(因為好記的函數總是比用SendMessage方法發送消息來得方便的).好記的名字意味著容易理解如下

#define DeletePen(hpen) DeleteObject((HGDIOBJ)(HPEN)(hpen)) #define SelectPen(hdc, hpen) ((HPEN)SelectObject((hdc), (HGDIOBJ)(HPEN)(hpen))) #define GetStockPen(i) ((HPEN)GetStockObject(i))#define DeleteBrush(hbr) DeleteObject((HGDIOBJ)(HBRUSH)(hbr)) #define SelectBrush(hdc, hbr) ((HBRUSH)SelectObject((hdc), (HGDIOBJ)(HBRUSH)(hbr))) #define GetStockBrush(i) ((HBRUSH)GetStockObject(i))#define DeleteRgn(hrgn) DeleteObject((HGDIOBJ)(HRGN)(hrgn))

我一直搞不明白,為何要定義一個DeleteObject方法,Object太抽象了,而DeletePen就很清晰.再如下定義的宏

#define ListBox_Enable(hwndCtl, fEnable) EnableWindow((hwndCtl), (fEnable))#define ListBox_GetCount(hwndCtl) ((int)(DWORD)SNDMSG((hwndCtl), LB_GETCOUNT, 0L, 0L)) #define ListBox_ResetContent(hwndCtl) ((BOOL)(DWORD)SNDMSG((hwndCtl), LB_RESETCONTENT, 0L, 0L))#define ListBox_AddString(hwndCtl, lpsz) ((int)(DWORD)SNDMSG((hwndCtl), LB_ADDSTRING, 0L, (LPARAM)(LPCTSTR)(lpsz))) #define ListBox_InsertString(hwndCtl, index, lpsz) ((int)(DWORD)SNDMSG((hwndCtl), LB_INSERTSTRING, (WPARAM)(int)(index), (LPARAM)(LPCTSTR)(lpsz)))#define ListBox_AddItemData(hwndCtl, data) ((int)(DWORD)SNDMSG((hwndCtl), LB_ADDSTRING, 0L, (LPARAM)(data))) #define ListBox_InsertItemData(hwndCtl, index, data) ((int)(DWORD)SNDMSG((hwndCtl), LB_INSERTSTRING, (WPARAM)(int)(index), (LPARAM)(data)))

可以看到定義的方式都為以“控件_方法名”的方式來命名的,這樣的方式就容易理解了.雖然本質是發送消息,但我們還是喜歡易記的方法

?

.

轉載于:https://www.cnblogs.com/Clingingboy/archive/2011/04/16/2018285.html

總結

以上是生活随笔為你收集整理的Win32窗体控件方法与消息的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。