请教大家,系统是怎么自动完成radio button的互斥事件的

如题所述

运行程序,当选择其中一个的时候,同组其他几个会自动取消选择。于是我想到用一个自绘制的普通按钮,创建在一个单选框的位置上,隐藏单选框,点击时使用被隐藏的单选框发送某些消息,达到间接点击的目的。这样做是因为我想直接利用系统单选框的UI机制。用spy++跟踪了单选框的相关消息,控件自己的:BM_SETCHECK;父窗口的:WM_COMMAND给自己的消息中,WPARAM为选择状态BST_CHECKED和BST_UNCHECKED,LPARAM为空。于是我照葫芦画瓢就发了两条消息,一条给自己,一条给父窗口。结果是,系统把我所选的那个单选框选择了,但是其他的事情都没有管。直接调用SetCheck,也不行。请大家帮忙解释一下,先谢过了!------解决方案--------------------------------------------------------给你贴一点MFC里面的代码,很明白就看出来原理了。void AFXAPI DDX_Radio(CDataExchange* pDX, int nIDC, int& value)// must be first in a group of auto radio buttons{do{if (::SendMessage(hWndCtrl, WM_GETDLGCODE, 0, 0L) & DLGC_RADIOBUTTON){// control in group is a radio buttonif (pDX-m_bSaveAndValidate){if (::SendMessage(hWndCtrl, BM_GETCHECK, 0, 0L) != 0){ASSERT(value == -1); // only set oncevalue = iButton;}}else{// select button::SendMessage(hWndCtrl, BM_SETCHECK, (iButton == value), 0L);}iButton++;}else{TRACE(traceAppMsg, 0, Warning: skipping non-radio button in group.\n);}hWndCtrl = ::GetWindow(hWndCtrl, GW_HWNDNEXT);} while (hWndCtrl != NULL &&!(GetWindowLong(hWndCtrl, GWL_STYLE) & WS_GROUP));}很明显就是用向本Group中的所有的RadioButton发送消息,选中的发送Check,其它的发送UnCheck------解决方案--------------------------------------------------------我刚刚做完一个关于此类似的东西,我是用自己想的办法实现的。pButton-SetCheck();pButton是按钮指针,思路就是这样的。------解决方案--------------------------------------------------------可以使用插入源代码的方式C/C++ code
温馨提示:答案为网友推荐,仅供参考
相似回答