0

我正在尝试在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()方法是通过某种方式调用的。我什至在我的方法的入口处放置了一个调试输出——它实际上没有被调用。然后,如果我将焦点切换到其他控件,我的按钮将用图像重绘。

请不要建议我使用其他方式在按钮上绘制图像。我需要得到关于所提问题的答案。

谢谢!

4

0 回答 0