hur.cn - 华软网

 热门搜索

请教如何接受动态创建的32个checkbox的消息

  作者:未知    来源:网络    更新时间:2011/10/9
请教高手:
在BOOL MyDlg::OnInitDialog()函数中,添加如下代码

    m_dwData = 0;//这个是DWORD成员变量,
    char * str[] = {"性别","婚否","是的"};
    CString temp;
    for ( int i = 0; i < sizeof(str)/sizeof(char*); i ++)
    {
        temp = str[i];
        CButton * pCheck = new CButton;
        pCheck->Create(temp, WS_VISIBLE|WS_CHILD|BS_CHECKBOX, CRect(i * 50 + 50, 10, i*50 + 70, 20), this, 1000 + i);
    }

在check box创建成功之后,在用户点击任何一个check box的时候,程序接受到点击消息,并且要确认是哪个checkbox 被点击了。
请教高手们,该如何接受、解析消息?

---华软 网友回答---
添加消息相应函数,在BEGIN_MESSAGE_MAP(CTestMfcDlg, CDialog)
//{{AFX_MSG_MAP(CTestMfcDlg)

ON_BN_CLICKED(1001, OnBtnCheck)             //这句是添加的

//}}AFX_MSG_MAP
END_MESSAGE_MAP()
然后处理OnBtnCheck方法就OK了。
---华软网友回复---
使用

C++">ON_COMMAND_RANGE(id1, id2, memberFxn )

---华软网友回复---
引用 1 楼 kiven2010 的回复:
添加消息相应函数,在BEGIN_MESSAGE_MAP(CTestMfcDlg, CDialog)
//{{AFX_MSG_MAP(CTestMfcDlg)

ON_BN_CLICKED(1001, OnBtnCheck) //这句是添加的

//}}AFX_MSG_MAP
END_MESSAGE_MAP()
然后处理OnBtnCheck方法就OK了。


我在一个CDialog里面,可能要产生1个32bit的数据check box,甚至要创建96个,或者更多个,如果每个都这样创建,那岂不是很麻烦?
有简洁一些的方法吗,高手?
---华软网友回复---
晕死,不是给你说了:
重载OnCommand
C++">BOOL CYourDlg::OnCommand(WPARAM wParam, LPARAM lParam) 
{
    UINT msg = HIWORD(wParam);
    if (msg == BN_CLICKED)
    {
       int i = LOWORD(wParam) - 1000;//得到位
        m_dwData ^= (1 << i);//与相应位异或
    }
    return CDialog::OnCommand(wParam, lParam);
}

---华软网友回复---
引用 2 楼 akirya 的回复:
使用


C/C++ code
ON_COMMAND_RANGE(id1, id2, memberFxn )



高手你说的ON_COMMAND_RANGE(id1, id2, memberFxn )
看起来好像非常好。
但是,我在vs2010中使用的时候,开发环境提示,这个ON_COMMAND_RANGE找不到?

请教怎么处理?
---华软网友回复---
引用 4 楼 firefly3233 的回复:
晕死,不是给你说了:
重载OnCommand

C/C++ code
BOOL CYourDlg::OnCommand(WPARAM wParam, LPARAM lParam) 
{
    UINT msg = HIWORD(wParam);
    if (msg == BN_CLICKED)
    {
       int i = LOWORD(wParam) - 10……



哥哥,:),你说的这个方法我试了,不行!原因是:
1) 我用的是vs2010,根本没有OnCommand这个函数。只有OnSysCommand这个函数,
2) 我用OnSysCommand这个函数试过了,接受不到消息。
3) OnSysCommand这个函数的参数和OnCommand的参数都不一样,我不知道如何获取哪个checkbox被点击了。

不过还是非常感谢你的指教,你说的动态创建32个checkbox的方法很好,我试过了,能创建成功。

---华软网友回复---
引用 5 楼 specialfaint 的回复:
引用 2 楼 akirya 的回复:
使用


C/C++ code
ON_COMMAND_RANGE(id1, id2, memberFxn )



高手你说的ON_COMMAND_RANGE(id1, id2, memberFxn )
看起来好像非常好。
但是,我在vs2010中使用的时候,开发环境提示,这个ON_COMMAND_RANGE找不到?

请教怎么处理……

http://msdn.microsoft.com/en-us/library/9ab3z9tb.aspx

---华软网友回复---
引用 7 楼 akirya 的回复:
引用 5 楼 specialfaint 的回复:

引用 2 楼 akirya 的回复:
使用


C/C++ code
ON_COMMAND_RANGE(id1, id2, memberFxn )



高手你说的ON_COMMAND_RANGE(id1, id2, memberFxn )
看起来好像非常好。
但是,我在vs2010中使用的时候,开发环境提示,这个ON_……



我知道你会发MSDN的内容出来!
我已经在MSDN上找到了这写内容。
问题就是,我的VS2010就是提示没有这个东西??请教是什么原因呢?怎么解决?
另外,即使使用这个能够让我接受到所有checkbox的命令,我用什么方法判断到底是哪个checkbox被点击了呢?
请高手指教!

不好意思,我是菜鸟,请不要生气啊!
---华软网友回复---
引用 8 楼 specialfaint 的回复:
引用 7 楼 akirya 的回复:
引用 5 楼 specialfaint 的回复:

引用 2 楼 akirya 的回复:
使用


C/C++ code
ON_COMMAND_RANGE(id1, id2, memberFxn )



高手你说的ON_COMMAND_RANGE(id1, id2, memberFxn )
看起来好像非常好。
但是,我在vs20……

那就是你用的问题了。这个宏有年头了,而且还很常用。MS不可能改这个宏,或者去掉。

pCheck->Create(temp, WS_VISIBLE|WS_CHILD|BS_CHECKBOX, CRect(i * 50 + 50, 10, i*50 + 70, 20), this, 1000 + i);
最后参数1000+i 这个就是ID,根据ID区分。
---华软网友回复---
引用 4 楼 firefly3233 的回复:
晕死,不是给你说了:
重载OnCommand

C/C++ code
BOOL CYourDlg::OnCommand(WPARAM wParam, LPARAM lParam) 
{
    UINT msg = HIWORD(wParam);
    if (msg == BN_CLICKED)
    {
       int i = LOWORD(wParam) - 10……



哦,……………………………………………………
高手…………………………………………………………


我知道了,使用你说的这个方法应该是最好的。

我可以在类向导中找到OnCommand函数,重载…………………………
感谢!………………………………
---华软网友回复---
引用 9 楼 akirya 的回复:
引用 8 楼 specialfaint 的回复:

引用 7 楼 akirya 的回复:
引用 5 楼 specialfaint 的回复:

引用 2 楼 akirya 的回复:
使用


C/C++ code
ON_COMMAND_RANGE(id1, id2, memberFxn )



高手你说的ON_COMMAND_RANGE(id1, id2, member……




关于这个宏的问题:ON_COMMAND_RANGE
我baidu了一下,看到很多朋友碰到类似的问题,他们都说是应为消息处理函数的返回结果,不能是void,而应该是LRESULT。我按照同样的方法试过了,VS2010还是说,找不到这个东西………………



---华软网友回复---
  class="deleted_message"> 该回复于2011-10-27 08:05:13被版主删除
---华软网友回复---
引用 11 楼 specialfaint 的回复:
引用 9 楼 akirya 的回复:
引用 8 楼 specialfaint 的回复:

引用 7 楼 akirya 的回复:
引用 5 楼 specialfaint 的回复:

引用 2 楼 akirya 的回复:
使用


C/C++ code
ON_COMMAND_RANGE(id1, id2, memberFxn )



高手你说的ON_COMMAND_RA……




高手:

我找到这个问题的原因和解决办法了:
ON_COMMAND_RANGE(id1, id2, memberFxn )
的memberFxn 函数,必须有形参UINT,返回值可以为void。
否则就会报错……………………

---华软网友回复---
引用 13 楼 specialfaint 的回复:
引用 11 楼 specialfaint 的回复:
引用 9 楼 akirya 的回复:
引用 8 楼 specialfaint 的回复:

引用 7 楼 akirya 的回复:
引用 5 楼 specialfaint 的回复:

引用 2 楼 akirya 的回复:
使用


C/C++ code
ON_COMMAND_RANGE(id1, id2, memberFxn ……



并且返回的形参UINT a,其中的a,就是点击后的check box的ID………………………………………………………………………………
---华软网友回复---
引用 14 楼 specialfaint 的回复:
引用 13 楼 specialfaint 的回复:
引用 11 楼 specialfaint 的回复:
引用 9 楼 akirya 的回复:
引用 8 楼 specialfaint 的回复:

引用 7 楼 akirya 的回复:
引用 5 楼 specialfaint 的回复:

引用 2 楼 akirya 的回复:
使用


C/C++ code
ON_COMMAN……


是这样的
---华软网友回复---
引用 15 楼 kiven2010 的回复:
引用 14 楼 specialfaint 的回复:

引用 13 楼 specialfaint 的回复:
引用 11 楼 specialfaint 的回复:
引用 9 楼 akirya 的回复:
引用 8 楼 specialfaint 的回复:

引用 7 楼 akirya 的回复:
引用 5 楼 specialfaint 的回复:

引用 2 楼 akirya 的回复:
使……



高手!!!……………………


你这句:是这样的
我不知道是好话还是坏话!!
我们在这里讨论、请教,上网查询!
最后问题解决了,你再跑过来说一句,是这样的………………
你要是早知道,怎么不早点说呢?
这是在耍我吗?


版主!
这种回帖能扣分吗?
如果能扣分我一定扣你的分!
---华软网友回复---
引用 6 楼 specialfaint 的回复:
哥哥,:),你说的这个方法我试了,不行!原因是:
1) 我用的是vs2010,根本没有OnCommand这个函数。只有OnSysCommand这个函数,
2) 我用OnSysCommand这个函数试过了,接受不到消息。
3) OnSysCommand这个函数的参数和OnCommand的参数都不一样,我不知道如何获取哪个checkbox被点击了。

VS2010难道不支持MFC,这是MFC的一个WM_COMMAND消息响应函数,好象在虚函数,需要自己添加的.
我们大部分人用得是VC6.0,VS2010确实比较难用.
找不到好好找,不行,换回VC6.0

你的脾气是有点大,你是来请教的,比你懂得多的人,很可能觉得很简单,所以说话可能有点不好听,但是为你好.你要本着请教的目的,不要这点小气都受不了.
如果动不动就发脾气,以后就没人再帮你了.
---华软网友回复---
引用 17 楼 firefly3233 的回复:
引用 6 楼 specialfaint 的回复:
哥哥,:),你说的这个方法我试了,不行!原因是:
1) 我用的是vs2010,根本没有OnCommand这个函数。只有OnSysCommand这个函数,
2) 我用OnSysCommand这个函数试过了,接受不到消息。
3) OnSysCommand这个函数的参数和OnCommand的参数都不一样,我不知道如何获取哪个checkbox被点击……


不好意思,高手!
我没有丝毫的对你发脾气的意思,叫你哥哥,纯粹是开玩笑的。
不要生气!
---华软网友回复---
引用 16 楼 specialfaint 的回复:
引用 15 楼 kiven2010 的回复:
引用 14 楼 specialfaint 的回复:

引用 13 楼 specialfaint 的回复:
引用 11 楼 specialfaint 的回复:
引用 9 楼 akirya 的回复:
引用 8 楼 specialfaint 的回复:

引用 7 楼 akirya 的回复:
引用 5 楼 specialfaint 的回复:……

你这种人真是人品有问题,我第一个回帖帮你顶的,然后我再回来的时候发现已经有这么多人回复了,然后我回你句你说的对,你竟然说我耍你,我真不知道该对你这种人说什么了。。。

---华软网友回复---
既然接受不了别人的回复,为啥还要发帖呢?别人帮你还有错了?      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。