在VC中创建的控件数组,如何知道是哪个控件的事件?

Alex106 2001-02-07 01:20:00
在VB中可以通过Index来判断是哪个控件的事件,但在VC中
却无法知道.

如:

CButton button[100];
for( ......) button[i].create 创建100个按钮控件

但是,在用户激发了 click 事件后却不知道按了哪个按钮
...全文
232 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lifanxi 2001-09-28
  • 打赏
  • 举报
回复
总算在大家和MSDN的帮助下实现了我理想中的控件数组。下面把方法写一写与大家一起分享。
如果是静态(已知)个数的控件数组,实现还是比较简单的。
1.在Menu\View\Resource Symbols中建立一些连续的ID,比如IDC_MYBUTTONS值为900,在此之后要留出足够多连续的空的ID。
2.以做按钮数组为例:在头文件中定义一组按钮指针,我这里定义4个。
CButton * m_pButton[4];
3.在需要建立控件数组的地方,比如Dialog的InitDialog()中,生成按钮。
for(int i=0;i<=3;i++)
{
m_pButton[i]=new CButton;
m_pButton[i]->Create(TEXT("按钮标题"),BS_PUSHBUTTON|WS_CHILD|WS_VISIBLE,CRect(0,i*40,100,i*40+40),this,IDC_MYBUTTONS+i); //CRect中指定按钮的位置与大小。
}
4.控件生成后要自己做消息映射,ClassWizard不支持。
在CPP文件中建立消息映射:
ON_COMMAND_RANGE(IDC_MYBUTTONS,IDC_MYBUTTONS+3,OnButton)
在头文件中声明响应消息的函数:
afx_msg void OnButton(UINT nID);
在CPP文件中实现消息响应函数:
void CKJSZDlg::OnButton(UINT nID)
{
// TODO: Add your control notification handler code here

}
上面比较关键的是在做响应函数时要带UINT nID参数,否则在函数中就无法分辨是一组控件中的哪一个产生的消息。
有了nID就可以很方便的用GetDlgItem(nID)来获得指向该控件的指针,并对控件进行必要的操作。
Alex106 2001-02-07
  • 打赏
  • 举报
回复
但是这样太麻烦了

如果是 3000个控件

我写3000个 case 啊
Tools771227 2001-02-07
  • 打赏
  • 举报
回复
case WM_CREATE:
{
for(int i=0;i<100;i++)
CreateWindow(...); // Create Buton 100;
}
case WM_COMMAND:
{
switch(lParam)
{
case ID_BUTTON1:
case ID_BUTTON2:

case ID_BUTTON100:
}
}
masterz 2001-02-07
  • 打赏
  • 举报
回复
compare the HWND with control's hWnd. Every control has a unique hWnd

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧