0
void CCreateList::paintRowList(CDialogEx* CCurent, int wBeginX, int wBeginY)
{
    CPaintDC dc(CCurent);
    CDC *cdc,cc;
    cdc=CCurent->GetDC();
    HANDLE hbitmap;
    hbitmap = LoadImage(0,L"C:\\PIC.png",IMAGE_BITMAP,100,100,0x00000010);
    cc.CreateCompatibleDC(cdc);
    cc.SelectObject(hbitmap);
    dc.BitBlt(100,100,100,100,&cc,0,0,SRCCOPY);
}

ダイアログに画像付きのタイトルを描きたいです。ピクチャー コントロールを使用しないでください。

4

2 に答える 2

5

他の画像形式をロードするために使用するコードを次に示します。GDI+ に依存しているため、使用前と使用後に初期化とシャットダウンが必要です (プログラムごとに 1 回で十分です)。

負荷ルーチン:

// BMP, GIF, JPEG, PNG, TIFF, Exif, WMF, and EMF
HBITMAP mLoadImg(WCHAR *szFilename)
{
   HBITMAP result=NULL;

   Gdiplus::Bitmap* bitmap = new Gdiplus::Bitmap(szFilename,false);
   bitmap->GetHBITMAP(NULL, &result);
   delete bitmap;
   return result;
}

初期化/シャットダウン

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
   static Gdiplus::GdiplusStartupInput gdiplusStartupInput;
   static ULONG_PTR gdiplusToken;

    // so we can load all the image formats that windows supports natively - (I'm using a transparent PNG on the main dialog)
    GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);

    // make things look pretty
    InitCommonControls();

    // run the app
    //DialogBox(hInstance, MAKEINTRESOURCE(DLG_MAIN), NULL, (DLGPROC)DialogProc);
    //
    // 
    //

    // clean-up stuff
    Gdiplus::GdiplusShutdown(gdiplusToken);

    return 0;
}

当然のことながら、これはフレーム ベースのアプリや MFC アプリではなく、ダイアログ ベースのアプリ (ダイアログは resource.rc で定義されています) 用です。ポイントは、使用する前に初期化し、後でシャットダウンするだけです。

于 2012-11-11T19:29:29.097 に答える
0

私はそれをしました:

CString strFileName;
        strFileName="C:\\PIC.bmp";
        BITMAP bmpPro;
        HBITMAP bmpHandle=(HBITMAP)LoadImage(NULL,strFileName,IMAGE_BITMAP,0,0, LR_LOADFROMFILE| LR_CREATEDIBSECTION);

        CBitmap bmpPicture;
        CDC mdcPicture;
        bmpPicture.Attach(bmpHandle);
        bmpPicture.GetBitmap(&bmpPro);
        mdcPicture.CreateCompatibleDC( &dc);
        CBitmap * bmpPrevious = 
                mdcPicture.SelectObject(&bmpPicture);
                dc.BitBlt(wCurrent, wBeginY,
        header[i].getWidthOfHeader(), wHeight,
                    &mdcPicture, 0, 0, SRCCOPY);

そして私は成功しました:Xありがとう:X

于 2012-11-11T19:10:20.490 に答える