Win32窗体控件方法与消息
生活随笔
收集整理的這篇文章主要介紹了
Win32窗体控件方法与消息
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?
在Windows中,每個窗體的子控件也稱之為窗體,創建一個控件的方法是CreateWindow
控件公共方法
如GetWindowText,EnableWindow等方法,幾乎每個控件都擁有這些特性,所以這些方法是公用的
控件自身特性
如CheckBox擁有GetCheck和SetCheck方法,windows為每個控件定義了不同的消息事件來進行交互,
比如你調用SetCheck方法,那么實際上就是向Windows內部發送一個BM_SETCHECK的消息,當Windows收到這個消息時就會去處理.
以此類推,其他的控件也是類似的方法.一切都是基于消息來的.如下示例
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窗体控件方法与消息的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 逻辑分析推理(五小姐问题)
- 下一篇: ASP.NET 3.5核心编程学习笔记(