如何在MFC对话框上绘制/创建GDI +

xan*_*ngr 2 c++ mfc gdi+

我有一个基于Dialog的MFC应用程序.我使用从资源创建了一个GDI +对象.

MyDlg.cpp:

BOOL CSetupDlg::OnInitDialog()
{
    Gdiplus::GdiplusStartupInput gdiplusStartupInput;
    Gdiplus::GdiplusStartup(&m_gdiplusToken, &gdiplusStartupInput, NULL);
        ...
}
Run Code Online (Sandbox Code Playgroud)

void MyFunction():

CGdiPlusBitmapResource* pBitmap = new CGdiPlusBitmapResource;
if (pBitmap->Load(ID_SPL_LG))
{
    CPaintDC dc(this);
    Gdiplus::Graphics graphics(dc);
    graphics.DrawImage(*pBitmap, 0, 0);
    //It is loaded . I checked with messagebox and its in here.
}
Invalidate(); //Not sure if necessary.
Run Code Online (Sandbox Code Playgroud)

现在,Form/Dialog什么都没显示.没有图像插入或附加.

现在,我尝试了一些事情来将这个图像添加到对话框中,但我无法做到.

我尝试的是GDIObject.Create(),CStatic.Create()PictureControl.Create()

我想要做的就是将此图像插入对话框.

任何想法或显示路径表示赞赏.

Mar*_*som 5

您需要覆盖在对话框OnPaint中响应WM_PAINT消息的方法.通常你不需要这样做,因为对话框不需要绘制任何东西,它只是让它包含的控件自己绘制.

将显示的代码移动到OnPaint处理程序中.

难道不是从自己的处理程序调用默认的OnPaint.

难道Invalidate从OnPaint处理中,否则你会得到一个无限循环.

  • @xangr,您可能需要在其他地方放置一个"Invalidate"来触发OnPaint. (2认同)