向MFC Button发出附加功能

时间:2014-11-08 23:03:30

标签: c++ visual-studio visual-c++ mfc

我刚刚开始使用MFC来制作Windows应用程序,并且希望有人可以通过我正在尝试编写的按钮帮助我在某些代码上滚动。

我正在尝试做的是构建一个具有按钮的应用程序,按下该按钮时,将打开一个模式对话框,其中包含与我的问题无关的某些功能。我无法入门,因为当按下按钮时我似乎无法捕捉并将代码附加到该事件。

该事件已添加到我的消息地图中:

ON_BN_CLICKED(1, OnBnClicked)

这是OnBnClicked:

void CMainFrame::OnBnClicked()
{
  CPaintDC dc(this);
  dc.TextOutW(0, 100, _T("SUp dawg"));
  MessageBox(_T("Hey Dawg"));
}

继承人创建按钮:

BOOL bCreated = myButton.Create(_T("Hey Dawg"), WS_CHILD | WS_VISIBLE, 
                                 CRect(40, 40, 190, 90), this, 1);

我似乎无法弄清楚为什么当我点击它时它不会做任何事情。我很感激所有这方面的帮助,在网上没有特别好的记录:

1 个答案:

答案 0 :(得分:0)

警告:我不打算直接回答你的问题,只是因为如果你没有看到(相当多)你所做的更多事情,例如你把创建按钮的代码放在哪里,那几乎是无法回答的。即使我/如果我确实直接回答了这个问题,我怀疑结果会特别有用。因此,我将描述我将如何处理相同的基本情况。

我要提出的基本观点可以追溯到单一责任原则。窗口通常应该由类表示,该类应该只有一个责任。如果该窗口充当控件容器,那么该类的唯一责任应该充当控件容器。

大多数情况下,包含按钮的类/窗口不应该执行除按钮(或其他控件)之外的任何操作。换句话说,按钮大多属于对话框和工具栏之类的东西。如果您需要一个托管按钮的显示器,您通常希望该视图是CFormView。在这种情况下,表单是从对话框模板构建的。您可以使用对话框编辑器在该对话框模板上放置一个按钮,就像使用任何其他对话框一样。您可以像对待任何对话框中的任何按钮一样附加功能(按住Shift键单击或右键单击并选择“添加事件处理程序...”)。

是的,可以用其他方式做事 - Visual Studio和MFC都没有尝试做太多限制你可以做的事情。这并不意味着你应该忽略基本设计 - 单一责任原则仍然适用,而且它仍然很重要。您可以在设计代码时强制执行它 - 其中一个含义是您不只是在代码中的随机位置创建按钮。