如何在vc ++的“对话框”中找到按钮

时间:2014-07-16 15:29:45

标签: mfc

如何在对话框中找到按钮?

public:
    afx_msg void OnBnClickedOk();   
    afx_msg void OnBnClickedCancel();   
    afx_msg void OnBnClickedButton1();
    CButton m_Button;    
    BOOL DialogNew::OnInitDialog()
    {
        m_Button = GetDlgItem()    
    }
};

3 个答案:

答案 0 :(得分:0)

如果添加像m_Button这样的成员变量或像OnBnClickedButton1这样的消息处理函数,你应该使用IDE向导来完成它,它会添加一些神奇的代码来使这些功能正常运行。

我不确定你的问题意味着什么,但关于MFC的书籍或教程将是一个良好的开端。这是两个教程:

http://www.functionx.com/visualc/

http://www.tenouk.com/cplusplusnmfc.html

答案 1 :(得分:0)

在您的情况下,成员变量允许您命名控件对象的实例,以便稍后可以调用其成员方法。您不需要成员变量来使用控件。但是,它们确实使事情变得更容易。我会在使用GetDlgItem()时提醒您,因为它返回一个指向控件的临时指针,并且在您下次使用它时可能无效。如果您想使用成员变量(并且您应该尽可能使用),请遵循 ScottMcP-MVP 给出的建议。

答案 2 :(得分:0)

根据我的经验,大多数时候您不需要会员功能来与对话框中的按钮进行交互。大多数情况下,您可以在派生类消息映射中使用ON_BN_CLICKED消息处理程序。如果您确实要创建成员变量,请在DoDataExchange()中初始化它。 Visual Studio向导将帮助您实现这一目标。下面是一个对话框的示例伪代码,其中包含一个消息映射,其中包含用于单击IDC_BUTTON1的处理程序,并为其初始化变量。如果查看定义了DDX_Control的头文件,您将看到其他漂亮的DDX_函数,如DDX_Text,DDX_Check和DDX_Radio。

class CMyDialog : public CDialog
{
public:
 /// blah, blah, blah....
   DECLARE_MESSAGE_MAP()
   void OnClickThatButton();

   void DoDataExchange(CDataExchange* pDX); // initialize controls in dialogs in DoDataExchange()
protected:
   CButton m_Button;
};

BEGIN_MESSAGE_MAP(CMyDialog, CDialog)
   ON_BN_CLICKED(IDC_BUTTON1, OnClickThatButton)
END_MESSAGE_MAP()

void CMyDialog::OnClickThatButton()
{
   AfxMessageBox(_T("put your functionality here.");
}

void CMyDialog::DoDataExchange(CDataExchange* pDX)
{
   CDialog::DoDataExchange(pDX);
   DDX_Control(pDX, IDC_BUTTON1, m_Button);
}