2012-10-12 35 views
1

我開發了一個C++ Api項目。如何在C++ win32 API中設置對話框中的圖像?

我會用dialogboxparam創建對話框...

我做了創建和設置文本框,標籤和按鈕... 其做工精細...

現在我想補充在對話框的頂部圖像...

我沒有使用此代碼在WM_INITDIALOG:

HBITMAP hImage= (HBITMAP)LoadImage(NULL,L"C:\\WINDOWS\\system32\\BMA-Images\\login-header",IMAGE_BITMAP,LR_DEFAULTSIZE ,LR_DEFAULTSIZE ,LR_LOADFROMFILE|LR_CREATEDIBSECTION); 
      SendMessage(_hwnd,STM_SETIMAGE,IMAGE_BITMAP,(LPARAM)hImage); 

但它沒有工作... 誰能幫助提前解決這個... 感謝 鮮于

+1

有沒有擴展你的形象。它真的叫做「登錄標題」 – enhzflep

+1

'_hwnd'確實指向哪個窗口/控件? – alk

+0

當前dialogbox處理alk ... –

回答

3

最簡單的方法是重寫該窗口的WM_PAINT而在這一點上畫的位圖(在調用BeginPaint和EndPaint之間)調用

這裏有一個基於MFC例如:

http://www.programmersheaven.com/mb/mfc_coding/113034/113034/how-do-i-set-a-background-picture-in-a-dialog-box-/

+0

感謝您的回覆Goz,但我沒有使用開始油漆和結束油漆...沒有WM_PAINT,是其他任何方式來實現呢? –

+0

@Sonu:你沒​​有使用BeginPaint/EndPaint是什麼意思?據我所知,沒有其他辦法可以做到這一點......但我可能是錯的。 – Goz

+0

-1 ve,我不同意重寫WM_PAINT。 –

3

當處理WM_INITDIALOG消息使用HWND hImageCtl = GetDlgItem(_hwnd, <image-control-resource-id>)獲取圖像控件的句柄(假設_hwnd是對話框本身的句柄)。

然後用hImageCtl發送STM_SETIMAGE消息到。

+2

這也假定你已經在對話框中放置了一個圖像控件。重要的是要注意這一點,因爲這個問題沒有提及任何相關的圖像控制。 –

+0

Oook ... *抓頭* @MarkRansom – alk

2

這工作好幾年了,自從Windows 98,我:

//globals 
HBRUSH hbr; 
PAINTSTRUCT wcd; 

LRESULT CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, 
    LPARAM lParam) 
{ 

    switch(msg) { 

    case WM_PAINT: 
     if (GetUpdateRect(hWnd,r,0)) { 
      BeginPaint(hWnd,&wcd); 
      if (wParam == NULL) FillRect(wcd.hdc,&wcd.rcPaint,hbr); 
      EndPaint(hWnd,&wcd);   
     } 
     break; 

     case WM_COMMAND: 
///your code 
    } 
} 



int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int Show) 
{ 
    ghInstance = hInstance; 
    //Prepare brush for background 
    hbr=CreatePatternBrush(LoadBitmap(hInstance,MAKEINTRESOURCE(IDB_BGROUND))); 
///your code 
    DialogBox(hInstance,"MAIN", NULL,(DLGPROC)MainWndProc); 
///your code 
    return(FALSE); 
} 

IDB_BGROUND - ID圖像資源,在鏈接的

相關問題