2017-03-05 7 views
0

CMFCToolBarComboBoxEditは、BackSpaceボタンを処理しますが、削除ボタンは処理しません。 PreTranslateMessage以外の削除ボタンを処理する方法はありますか? はいの場合、この方法は何ですか? いいえの場合、コントロールの現在のカーソル位置を取得する方法と、インデックスを使用して特定のcharを削除する方法は何も選択されていない場合、カーソルの右側にあるcharを削除できますか? ありがとうございます。CMFCToolBarComboBoxEditハンドル削除ボタン

答えて

1

はい使用、PreTranslateMessageを。あなたが扱うべきシーケンスを検出した場合は、呼び出し:

if (..) // Check if you have a message that should 
     // be passed to the window directly 
{ 
    TranslateMessage(pMsg); 
    DispatchMessage(pMsg); 
    return TRUE; 
} 

メッセージは、デフォルトの制御によって処理されるべきであり、他のコントロールによって処理されるべきでないことを検出するときは、PreTranslateMessageで常にこの操作を行うことができますPreTranslateMessageを実行するウィンドウのチェーン内にあります。これは、コンボボックスを開いていて、ビューやアクセラレータではなく内部的にPage Down/Upを処理したい場合にも役立ちます。

+0

ありがとう@ xMRi –

0

次のように私はPreTranslateMessageでDeleteキーを扱ってきました:

BOOL PreTranslateMessage(MSG* pMsg) 
{ 
    if(WM_KEYDOWN == pMsg->message && VK_DELETE == pMsg->wParam) 
    { 
    int iStartChar = -1, iEndChar = -1; 
    GetSel(iStartChar, iEndChar); 
    if(iStartChar != iEndChar) 
     Clear(); //clear the selected text 
    else 
    { 
     SetSel(iStartChar, iStartChar + 1); 
     Clear(); 
    } 
    } 

    return CMFCToolBarComboBoxEdit::PreTranslateMessage(pMsg); 
} 
+1

私の答えを見てください。それはより普遍的です... – xMRi

関連する問題