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

I have added an OnPaint() function to my dialog class but its not getting called after dlg.DoModal()

任何人都可以帮助我了解如何为从 CDialog.

派生的对话框 class 覆盖 OnPaint()

代码如下:

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

我正在覆盖 OnInitDialog() 并且正在调用它。 但是在覆盖 OnPaint() 时它没有被调用。

谁能帮我解决一下?

首先,在堆上创建对话框的实例有什么意义?你可以简单地做:

ColorImageDlg dlg;
dlg.DoModal(); 

您需要像这样修改消息映射:

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

使用 VS Class 向导 来避免类似的问题。

如果您不能使用Class向导,那么还有另一种方法。这是有关它的资源:

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

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

但基本上,一旦您定义了 对话资源 并将其 附加 新的 class,确保 Class 查看 选项卡是 selected:

接下来,确保您的对话框 class 在 class 视图中 selected:

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

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

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

希望这对您有所帮助。