2012-11-11 42 views
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); 
} 

我想在對話框中使用圖像繪製標題。請不要使用Picture Control請幫助我。我無法使用「LoadImage」加載圖片並在對話框中繪製它

+2

好的,加載圖像並顯示它是2個獨立和不同的操作。你遇到哪個問題? (它看起來像是加載。)你有沒有嘗試與.BMP圖像相同?您需要使用GDI +加載PNG ... – enhzflep

回答

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

+0

不客氣。認爲這是問題。不要使用MFC,所以起初並不確定LoadImage函數只是WinUser.h中的函數。查看例程加載的答案,以加載png,wmf,t​​if等。 – enhzflep

5

下面是我使用的加載其他的圖像格式的代碼。它依賴於GDI +,所以你需要初始化&關機,它被使用之前和之後(每個程序一次就夠了)

加載程序:

// 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; 
} 

當然,這是一個基於對話框的應用程序(對話框在resource.rc中定義) - 而不是基於框架的或MFC。關鍵是,你只需要在使用它之前進行初始化,然後關閉。

+0

謝謝...更多問題...我可以在對話框中添加對話框嗎?你可以幫我嗎 ??? –

+0

在對話框中添加對話框?呃沒有。那沒有意義。就像你不能將按鈕添加到按鈕一樣。你想達到什麼目的?有一個更好/正確的方法來實現它。 – enhzflep

相關問題