正在搞一个基于对话框的东西,设计了很多个按钮控件,想在不同的按键按下时在编辑框中输入不同的内容,但是不想用多个函数实现。想只用一个实现,不知道是不是可以,我的想法是按键发送的消息来区分(每个按键的ID是不同)是哪个按键按下的,然后进行相应的操作,但是查了好多函数好像没有。敬请高手支招。

解决方案 »

  1.   

    这是类似于SDK编写Windows程序的情况,自己实现WndProc()。但是在MFC中已经映射好了,不太好做
      

  2.   

    对于按钮控件来说,被单击的时候会父窗体发送BN_CLICKED消息,存在这五类按钮会向父窗体发送BN_CLICKED,下按按钮,单选按钮,复选按钮,三态复选按钮,自我绘制按钮。如果只是凭按钮ID来区分控件,可以这么做:
    case WM_COMMAND:
    wmId    = LOWORD(wParam);
    wmEvent = HIWORD(wParam);
    if(wmId==IBC_NAME)
    {
    if(wmEvent==BN_CLICKED)
    {
    //添加内容到编辑框
    }
    }
      

  3.   

    使用ON_NOTIFY_RANGE( wNotifyCode, id, idLast, memberFxn )
      

  4.   

    你可以给每个控件都定义一个属于自己的消息
    然后在PreTranslateMessage中截获消息,再对每个控件做相应的处理!
      

  5.   

    还是手把手教你吧:
    1.在对话框头文件中加入如下消息声明:
    afx_msg void OnSerialBtn(UINT btnid);
    2.在消息映射中加入如下代码:
    BEGIN_MESSAGE_MAP(CAverageDlg, CDialog)

    ON_COMMAND_RANGE(IDC_BUTTON2,IDC_BUTTON4,&CAverageDlg::OnSerialBtn)
    //其中IDC_BUTTON2和IDC_BUTTON4之间按钮的ID值必须连续.
    //}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    3.定义如下消息体:
    void CAverageDlg::OnSerialBtn(UINT btnid)
    {
    if(btnid==IDC_BUTTON3)
    {
            MessageBox(L"你按下了BUTTON3");
    }
            if(btnid==IDC_BUTTON4)
            {
            MessageBox(L"你按下了BUTTON4");
            }

    }
    参数btnid用于区分哪个按钮按下了。
      

  6.   

    太复杂,也得不到好的效果,VC其实很简单,有很多好的办法,被我们不少"高手"神化了一个极简单的办法:
    1 如果按扭已有消息函数,将这些消息函数删除
    2 双击其中一个按扭,添加上消息函数,函数名随便定义,如Button1
    3 双击其它按扭,在弹出的请输入消息函数名的对话框中将函数名改为先前定义的函数Button1
    4 修改Button函数,使其用各按扭的ID区分按扭和执行相应动作
    void CCtmpDlg::OnButton1() 
    {
    CString str;
    switch(GetFocus()->GetDlgCtrlID())
    {
    case IDC_BUTTON1:
    str="1";
    break;
    case IDC_BUTTON2:
    str="2";
    break;
    case IDC_BUTTON3:
    str="3";
    break;
    }
    SetDlgItemText(IDC_STATIC1,str);

    }
      

  7.   

    顶楼上,看完后我的第一反应也是GetDlgCtrlID()。