vc入門寶典(十) (轉)

amyz發表於2007-11-16
vc入門寶典(十) (轉)[@more@]

訊息

/develop/author/netauthor/he_zhidan/">何志丹

PreTranslateMessage顧名思義,就是在訊息被翻譯之前,做的一些事.我們可以遮蔽一個鍵或一個命令.
下面是一些常用訊息的相關資訊.這些資訊放pMsg中.
WM_KEYDOWN
nVirtKey = (int) wParam;  鍵值,和ascll碼有許多相同的地方 */
lKeyData = lParam;  有關 */ 
WM_CHAR
chCharCode = (TCHAR) wParam; 
lKeyData = lParam; 
WM_COMMAND
wNotifyCode = HI(wParam);
wID = LOWORD(wParam); 
hwndCtl = (HWND) lParam; 
WM_LBUTTONDOWN
fwKeys = wParam;  //
xP= LOWORD(lParam);  //  滑鼠橫座標
yPos = HIWORD(lParam);  //  滑鼠縱座標
 fwKeys
MK_CONTROL MK_LBUTTON MK_MBUTTON MK_RBUTTON  MK_SHIFT
WM_MOUSEMOVE
fwKeys = wParam; 
xPos = LOWORD(lParam); 
yPos = HIWORD(lParam); 
 
下面這個例子演示了,PreTranslateMessage的常用用法.
BOOL CPreTranslateDlg::PreTranslateMessage(MSG* pMsg)
{
 if(WM_KEYDOWN == pMsg->message )
 if(0x30 == (int) pMsg->wParam)
 {
 return true;  /*禁止在編輯框中輸入0(ascll 0x30)*/
 } 

 if(WM_CHAR == pMsg->message )
 if('A' == (TCHAR) pMsg->wParam)
 {
 return true;  /*禁止在編輯框中輸入'A'*/
 }
 
 if(WM_MOUSEMOVE == pMsg->message) 
 if(MK_CONTROL & pMsg->wParam)  /*當ctrl被按下滑鼠移動時,顯示相關資訊*/
 {
 int xPos = LOWORD(pMsg->lParam); 
 int yPos = HIWORD(pMsg->lParam);
 CString str ;
 str.Format("滑鼠的座標%d %d",xPos,yPos);
 AfxMessageBox(str);
 }

 if(WM_COMMAND == pMsg->message)
 if(ID_1 == LOWORD(pMsg->wParam))//禁止選單項ID_1,注意按鈕傳送的是BN_CLICKED
 {
 return true;
 }
 return CDialog::PreTranslateMessage(pMsg);
}


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-982729/,如需轉載,請註明出處,否則將追究法律責任。

相關文章