如何在对话框中找到按钮?
public:
afx_msg void OnBnClickedOk();
afx_msg void OnBnClickedCancel();
afx_msg void OnBnClickedButton1();
CButton m_Button;
BOOL DialogNew::OnInitDialog()
{
m_Button = GetDlgItem()
}
};
答案 0 :(得分:0)
如果添加像m_Button这样的成员变量或像OnBnClickedButton1这样的消息处理函数,你应该使用IDE向导来完成它,它会添加一些神奇的代码来使这些功能正常运行。
我不确定你的问题意味着什么,但关于MFC的书籍或教程将是一个良好的开端。这是两个教程:
答案 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);
}