请教高手:
在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 被点击了。
请教高手们,该如何接受、解析消息?
在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 被点击了。
请教高手们,该如何接受、解析消息?
//{{AFX_MSG_MAP(CTestMfcDlg) ON_BN_CLICKED(1001, OnBtnCheck) //这句是添加的 //}}AFX_MSG_MAP
END_MESSAGE_MAP()
然后处理OnBtnCheck方法就OK了。
我在一个CDialog里面,可能要产生1个32bit的数据check box,甚至要创建96个,或者更多个,如果每个都这样创建,那岂不是很麻烦?
有简洁一些的方法吗,高手?
重载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);
}
看起来好像非常好。
但是,我在vs2010中使用的时候,开发环境提示,这个ON_COMMAND_RANGE找不到?请教怎么处理?
1) 我用的是vs2010,根本没有OnCommand这个函数。只有OnSysCommand这个函数,
2) 我用OnSysCommand这个函数试过了,接受不到消息。
3) OnSysCommand这个函数的参数和OnCommand的参数都不一样,我不知道如何获取哪个checkbox被点击了。不过还是非常感谢你的指教,你说的动态创建32个checkbox的方法很好,我试过了,能创建成功。
我已经在MSDN上找到了这写内容。
问题就是,我的VS2010就是提示没有这个东西??请教是什么原因呢?怎么解决?
另外,即使使用这个能够让我接受到所有checkbox的命令,我用什么方法判断到底是哪个checkbox被点击了呢?
请高手指教!不好意思,我是菜鸟,请不要生气啊!
最后参数1000+i 这个就是ID,根据ID区分。
高手…………………………………………………………
我知道了,使用你说的这个方法应该是最好的。我可以在类向导中找到OnCommand函数,重载…………………………
感谢!………………………………
关于这个宏的问题:ON_COMMAND_RANGE
我baidu了一下,看到很多朋友碰到类似的问题,他们都说是应为消息处理函数的返回结果,不能是void,而应该是LRESULT。我按照同样的方法试过了,VS2010还是说,找不到这个东西………………
高手:我找到这个问题的原因和解决办法了:
ON_COMMAND_RANGE(id1, id2, memberFxn )
的memberFxn 函数,必须有形参UINT,返回值可以为void。
否则就会报错……………………
我们大部分人用得是VC6.0,VS2010确实比较难用.
找不到好好找,不行,换回VC6.0你的脾气是有点大,你是来请教的,比你懂得多的人,很可能觉得很简单,所以说话可能有点不好听,但是为你好.你要本着请教的目的,不要这点小气都受不了.
如果动不动就发脾气,以后就没人再帮你了.