如何在不使用向导的情况下手动为编辑控件等控件添加控件变量并使用它?

Posted

技术标签:

【中文标题】如何在不使用向导的情况下手动为编辑控件等控件添加控件变量并使用它?【英文标题】:How to manually add control variable for Controls such as Edit control and use it, without using wizard? 【发布时间】:2019-07-16 08:09:20 【问题描述】:

由于某种原因,“添加控制变量”向导在我的 Visual Studio 设置(“Microsoft Visual Studio Community 2019”,版本 16.1.16)中不起作用。

那么,如何访问代码中的控件?设置、编辑控件和访问其数据需要哪些手动代码步骤?

【问题讨论】:

这也发生在我身上。如果您创建一个新项目并通过向导添加一个变量,您将看到所需的代码。微软告诉我删除对话框并将其重新添加到项目中。但这听起来像是一场噩梦。为什么巫师不能简单地工作。呃…… 由于 Visual Studio 6 MFC 向导在每个版本中都变得越来越差。我已经抛弃了它们,一切都靠手工完成。 问题含糊不清。是要将控件变量绑定到(对话框)控件,还是要绑定反映实际控件内容的变量? @jab:那是不正确的。在 Visual Studio 6 之后,VS 2002、2003、2005 和 2008 中没有 MFC 类向导。它在 VS 2010 中重新出现,大大改进了代码同步。您不再需要尊重生成的代码 cmets,或关心您在哪里编写 您的 代码。 VS 2012 进一步改进了它,但在 VS 2015/2017 前后才开始衰减。 【参考方案1】:

以下是手动添加您自己的控件和处理程序的一些简单步骤。

MyDlg.h

public:
   CButton m_Button;                    // your control
protected:
   virtual void DoDataExchange(CDataExchange* pDX);  // declare the data exchange support
   DECLARE_MESSAGE_MAP()             // your message map
public:
   afx_msg void OnBnClickedMyButton();  // your message handler

MyDlg.cpp

// do data exchange between your variable and the control
void MyDlg::DoDataExchange(CDataExchange* pDX)

    CDialogEx::DoDataExchange(pDX);
    DDX_Control(pDX, ID_BTN, m_Button);

// map your message with handler
BEGIN_MESSAGE_MAP(MyDlg, CDialogEx)
    ON_BN_CLICKED(ID_BTN, &MyDlg::OnBnClickedMyButton)
END_MESSAGE_MAP()

BOOL MyDlg::OnInitDialog()
    /* … */
    m_Button.Create(L"Click-Me", WS_CHILD | WS_VISIBLE, RECT 0,0,100,100 , this, ID_BTN);
    m_Button.ShowWindow(true);

【讨论】:

请注意,如果在对话框资源中使用ID_BTN 定义按钮,则不需要m_Button.Create。 OTOH 如果您手动Create() 按钮,则无需进行数据交换。

以上是关于如何在不使用向导的情况下手动为编辑控件等控件添加控件变量并使用它?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不干扰本机控件的情况下向我的 HTML5 视频添加点击播放?

如何在不覆盖现有样式的情况下向 WPF 自定义控件添加触发器?

如何将自旋控件关联到 MFC 中的不同编辑框

向导控件示例

如何在不禁用整个控件的情况下禁用 TextArea 的鼠标滚轮?

如何在不绑定工具的情况下使用 Windows 工具提示控件