我正在尝试在MFC 类OnPaint()
的子类中实现该方法。CButton
class CImageButton : public CButton
public:
using CButton::CButton;
protected:
afx_msg void OnPaint();
DECLARE_MESSAGE_MAP()
};
BEGIN_MESSAGE_MAP(CImageButton, CButton)
ON_WM_PAINT()
END_MESSAGE_MAP()
void CImageButton::OnPaint()
{ /* Draws an image; Doesn't call the CButton::OnPaint(). */ }
然后,我有一个对话框。在资源编辑器中,我将按钮放在了它的表单上。在对话框声明中,我写了
CImageButton m_btn;
和
DDX_Control(pdc, IDC_BUTTON, m_btn);
在DoDataExchange()
. 所以,我想,我所做的一切都是为了让我的绘画程序正常工作。但我得到了奇怪的事情:当我的对话框打开时,图像被绘制好了(没有按钮的边框,正如我在我的方法中实现的那样)。但是,如果我试图点击它,图像会消失,按钮的边框也会被绘制,并且我在 VS 资源编辑器中指定的文本也会被绘制。即,看起来超类的OnPaint()
方法是通过某种方式调用的。我什至在我的方法的入口处放置了一个调试输出——它实际上没有被调用。然后,如果我将焦点切换到其他控件,我的按钮将用图像重绘。
请不要建议我使用其他方式在按钮上绘制图像。我需要得到关于所提问题的答案。
谢谢!