2015-11-27 18 views
1

我需要將圖像設置爲按鈕。主要想法是使圖像可點擊,並在點擊時發生一些事件。如何使用Win32API C++設置圖像到按鈕?

case WM_CREATE: 
     HANDLE hBmp = (HBITMAP)LoadImage(GetModuleHandle(NULL), 
             MAKEINTRESOURCE(IDB_BITMAP1), 
             IMAGE_BITMAP, 
             NULL, 
             NULL, 
             LR_DEFAULTCOLOR); 
     HWND hButton = CreateWindow(L"button", L"Label", 
      BS_BITMAP | WS_VISIBLE |WS_CHILD, 
      10, 10, 
      1366, 699, 
      hWnd, (HMENU)MAP_BUTTON1, 
      hInst, NULL); 

     SendMessage(
      (HWND)hWnd, 
      (UINT)BM_SETIMAGE, 
      (WPARAM)IMAGE_BITMAP, 
      (LPARAM)hBmp); 
     break; 

執行此之後,我有什麼樣starnge this

+0

請閱讀[我如何問一個好問題?](http://stackoverflow.com/help/how-to-ask)你需要解釋你的期望和你有什麼。 *「Something starnge」*不是有用的錯誤描述。你絕對需要檢查錯誤。上面的2個API調用可能會失敗,但是您的代碼不檢查。 – IInspectable

+0

@IInspectable看到我附上的圖片。在那裏你可以看到一個大按鈕的邊框,但是沒有圖像。我不能附上照片本身,因爲我的聲望不到10。 –

+0

請不要以使已發佈的答案無效的方式編輯問題。 – IInspectable

回答

1

我看到以下問題:

  • 你不做任何錯誤檢查。也許​​失敗。也許CreateWindow失敗。
  • 你得到的類型爲hBmp。它應該是HBITMAP
  • 當發送BM_SETIMAGE時,您傳遞按鈕的父級的句柄而不是按鈕的句柄。
+0

你能教你如何做?我在這裏是因爲我學會了,但是現在人告訴我如何解決問題,我感到非常難過。我說'''如果(CreateWindow的(L 「按鈕」,L 「標籤」, \t \t \t BS_BITMAP |!WS_VISIBLE | WS_CHILD, \t \t \t 10,10, \t \t \t 1366,699, \t \t \t的hWnd,(HMENU)MAP_BUTTON1, \t \t \t HINST,NULL)) \t \t { \t \t \t的MessageBox(HWND,L 「CreateWindow的失敗」,L 「錯誤」,MB_OKCANCEL); \t \t \t return NULL; '''和'LoadImage'功能一樣,但仍然沒有任何反應。以及如何直接發送'BM_SETIMAGE'到按鈕? –

+0

我建議你解決所有三個問題。看起來很清楚,該按鈕已創建,因此CreateWindow上的錯誤檢查建議是更一般的建議。 LoadImage是否成功?你爲什麼要將'BM_SETIMAGE'發送到錯誤的窗口?請仔細閱讀所有三點要點。 –

+0

抱歉,但我不明白。什麼是正確的窗口發送'BM_SETIMAGE'?如何檢查LoadImage是否成功? –

0

不覆蓋@David Heffernan答案,這裏是一個提示;

enter image description here

也,你不需要爲HINST按鈕,只需將其設置爲NULL;

+0

斯蒂爾不工作,我被困住了。 http://imgur.com/HjqMYNx –

+0

我解決了這個問題。我將這個代碼形式'WM_CREATE'移動到'BOOL InitInstance(HINSTANCE hInstance,int nCmdShow)' –