Windows按钮

本文介绍了Windows编程中关于按钮的创建和消息处理机制。在创建子窗口控件时,通过循环建立不同类型的按钮,如button, checkbox, radiobox, groupbox。按钮的消息处理主要由Windows系统完成,但BS_OWNERDRAW样式需要程序自绘。点击按钮会向父窗口发送WM_COMMAND消息,而父窗口也可向子窗口发送如BM_GETCHECK, BM_SETCHECK等消息来交互。每个子窗口控件具有唯一的ID和窗口句柄,可用于标识和操作。" 109181764,8616419,React双向绑定与跨域解决方案,"['React', '前端开发', '表单绑定', '跨域']
摘要由CSDN通过智能技术生成
struct
{
     int     iStyle ;
     TCHAR * szText ;
}button[] =
{
     BS_PUSHBUTTON,      TEXT ("PUSHBUTTON"),
     BS_DEFPUSHBUTTON,   TEXT ("DEFPUSHBUTTON"),
     BS_CHECKBOX,        TEXT ("CHECKBOX"), 
     BS_AUTOCHECKBOX,    TEXT ("AUTOCHECKBOX"),
     BS_RADIOBUTTON,     TEXT ("RADIOBUTTON"),
     BS_3STATE,          TEXT ("3STATE"),
     BS_AUTO3STATE,      TEXT ("AUTO3STATE"),
     BS_GROUPBOX,        TEXT ("GROUPBOX"),
     BS_AUTORADIOBUTTON, TEXT ("AUTORADIO"),
     BS_OWNERDRAW,       TEXT ("OWNERDRAW")
} ;

以上是一个结构体数组,包含了Windows内定义的集中样式的按钮,包括button,checkbox,radiobox,groupbox

这几个按钮子控件,在主窗口的消息处理函数中,在处理WM_CREATE消息的时候,通过for循环建立

for (i=0 ; i<NUM ;i++)
     hwndButton[i] = CreateWindow (TEXT("button"), 
                                   button[i].szText,
                                   WS_CHILD | WS_VISIBLE | button[i].iStyle,
                                   cxChar, cyChar * (1 + 2 * i),
                                   20 * cxChar, 7 * cyChar / 4,
                                   hwnd, (HMENU) i,
                                   ((LPCREATESTRUCT) lParam)->hInstance, NULL) ;
     return 0 ;

在创建完子窗口控件后,即调用CreateWindow后,我们就不必再为子控件做任何事了,任何消息都会由windows中的按钮窗口消息处理函数来维护它们,并处理所有重画的工作。(BS_OWNERDRAW样式的按钮例外,它要求程序绘制它,这些将在后面加以讨论)。

在程序终止时,如果父窗口已经被清除,那么Windows将清除这些按钮。

子窗口向父窗口发消息

用鼠标单击按钮时,子窗口控件就向其父窗口发送一个WM_COMMAND消息。父窗口的消息循环处理函数可以拦截WM_COMMAND消息,并进行处理。

当用鼠标单击按钮时,按钮文字的周围会有虚线,这表示该按钮拥有了输入焦点,所有键盘输入都将传送给子窗口控件,而不是传给父窗口。但是当按钮控件拥有输入焦点时,它将忽略所有的键盘输入,除了space键。space键与鼠标有相同的效果。

父窗口向子窗口发送消息

父窗口的消息处理函数也可以向子窗口控件发送消息。这些消息包括以前缀为WM的许多消息,此外WINUSER.h中还定义了8中按钮苏洪铭消息。

按钮消息

BM_GETCHECK

0x00F0

BM_SETCHECK

0x00F1

BM_GETSTATE

0x00F2

BM_SETSTATE

0x00F3

BM_SETSTYLE

0x00F4

BM_CLICK

0x00F5

BM_GETIMAGE

0x00F6

BM_SETIMAGE

0x00F7

BM_GETCHECK与BM_SETCHECK消息由父窗口发送给子窗口控件,以取得或者设定复选框和单选按钮的选中消息。BM_GETSTATE和BM_SETSTATE消息表示按钮处于正常状态还是按下状态。BM_SETSTYLE消息允许在按钮建立之后改变按钮的样式。

每个子窗口控件都具有一个在其兄弟中唯一的窗口句柄与ID值。对于此两者,知道一个就可以知道另外一个。如

id = GetWindowsLong(hWndChild,GWL_ID);
id = GetDlgCtrlID(hWndAChild);

虽然函数名Dlg部分指的时对话框,但实际上这是一个通用的函数。

知道ID与父窗口句柄,就能获得子窗口的句柄

hWndChild = GetDlgItem(hWndParent,id);

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值