【问题标题】:Can I attach a CBitmapButton to a parent CWnd, instead of a parent CDialog?我可以将 CBitmapButton 附加到父 CWnd,而不是父 CDialog 吗?
【发布时间】:2012-07-23 18:15:42
【问题描述】:

我继承了一个项目(最初是为 Win95 编写的!),它有许多按钮连接到从 CWnd 派生的父窗口。按钮本身位于从 CWnd 派生的用户定义类中,因此它们不是“真正的”按钮,而是由数以百万计的代码行定义的小窗口,并且有大量的显示问题,我一直在努力解决几个星期,看不到任何解决方案。

前几天我们得出结论,CBitmapButton 看起来是个不错的选择。看起来很简单,为不同的按钮状态定义 4 个位图。我需要的只是 BN_CLICKED 来启动一个处理程序,我会是金子。

在搞砸了一段时间后,设置了一个按钮和一些位图,我能够显示 CBitmapButton;看起来不太好,但我可以解决这个问题......现在的问题是我试图设置一个消息映射来捕获 BN_CLICKED 消息,但是由于父窗口是从 CWnd 而不是 CDialog 派生的,我得到语法错误设置消息映射。多次阅读有关该主题的 MSDN,看来您只能将 CBitmapButton 连接到 CDialog 派生类。这对我来说似乎很奇怪 - 我只想要一个按钮,它应该能够将简单的“我被点击”传输给它所连接的任何父级,但显然不会发生。

那么,有没有人成功地将 CBitmapButton 附加到 CWnd 派生的父级?如果是这样,如何设置一个可以处理这些东西的消息映射?或者,由于 CBitmapButton 和 CButton 似乎需要 CDialog 作为父级,您会使用什么方法来设置一个可以与 CWnd 父级一起使用的按钮类?

【问题讨论】:

    标签: mfc cwnd cbitmap


    【解决方案1】:

    不,它并不要求您的父窗口始终是 CDiaglot,您甚至可以从 CWnd 继承并在其中创建一个 CButton/CBitmapButton。

    您可以在您的CWnd 派生类中覆盖OnCommand 消息并点击按钮单击事件。

    【讨论】:

    • 发现我试图将按钮附加到的父窗口(最终源自 CWnd)表现不佳,并且正在拦截用于按钮的消息。我为按钮提供了一个允许传递消息的父窗口(也是一个 CWnd 衍生物,但没有消息垃圾),并且按钮按预期执行。我确实按照建议覆盖了 OnCommand。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-13
    • 2011-09-06
    • 1970-01-01
    • 1970-01-01
    • 2014-10-27
    相关资源
    最近更新 更多