在VC中如何获得动态创建的控件的事件?(VC高手请进)(150分)

  • 主题发起人 主题发起人 枫之叶
  • 开始时间 开始时间

枫之叶

Unregistered / Unconfirmed
GUEST, unregistred user!
在VC中,我在程序中动态创建10个CStatic的单选框按钮,并且这10单选框按钮使用同一个
资源,然后我在程序中要判断用户具体选中哪一个,请问如何实现.
 
哪有下VC的?谢了
 
控件消息传递需要ID的,你可以通过一个ID取得操作消息函数,然后逐一判断单选按钮是否被选中。
其实我不明白为什么你不给每个控件分配一个资源ID呢。
 
to kedyo:
因为如果只共用要十个ID,那么程序中不是要映射这十个ID的十个消息函数吗?
 
可以用一个来实现,但是在代码上比较复杂。如果用消息映射,可以只用一个消息映射函数就能完成了。
一个控件的做法可以在消息处理里来完成,就是在代码处理上比较麻烦。
消息多并不麻烦,用MFC的做法就是消息多,不相用那么的消息映射,可以用Win32模式写。
 
to kedyo:
用十个ID但映射一个消息函数,如何实现?
用一个ID一个消息函数又如何实现?能否具体告知?
 
十个单选框不可能完全一样吧,比如Text之类的东西,如果一样的话提供给用户的界面也
太。。。。了,如果不一样的话用这个做为区分的标志。
如果连这个都一样的话,用控件的位置(Rect)吧,反正你创建的时候要指定位置显示的,
每个控件的位置是已知的。到时候和你在界面上取到的控件的位置做一个比较就知道
选择的是哪个了。
 
to lww:十个单选框的Caption是不一样,但是因为是在一个映射消息函数中,所以没法判断
用户具体选择哪个单选框。
 
可以根据创建的位置来判断鼠标位置
 
To All:
[D影子D]同志说的不错,如果只是判断用户是否选中这个操作,可以自己的写个关于CStatic的类,通过WM_NCHITTEST这个消息进行扩展衍生。
如果想要完成些其他的操作,建议不要因为怕代码的重复而刻意的追求简单的高效做法。有时候最为精简的代码不一定是最好的且可靠的代码。
 
答用十各ID映射一个消息响应:
用宏:begin
_MESSAE_RANGE_MAP
END_MESSAGE_RANGE_MAP
 
ON_COMMAND_RANGE(IDC_START,IDC_END,rangeclick)
void CEtcltstDlg::rangeclick(UINT nid)
{
TRACE("%d/n",nid);
GetDlgItem(nid)->SendMessage(IDD_SETNSTATE);
}
 
后退
顶部