在MFC 使用GDI+ 调用一张PNG 图片使之成为 背景图片

2025-02-23 01:25:35
推荐回答(2个)
回答1:

  1. 在工程stdafx.h中添加如下代码,关联GDI+:

    #include "GdiPlus.h"
    using namespace Gdiplus;
    #pragma comment(lib,"gdiplus.lib")

  2. 在程序初始化部分,对话框工程是在test.cpp中加入下面代码,装载GDI+:

    BOOL CtestApp::InitInstance()  //在这个函数中加入

    {     。。。。

    AfxEnableControlContainer();

    //装载GDI+

    GdiplusStartupInput m_gdiplusStartupInput;
    ULONG_PTR m_pGdiToken;

        GdiplusStartup(&m_pGdiToken,&m_gdiplusStartupInput,NULL);

        。。。。。

       //卸载GDI+

      GdiplusShutdown(m_pGdiToken);

      return FALSE;   //这一句是自动生成的代码

      }

3.在OnPaint()函数的else中添加如下代码:

     else

    {

      CDC *pDC;

      pDC =GetDC();

     CRect  rect;

     GetClientRect(&rect);   //获取客户区大小
     Graphics graphics( pDC->m_hDC);
     Image image(_T("res\\bkg.png"), FALSE);
     graphics.DrawImage(&image, 0, 0, rect.right, rect.bottom);  //绘制背景

    CDialogEx::OnPaint();

    }

回答2:

随窗体自动缩放

函数原型:
int WINAPI icePub_dispImgBySizeForm(HWND hWnd,char *strImgFilename,int x,int y)
输入:hWnd 窗体或控件句柄
strImgFilename 待显示的图片文件名
x x坐标
y y坐标
输出:

typedef int (WINAPI ICEPUB_DISPIMGBYSIZEFORM)(HWND hWnd,char *strImgFilename,int x,int y);
ICEPUB_DISPIMGBYSIZEFORM *icePub_dispImgBySizeForm = 0;
HINSTANCE hDLLDrv = LoadLibrary("icePubDll.dll");
if(hDLLDrv)
{
icePub_dispImgBySizeForm = (ICEPUB_DISPIMGBYSIZEFORM *)GetProcAddress(hDLLDrv, "icePub_dispImgBySizeForm");
}

if(icePub_dispImgBySizeForm != NULL)
icePub_dispImgBySizeForm(m_hWnd,"b.png",0,10);
if(hDLLDrv)
FreeLibrary(hDLLDrv);