如何动态创建控件

comeonstuding 2003-10-24 06:07:52
分配一个控件对象的实例并调用其Create成员函数。开发者最容易忽略两件事:忘记指定WS_VISBLE标签和在栈中分配控件对象。下例动态地创建一个下压按钮控件:
//In class declaration (.H file ).
private : CButton* m _pButton

m_pButton =new CButton
ASSERT_VALID (m_pButton)
m_pButton —>Create (_T ("Button Title ") , WS_CHILD |WS_VISIBLE |BS_PUSHBUTTON. Crect ( 0, 0, 100 , 24) , this , IDC _MYBUTTON )

但我要创建多个而且对每个按钮的按下事件作相应的处理
怎样对动态创建控件作相应的消息处理
而不是人工的知道有多少的控件所以不能对相应的控件预先做相应的消息处理函数
...全文
137 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
liushuaiboy 2004-03-20
  • 打赏
  • 举报
回复
好多高手呀,mark
hahu 2003-11-04
  • 打赏
  • 举报
回复
const MSG *msg;
msg=GetCurrentMessage();
这里可能是这样
hahu 2003-11-04
  • 打赏
  • 举报
回复
都指向同一个函数
OnClick()
函数里面
const MSG msg;
&msg=GetCurrentMessage();
switch(LWORD(GetCurrentMessage()->lWparam))
{
case IDC_FIRST:
...
}
comeonstuding 2003-11-04
  • 打赏
  • 举报
回复
up
qrlvls 2003-10-27
  • 打赏
  • 举报
回复
创建时可以指定控件的 ID
如果你要响应这些控件的消息可以使用消息范围的方法
例如你创建了 ID 为 2048~4095 的同类控件
则你就可以使用
ON_COMMAND_RANGE(id, idLast, memberFxn)
ON_COMMAND_EX_RANGE(id, idLast, memberFxn)
ON_NOTIFY_RANGE(wNotifyCode, id, idLast, memberFxn)
ON_NOTIFY_EX_RANGE(wNotifyCode, id, idLast, memberFxn)
ON_CONTROL_RANGE(wNotifyCode, id, idLast, memberFxn)
等函数在同一个消息响应函数中响应这些控件的消息
canoe1980 2003-10-25
  • 打赏
  • 举报
回复
那想问一下,当不知道动态创建控件数目的时候,应该怎么处理每个控件的消息响应?
flinming 2003-10-25
  • 打赏
  • 举报
回复
m_Led.Create(NULL,WS_CHILD|WS_VISIBLE,picrect[i],this,IDC_PICNUM0);
m_Led.SetLed(CLed::LED_COLOR_YELLOW,CLed::LED_ON,CLed::LED_ROUND);
m_Led.BringWindowToTop();
wuxfBrave 2003-10-25
  • 打赏
  • 举报
回复
创建控件的时候使用连续的ID
用ON_COMMAND_RANGE(IDC_MYBUTTON, IDC_MYBUTTON+100, OnButton)响应消息

void OnButton(UINT nID)
{

}
flyelf 2003-10-25
  • 打赏
  • 举报
回复
用ON_CONTROL_RANGE(BN_CLICKED, ID_BEGIN, ID_END, OnMyButtonClicked)
afxmsg void OnMyButtonClicked(UINT nID);

void CxxxDlg::OnMyButtonClicked(UINT nID)
{
switch(nID)
{
case :
break;
...
}
}
comeonstuding 2003-10-25
  • 打赏
  • 举报
回复
有没有例子
comeonstuding 2003-10-24
  • 打赏
  • 举报
回复
而且编译时会不会出错
comeonstuding 2003-10-24
  • 打赏
  • 举报
回复
或者可否动态的添加消息处理函数如
在创建时IDC _MYBUTTON 每创建一个IDC _MYBUTTON +1;
这样每个控件就可识别
在消息中添加
BEGIN_MESSAGE_MAP(CMyDlg, CDialog)
//{{AFX_MSG_MAP(CMy131314Dlg)
ON_BN_CLICKED(IDC _MYBUTTON , OnButton1)
ON_BN_CLICKED(IDC _MYBUTTON +1, OnButton2)





//}}AFX_MSG_MAP
END_MESSAGE_MAP()
afx_msg void OnButton1();
afx_msg void OnButton2();





不知这种想法可否
如可行怎样动态的在程序中添加这样的代码

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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