动态生成控件的消息处理

今天用MFC做了一个动太生成控件的小程序,有关生成的控件

在网上查了一些资源,在这里整理一下

首先生成控件(这里以CButtonST为例,其它类似):

//生成按钮
void CdlgDlg::OnBnClickedButton2()
...{
    // TODO: 在此添加控件通知处理程序代码
    int width,height,left,space;
    width=height=22;
    left=100;
    space=5;    
    char cNum[10];
    for(int i=1;i<10;i++)
    ...{        
        itoa(i,cNum,10);
        CButtonST* m_pBtnST=new CButtonST();
        m_pBtnST->Create(cNum, WS_VISIBLE | WS_CHILD,CRect(CPoint(left,100),CSize(width,height)),this,IDC_SELECTBUTTON);
        m_pBtnST->ShowWindow(SW_SHOW);
        this->SelectButton(*m_pBtnST);
        left+=width+space;
    }
}

方法1:

#define IDC_SELECTBUTTON                1011

//添加消息处理
afx_msg void OnBnClickedSelectButton();

BEGIN_MESSAGE_MAP(CdlgDlg, CDialog)
    ON_BN_CLICKED(IDC_SELECTBUTTON,&CdlgDlg::OnBnClickedSelectButton)
END_MESSAGE_MAP()

//添加消息处理函数
void CdlgDlg::OnBnClickedSelectButton()
...{
    MessageBox("clicked");
}

方法2(此方法更佳,可以具体得到是哪个控件触发的消息):

在.h文件添加 
private: 
virtual BOOL OnCommand(WPARAM wParam,LPARAM lParam); 

在.cpp文件添加 
BOOL CdlgDlg::OnCommand(WPARAM wParam,LPARAM lParam) 
...{ 
if(LOWORD(wParam)==IDC_SELECTBUTTON && HIWORD(wParam)==BN_CLICKED) //选择按钮 
...{ 
HWND hWnd=(HWND)lParam; //触发消息控件的句柄 
CButtonST* pST=(CButtonST*)CButtonST::FromHandle(hWnd); //获取控件指针 
if(this->IsSelected(*pST)) 
...{ 
this->CancelSelectButton(*pST); 

else 
...{ 
this->SelectButton(*pST); 


return CDialog::OnCommand(wParam,lParam); 

就这样就完成了动态添加控件的消息处理... 

方法3(网上收集,跟方法2有点相似,还没有测试过):

LRESULT   CmmsgDlg::DefWindowProc(UINT   message,   WPARAM   wParam,   LPARAM   lParam)   
  ...{   
          switch(message)   
          ...{   
                  case   WM_COMMAND:   
                  ...{   
                          DWORD   nID     =   LOWORD(wParam);//低字空件ID   
                          DWORD   nEv     =   HIWORD(wParam);//高字窗体句柄   
                          switch(nID)   
                          ...{   
                                  case   0:   
                                  ...{   
                                          switch(nEv)   
                                          ...{   
                                                  case   BN_CLICKED://BN_CLICKED   二次消息   
                                                  ...{   
                                                          AfxMessageBox("Create   Button   is   Cilcked.");   
                                                  }   
                                                  break;   
                                                  //case   BN_XXXX;   此控件的其它消息   
                                          }   
    
                                  }   
                          }   
                          //case   other:   
                  }   
                  break;   
          }   
          return   CDialog::DefWindowProc(message,   wParam,   lParam);   
  }   

哈哈...就写到这...

时间: 2024-07-29 08:34:36

动态生成控件的消息处理的相关文章

C#动态生成控件以及添加事件处理

有时候需要在程序运行到一定时候或者某个事件之后需要动态生成控件 在C#下一般方式是: private Button Db=new Button() ; Db.Name="Dy_Button" //设定名称 Db.Location=new Point(100,200);//设定位置 ....//其他属性设置 //这里添加消息处理 .. this.Controls.Add (Db);//添加到控件组中 这样就完成了动态生成但是需要给控件添加消息处理事件 那么现在就需要在生成控件添加到控件组

关于动态生成控件和动态获得控件的句柄值

动态|控件 从问题者的发的贴子:help me里面需要动态获得控件的句柄值,这些日子在vs.net里试了一下,总结出一点点经验,如下:1.动态生成控件:不管是在asp.net里还是在windows application里,每一个控件都可以作为母控件,在其中添加一些子的控件,当然添加可以是手工添加进去,而动态添加控件一般如下:(asp.net中)         dim textbox as textbox       '动态添加一个textbox控件        textbox=new te

asp.net-ASP.NET C#如何获取动态生成控件的值?

问题描述 ASP.NET C#如何获取动态生成控件的值? 假如我在后台动态生成了控件: TextBox textbox=new TextBox(); textbox.ID="textbox1"; panel.Controls.Add(textbox);//panel是一个.NET控件Panel 请问在运行程序后怎样获取这个textbox1里面填入的值? 希望大神给予解答!谢谢! 解决方案 textbox1.getText();这样就获取到了textbox1中输入的文本值了. 如果回答对

Asp.net中使用文本框的值动态生成控件的方法_实用技巧

看到一个网友,有论坛上问及,动态的生成checkbox控件,在文本框中输入一个"花"字,点一下"生成"按钮,就会在下面生成一个checkbox,它的text属性是"花".再输入一个"鸟",点一下按钮,就会生成第二个checkbox控件,text属性是"鸟"... Insus.NET的解决方法很简单,就是每次在文本框输入的值都存起来,然后把这些数据绑定至一个CheckBoxList控件上就行了. 详细,先创建

wpf-WPF 后台动态生成控件

问题描述 WPF 后台动态生成控件 我的项目中需要生成很多个button列表,所以需要后台添加,但是生成的button还有template,查了一下,目前就我所知生成的方法是: FrameworkElementFactory 和XamlReader.Load,前者看到的资料说效果很不好,后者却不知道怎么做,请教各位大神! 解决方案 http://www.cnblogs.com/KevinYang/archive/2010/09/06/1818981.html

如何将ASP.NET动态生成控件的值赋给页面静态控件

问题描述 如何将ASP.NET动态生成控件的值赋给页面静态控件最近作一个产品发布功能,但是由于产品的技术参数不统一,需要根据产品的类型动态生成控件.动态控件生成后需要多控件赋值,但是所赋的值需要给页面的静态控件,通过静态控件添加到数据库的技术参数字段下.将动态控件的赋值再给页面静态控件应该如何作呢?请教高手,望给予指点哦,急啊!这是我写的动态控件的生成代码://通过类型绑定技术参数privatevoiddatabindpramametersbyproducttype(intnid){ChinaE

.net里动态生成控件数组

动态|控件|数组 从BASIC开始接触开发的占到了绝大多数,而使用VB起家开始接触win开发也是占了绝 大多数,从vb到vb.net变化确实不小,以前用的很多的控件数组在.net里却没有了,但是费点时间就OK了,这个是我的一个程序里用到的,今天把这 个类贴上来,这个是很早以前从MSDN上看到的,根据他讲的来做的. //********************************* //动态增加,删除数组控件 //做课题设计的同学可以引用这个类 //范维肖 //****************

关于动态生成控件的问题

问题描述 privatevoidAddTextBoxs(){TableRowtr=newTableRow();TableCellTCPartNo=newTableCell();TableCellTCPartName=newTableCell();TableCellTCQuantity=newTableCell();TableCellTCOriginalSN=newTableCell();TableCellTCNewSN=newTableCell();TextBoxTBPartNo=newText

关于在tabcontrol动态生成控件 无法刷新的问题

问题描述 做课设用了一个tabcontrol控件,在tabcontrol里面连接数据库自动生成label如图背景的颜色是红色表示已入住绿色的表示空房那么问题来了,单击绿色的label进行入住操作,入住成功后tabcontrol的tabpage1不能更新,其余的tabpage234可以更新请问怎么在tabcontrol的tabpage1更新?急急急~代码如下publicpartialclassMainMenu:Form{Formloginform=null;stringname;publicMai