BOOL b = m_btbutton.LoadBitmaps(IDB_BITMAP1,IDB_BITMAP3); //載入照片m_btbutton.SizeToContent(); //使按鈕適應(yīng)圖片大小 5、重載PReTranslateMessage函數(shù),使得按鍵控制顯示照片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();//重新繪制調(diào)用者本身 //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);}運(yùn)行之后:按下‘a(chǎn)’和‘d’后
實(shí)現(xiàn)過程中解決問題:1.照片格式問題。之前png格式編譯總是不通過,選用bmp格式照片解決問題。2.MSG類typedef struct tagMSG { HWND hwnd; UINT message; WPARAM wParam; LPARAM lParam; DWord time; POINT pt;} MSG
第一個成員變量hwnd表示消息所屬的窗口。我們通常開發(fā)的程序都是窗口應(yīng)用程序,一個消息一般都是與某個窗口相關(guān)聯(lián)的。例如,在某個活動窗口中按下鼠標(biāo)左鍵,產(chǎn)生的按鍵消息就是發(fā)給該窗口的。在Windows程序中,用HWND類型的變量來標(biāo)識窗口。 第二個成員變量message指定了消息的標(biāo)識符。在Windows中,消息是由一個數(shù)值來表示的,不同的消息對應(yīng)不同的數(shù)值。但是由于數(shù)值不便于記憶,所以Windows將消息對應(yīng)的數(shù)值定義為WM_XXX宏(WM是Window Message的縮寫)的形式,XXX對應(yīng)某種消息的英文拼寫的大寫形式。例如,鼠標(biāo)左鍵按下消息是WM_LBUTTONDOWN,鍵盤按下消息是WM_KEYDOWN,字符消息是WM_CHAR,等等。在程序中我們通常都是以WM_XXX宏的形式來使用消息的?! √崾荆喝绻胫繵M_XXX消息對應(yīng)的具體數(shù)值,可以在Visual C++開發(fā)環(huán)境中選中WM_XXX,然后單擊鼠標(biāo)右鍵,在彈出菜單中選擇goto definition,即可看到該宏的具體定義。跟蹤或查看某個變量的定義,都可以使用這個方法。 第三、第四個成員變量wParam和lParam,用于指定消息的附加信息。例如,當(dāng)我們收到一個字符消息的時候,message成員變量的值就是WM_CHAR,但用戶到底輸入的是什么字符,那么就由wParam和lParam來說明。wParam、lParam表示的信息隨消息的不同而不同。如果想知道這兩個成員變量具體表示的信息,可以在MSDN中關(guān)于某個具體消息的說明文檔查看到。讀者可以在VC++的開發(fā)環(huán)境中通過goto definition查看一下WPARAM和LPARAM這兩種類型的定義,可以發(fā)現(xiàn)這兩種類型實(shí)際上就是unsigned int和long。 最后兩個變量分別表示消息投遞到消息隊列中的時間和鼠標(biāo)的當(dāng)前位置。 3.GetKeyState函數(shù)GetKeyState是指定虛擬鍵的狀態(tài)的一個函數(shù)。該函數(shù)檢取指定虛擬鍵的狀態(tài)。該狀態(tài)指定此鍵是UP狀態(tài),DOWN狀態(tài),還是被觸發(fā)的(開關(guān)每次按下此鍵時進(jìn)行切換)。例子:::GetKeyState(VK_SHIFT) > 0 沒按下::GetKeyState(VK_SHIFT) < 0被按下返回值給出了給定虛擬鍵的狀態(tài),狀態(tài)如下:若高序位為1,則鍵處于DOWN狀態(tài),否則為UP狀態(tài)。若低序位為1,則鍵被觸發(fā)。例如CAPS LOCK鍵,被找開時將被觸發(fā)。若低序位置為0,則鍵被關(guān)閉,且不被觸發(fā)。觸發(fā)鍵在鍵盤上的指示燈,當(dāng)鍵被觸發(fā)時即亮,鍵不被觸發(fā)時即滅。備注:當(dāng)給定線程從它的消息隊列中讀鍵消息時,該函數(shù)返回的鍵狀態(tài)發(fā)生改變。該狀態(tài)并不反映與硬件相關(guān)的中斷級的狀態(tài)。使用GetAsyncKeyState可獲取這一信息。4.Invalidate();//重新繪制調(diào)用者本身參考文檔: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
新聞熱點(diǎn)
疑難解答