动态生成控件的消息处理

来源:互联网 发布:java编译命令是什么 编辑:程序博客网 时间:2024/05/17 04:35

 动态生成控件的消息处理
www.diybl.com 时间:2008-04-26 作者:佚名 编辑:本站 点击: 159 [评论]
今天用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))

Id(''_351_387_Closed_Text'').style.display=''inline'';" align="top" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" />...{
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   二次消息  
               &nbs

  ...{  
                                                          AfxMessageBox("Create   Button   is   Cilcked.");  
                                                  }  
                                                  break;  
                                                  //case   BN_XXXX;   此控件的其它消息  
                                          }  
   
                                  }  
                          }  
                          //case   other:  
                  }  
                  break;  
          }  
          return   CDialog::DefWindowProc(message,   wParam,   lParam);  
  }  
 
哈哈...就写到这...


文章出处:DIY部落(http://www.diybl.com/course/3_program/c++/cppjs/2008426/111625_3.html)

 

原创粉丝点击