我已经在我的对话框类中添加了一个OnPaint()函数,但是在dlg.DoModal()之后没有调用它

时间:2016-06-09 09:33:05

标签: visual-c++ visual-studio-2008 mfc modal-dialog onpaint

任何人都可以帮助我了解如何覆盖从OnPaint()派生的对话框类的CDialog

以下是代码:

ColorImageDlg *pDlg = NULL;
pDlg = new ColorImageDlg;
pDlg->DoModal();
delete pDlg;

我覆盖OnInitDialog()并且它被调用了。 但是,当覆盖OnPaint()时,它不会被调用。

任何人都可以帮我修理一下吗?

2 个答案:

答案 0 :(得分:2)

首先,在堆上创建对话框实例的重点是什么?你可以这样做:

ColorImageDlg dlg;
dlg.DoModal(); 

您需要像这样修改您的消息地图:

BEGIN_MESSAGE_MAP(ColorImageDlg, CDialog)
    ON_WM_PAINT()
END_MESSAGE_MAP()

使用 VS类向导以避免此类问题。

答案 1 :(得分:2)

如果你不能使用 ClassWizard ,那么还有另外一种方法。这是一个关于它的资源:

VS2015 版本)https://msdn.microsoft.com/en-us/library/dey7ke4c.aspx

VS2008 版本)https://msdn.microsoft.com/en-us/library/dey7ke4c(v=vs.90).aspx

但基本上,一旦您将对话框资源附加定义为新类,请确保类视图标签已选中:

Class View

接下来,确保在班级视图中选择对话框类

Class

然后,点击属性面板的消息图标:

Messages

向下滚动消息列表并找到WM_PAINT。然后单击下拉箭头并选择要添加的选项:

WM_PAINT

如您所见,它已插入所有需要的代码:

New Code

希望这有帮助。