BOOL b = m_btbutton.LoadBitmaps(IDB_BITMAP1,IDB_BITMAP3); //載入照片m_btbutton.SizeToContent(); //使按鈕適應圖片大小 5、重載PReTranslateMessage函數,使得按鍵控制顯示照片BOOL CledDlg::PreTranslateMessage(MSG *pMsg){if (pMsg->message==WM_CHAR){ switch (pMsg->wParam) { case 'a': if (::GetKeyState('A')<0) { m_btbutton.LoadBitmaps(IDB_BITMAP3); m_btbutton.Invalidate();//重新繪制調用者本身 //AfxMessageBox(_T("ss")); } break; case 'd': if (::GetKeyState('D')<0) { m_btButton2.LoadBitmaps(IDB_BITMAP4); m_btButton2.Invalidate(); //AfxMessageBox(_T("ss")); } break; }} return CDialog::PreTranslateMessage(pMsg);}運行之后:按下‘a’和‘d’后
實現過程中解決問題:1.照片格式問題。之前png格式編譯總是不通過,選用bmp格式照片解決問題。2.MSG類typedef struct tagMSG { HWND hwnd; UINT message; WPARAM wParam; LPARAM lParam; DWord time; POINT pt;} MSG
第一個成員變量hwnd表示消息所屬的窗口。我們通常開發的程序都是窗口應用程序,一個消息一般都是與某個窗口相關聯的。例如,在某個活動窗口中按下鼠標左鍵,產生的按鍵消息就是發給該窗口的。在Windows程序中,用HWND類型的變量來標識窗口。 第二個成員變量message指定了消息的標識符。在Windows中,消息是由一個數值來表示的,不同的消息對應不同的數值。但是由于數值不便于記憶,所以Windows將消息對應的數值定義為WM_XXX宏(WM是Window Message的縮寫)的形式,XXX對應某種消息的英文拼寫的大寫形式。例如,鼠標左鍵按下消息是WM_LBUTTONDOWN,鍵盤按下消息是WM_KEYDOWN,字符消息是WM_CHAR,等等。在程序中我們通常都是以WM_XXX宏的形式來使用消息的。 提示:如果想知道WM_XXX消息對應的具體數值,可以在Visual C++開發環境中選中WM_XXX,然后單擊鼠標右鍵,在彈出菜單中選擇goto definition,即可看到該宏的具體定義。跟蹤或查看某個變量的定義,都可以使用這個方法。 第三、第四個成員變量wParam和lParam,用于指定消息的附加信息。例如,當我們收到一個字符消息的時候,message成員變量的值就是WM_CHAR,但用戶到底輸入的是什么字符,那么就由wParam和lParam來說明。wParam、lParam表示的信息隨消息的不同而不同。如果想知道這兩個成員變量具體表示的信息,可以在MSDN中關于某個具體消息的說明文檔查看到。讀者可以在VC++的開發環境中通過goto definition查看一下WPARAM和LPARAM這兩種類型的定義,可以發現這兩種類型實際上就是unsigned int和long。 最后兩個變量分別表示消息投遞到消息隊列中的時間和鼠標的當前位置。 3.GetKeyState函數GetKeyState是指定虛擬鍵的狀態的一個函數。該函數檢取指定虛擬鍵的狀態。該狀態指定此鍵是UP狀態,DOWN狀態,還是被觸發的(開關每次按下此鍵時進行切換)。例子:::GetKeyState(VK_SHIFT) > 0 沒按下::GetKeyState(VK_SHIFT) < 0被按下返回值給出了給定虛擬鍵的狀態,狀態如下:若高序位為1,則鍵處于DOWN狀態,否則為UP狀態。若低序位為1,則鍵被觸發。例如CAPS LOCK鍵,被找開時將被觸發。若低序位置為0,則鍵被關閉,且不被觸發。觸發鍵在鍵盤上的指示燈,當鍵被觸發時即亮,鍵不被觸發時即滅。備注:當給定線程從它的消息隊列中讀鍵消息時,該函數返回的鍵狀態發生改變。該狀態并不反映與硬件相關的中斷級的狀態。使用GetAsyncKeyState可獲取這一信息。4.Invalidate();//重新繪制調用者本身參考文檔:http://blog.csdn.net/akof1314/article/details/4951836/http://www.cnblogs.com/QQingmu/archive/2007/09/06/884840.htmlhttp://www.cnblogs.com/huipengkankan/archive/2011/09/21/2184479.htmlhttp://blog.sina.com.cn/s/blog_a5b3ed560101bwgm.html
新聞熱點
疑難解答