2014-11-08 77 views
0

我刚开始使用MFC制作Windows应用程序,并希望有人能够帮助我使用我正在尝试编写的按钮在某些代码上滚动。将附加功能添加到MFC按钮

我想要做的是构建一个应用程序,它具有一个按钮,当按下按钮时,将打开一个与我的问题无关的功能的模式对话框。我在开始时遇到了问题,因为按下按钮时我无法捕捉到代码并将代码附加到该事件。

事件添加到我的消息映射:

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); 

我不能似乎数字当我点击它时,为什么它不会做任何事情。我非常感谢所有帮助,它在网上没有特别的记录:

+0

'BN_CLICKED'通知被发送到按钮的直接父窗口,即作为第四个参数传递给'Create'的窗口。 CMainFrame是按钮的父项吗?顺便说一句,使用MFC开始Windows编程并不会成功。您需要对Windows API有深入的了解,才能有机会了解MFC。从[使用C++学习编程Windows]开始(http://msdn.microsoft.com/zh-cn/library/windows/desktop/ff381399.aspx)。 – IInspectable 2014-11-08 23:30:12

+0

显示更多的代码。你在哪个函数中创建按钮? – 2014-11-11 12:57:31

+0

你有没有读过TN020? https://msdn.microsoft.com/en-us/library/t2zechd4.aspx - 我怀疑你的按钮的数字标识符(1)超出了有效范围!尽管它在8开始控制,我建议你尝试> = 1024。 – sergiol 2016-10-01 01:05:51

回答

0

警告:我不会直接回答你的问题,只是因为它几乎无法回答而没有看到(相当多)已经完成了,比如你放置创建按钮的代码的位置。即使/如果我直接回答了问题,我怀疑结果会特别有用。因此,我将描述我如何处理相同的基本情况。

我想说的基本点可以追溯到单一责任原则。一个窗口通常应该由一个班级来代表,而这个班级应该有一个单一的责任。如果该窗口充当控制容器,那么该类别的责任应该充当控制容器。

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

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