注意: BN_DOUBLECLICKED 訊息處理常式不叫用在 MFC 對話方塊

重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。

247323
本文已封存。本文係以「現狀」提供且不會再更新。
徵狀
當您新增一個對話方塊或視窗上的按鈕 BN_DOUBLECLICKED 訊息處理常式,處理常式不會呼叫按兩下該按鈕時,Windows CE 上使用 MFC 的類別。這個處理常式是在 Microsoft Windows 95、 Microsoft Windows 98、 Microsoft Windows NT 4.0 及 Microsoft Windows 2000 上呼叫。
發生的原因
這個問題是因為 Windows CE 作業系統中的錯誤。
解決方案
一個可能的解決方式是加入之按鈕的 BN_CLICKED 處理常式。這個處理常式內的使用類似下列的程式碼來測試是否 「 按鈕已按下在最後一個幾毫秒:
  static BOOL s_bLastClicked = TRUE;  static DWORD s_dwTickCount = 0;  if (s_bLastClicked)  {    DWORD dwTickCount = GetTickCount();    if ((dwTickCount - s_dwTickCount) < 500) //Last click less than 500ms?    {      s_bLastClicked = FALSE; //Was double-clicked, don't test next time...      //Assume a double click...      //Do your double-click code here...    }    s_dwTickCount = dwTickCount;  }  else     s_bLastClicked = TRUE;				
手動加入 CS_DBLCLKS 視窗類別樣式,並加入 BS_NOTIFY 樣式為 [] 按鈕沒有幫助。不過,此手動處理程序不會允許除了 Windows CE 外其他平台上執行時傳送訊息。
狀況說明
Microsoft 已確認這是在本文開頭所列之 Microsoft 產品中的有錯誤。
其他相關資訊

重製行為的步驟

  1. 使用 WCE MFC AppWizard 來建立新的對話方塊架構應用程式。接受所有預設值,然後按一下 [完成]。
  2. OnInitDialog] 方法中加入下列程式碼,傳回陳述式之前:
    SetClassLong(m_hWnd, GCL_STYLE, GetClassLong(m_hWnd, GCL_STYLE) | CS_DBLCLKS);
  3. 加入對話方塊] 按鈕。用右鍵按一下該按鈕,再按一下 [內容]。按一下 [樣式] 索引標籤並選取 [通知] 核取方塊。
  4. 使用 ClassWizard,方法是按一下 [檢視] 功能表,再選取功能表項目 ClassWizard。在 [物件的識別碼] 區段按一下 IDC_BUTTON1。在 [郵件] 區段之下按一下 [BN_DOUBLECLICKED 訊息]。按一下 [加入函式,] 然後按一下 [編輯程式碼
  5. 將一個中斷點放在按鈕 BN_DOUBLECLICKED 訊息處理常式。
  6. 建置應用程式,並執行它何時完成建置。
您應該注意到叫用中斷點並不取得或裝置上執行時在模擬器中執行。如果您不在 Windows CE 上執行的 Win32 應用程式在執行上述步驟,如預期般運作,處理常式。
CE 特定連按兩下 WM_LBUTTONDBLCLK BN_CLICKED BN_DOUBLECLICKED WM_LBUTTONDOWN WM_LBUTTONUP

警告:本文已自動翻譯

內容

文章識別碼:247323 - 最後檢閱時間:02/23/2014 22:07:34 - 修訂: 2.0

  • Microsoft Windows CE Toolkit for Visual C++ 6.0
  • kbnosurvey kbarchive kbmt kbbug kbbutton KB247323 KbMtzh
意見反應