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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Win32窗体控件方法与消息

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

?

在Windows中,每個(gè)窗體的子控件也稱之為窗體,創(chuàng)建一個(gè)控件的方法是CreateWindow

控件公共方法

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

控件自身特性

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

#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頭文件中定義了很多控件的宏,以方便開發(fā)者調(diào)用(因?yàn)楹糜浀暮瘮?shù)總是比用SendMessage方法發(fā)送消息來得方便的).好記的名字意味著容易理解如下

#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))

我一直搞不明白,為何要定義一個(gè)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)))

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

?

.

轉(zhuǎn)載于:https://www.cnblogs.com/Clingingboy/archive/2011/04/16/2018285.html

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。