请教高手:
在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 被点击了。
请教高手们,该如何接受、解析消息?

解决方案 »

  1.   

    添加消息相应函数,在BEGIN_MESSAGE_MAP(CTestMfcDlg, CDialog)
    //{{AFX_MSG_MAP(CTestMfcDlg) ON_BN_CLICKED(1001, OnBtnCheck)             //这句是添加的 //}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    然后处理OnBtnCheck方法就OK了。
      

  2.   

    使用ON_COMMAND_RANGE(id1, id2, memberFxn )
      

  3.   


    我在一个CDialog里面,可能要产生1个32bit的数据check box,甚至要创建96个,或者更多个,如果每个都这样创建,那岂不是很麻烦?
    有简洁一些的方法吗,高手?
      

  4.   

    晕死,不是给你说了:
    重载OnCommand
    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);
    }
      

  5.   

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

  6.   

    哥哥,:),你说的这个方法我试了,不行!原因是:
    1) 我用的是vs2010,根本没有OnCommand这个函数。只有OnSysCommand这个函数,
    2) 我用OnSysCommand这个函数试过了,接受不到消息。
    3) OnSysCommand这个函数的参数和OnCommand的参数都不一样,我不知道如何获取哪个checkbox被点击了。不过还是非常感谢你的指教,你说的动态创建32个checkbox的方法很好,我试过了,能创建成功。
      

  7.   

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

  8.   

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

  9.   

    那就是你用的问题了。这个宏有年头了,而且还很常用。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区分。
      

  10.   

    哦,……………………………………………………
    高手…………………………………………………………
    我知道了,使用你说的这个方法应该是最好的。我可以在类向导中找到OnCommand函数,重载…………………………
    感谢!………………………………
      

  11.   


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

  12.   


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

  13.   

    并且返回的形参UINT a,其中的a,就是点击后的check box的ID………………………………………………………………………………
      

  14.   

    VS2010难道不支持MFC,这是MFC的一个WM_COMMAND消息响应函数,好象在虚函数,需要自己添加的.
    我们大部分人用得是VC6.0,VS2010确实比较难用.
    找不到好好找,不行,换回VC6.0你的脾气是有点大,你是来请教的,比你懂得多的人,很可能觉得很简单,所以说话可能有点不好听,但是为你好.你要本着请教的目的,不要这点小气都受不了.
    如果动不动就发脾气,以后就没人再帮你了.