2014-01-23 43 views
0

我最近購買了一臺高分辨率屏幕的筆記本電腦,並且一直在調整我的一個程序以利用更高的分辨率。在我的一個Win32對話框中,我顯示一個位圖圖片。通常我通過資源編輯器將其分配給圖片控件,而不必處理它。現在我需要根據屏幕分辨率顯示兩個圖像中的一個。我知道如何加載位圖並獲取它的句柄,但是如何在對話框啓動過程中將它分配給圖片控件,以便內置的對話框例程能夠顯示它?我想我應該在對話框中放置一個靜態圖片控件,但是我無法找到一個在運行時將圖片分配給該圖片控件的win32示例。似乎它應該很簡單,但我似乎無法找到合適的Windows功能。我沒有使用MFC。在運行期間將圖像加載到對話框圖片控件中

--Terry

+1

如果你能證明你目前的代碼,然後它會更容易建議變化。 – Ram

回答

2

下面是一個示例。基本上,你需要發送STM_SETIMAGE消息到圖片控件,以及你想要顯示的圖片的句柄。

#define WIN32_LEAN_AND_MEAN 

#include <windows.h> 
#include "resource.h" 

HINSTANCE hInst; 

BOOL CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) 
{ 
    static HBITMAP bmp1, bmp2; 
    static bool isImg1 = true; 

    switch(uMsg) 
    { 
     case WM_INITDIALOG: 
      bmp1 = (HBITMAP)SendDlgItemMessage(hwndDlg, IDC_STATIC1, STM_GETIMAGE, IMAGE_BITMAP, 0); 
      bmp2 = (HBITMAP)LoadImage(NULL, "bitmap2.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); 
      return TRUE; 

     case WM_DESTROY: 
      DeleteObject(bmp1); 
      DeleteObject(bmp2); 
      return true; 

     case WM_CLOSE: 
      EndDialog(hwndDlg, 0); 
      return TRUE; 

     case WM_COMMAND: 
      switch(LOWORD(wParam)) 
      { 
       case IDC_BTN_QUIT: 
        EndDialog(hwndDlg, 0); 
        return TRUE; 

       case IDC_BTN_TEST: 
        if (isImg1) 
         SendDlgItemMessage(hwndDlg, IDC_STATIC1, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)bmp2); 
        else 
         SendDlgItemMessage(hwndDlg, IDC_STATIC1, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)bmp1); 
        isImg1 = !isImg1; 
        return TRUE; 
      } 
    } 
    return FALSE; 
} 


int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) 
{ 
    hInst = hInstance; 

    // The user interface is a modal dialog box 
    return DialogBox(hInstance, MAKEINTRESOURCE(DLG_MAIN), NULL, (DLGPROC)DialogProc); 
} 
0
  1. 從資源加載
  2. 位圖將消息發送到圖像控制

case IDC_BUTTON_RELOAD: 
     hbitmap = (HBITMAP)LoadBitmap(GetModuleHandle(NULL),MAKEINTRESOURCE(IDB_BITMAP_FULL)); 
     hbitmap2 = (HBITMAP)LoadBitmap(GetModuleHandle(NULL),MAKEINTRESOURCE(IDB_BITMAP_EMPTY)); 
     /*hdc = GetDC(hDlg); 
     image_dc = CreateCompatibleDC(hdc); 
     old_hbitmap = (HBITMAP)SelectObject(image_dc,hbitmap); 
     BitBlt(hdc,1,0,530,450,image_dc,0,0,SRCCOPY);*/ 
     SendMessage(GetDlgItem(hDlg,IDC_STATIC_PICTURE2), STM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)hbitmap); 
     SendMessage(GetDlgItem(hDlg,IDC_STATIC_PICTURE), STM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)hbitmap2); 
     return TRUE; 
case IDC_BUTTON_EXIT: 
     MessageBox(hDlg,_T("Thank you"),_T("Close"),MB_ICONINFORMATION|MB_OK); 
     DeleteObject(hbitmap); 
     DeleteObject(hbitmap2); 
     DestroyWindow(hDlg); 
     return TRUE;