回覆列表
  • 1 # 使用者7364316064609

    對話方塊是不會響應OnChar和OnKeyDown訊息的,會被 其它控制元件攔截

    試時發現不會進入這兩個函式,必須重定義PreTranslateMessage()虛擬函式才能正確地進入這兩個訊息函式,具體實現如下:

    BOOL CTestDlg::PreTranslateMessage(MSG* pMsg)

    {

    SendMessage(pMsg->message,pMsg->wParam,pMsg->lParam);

    return 0;

    //return CDialog::PreTranslateMessage(pMsg);

    }

    這樣,程式就能正確地呼叫onKeyDown和onChar這兩個函數了,且onKeyDown()在onCchar()之前處理的。

    這樣就能在對話方塊中響應WM_CHAR、WM_KEYDOWM訊息了,注意在傳送WM_CHAR時,實際傳送了三個訊息

    即 WM_CHAR

    WM_KEYDOWM

    WM_KEYUP

    所以,如果你有如下程式碼:

    void CMy1Dlg::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)

    {

    // TODO: Add your message handler code here and/or call default

    if(nChar=="a")

    MessageBox("a");

    CDialog::OnChar(nChar, nRepCnt, nFlags);

    }

    會彈出兩個訊息對話方塊 ,所以最好單獨在WM_KEYDOWM或WM_KEYUP處理事件。

  • 中秋節和大豐收的關聯?
  • 耐高溫膠粘劑有什麼特點?耐高溫膠粘劑可以用在哪些工業領域?