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