1

CRichEditCtrl コントロールを含む CDialog ウィンドウ (CDrafter) があります。

CDrafter::PreTranslateMessage と CDrafter::OnNotify をオーバーライドして、RichTextEdit 内の特別な単語をマウスでクリックすると、別のダイアログ (MyDialog) が開きます。

*注: EN_LINK スタイルの制限が気に入らなかったので、これを行いました。*

したがって、CDrafter::PreTranslateMessage 内には次のものがあります。

どこでどの単語がクリックされたかを判断するだけです (それ以上は何もしません) (OnNotify が何かを行うのを待ちます)。

したがって、CDrafter::OnNotify 内には次のものがあります。

BOOL CSTANAGMessageDrafterDlg::OnNotify( WPARAM wParam, LPARAM lParam, LRESULT* pResult    )
{
    BOOL r = CDialog::OnNotify(wParam, lParam, pResult);

    //if (::PreTranslateMessage found a word clicked on ) {
    MyDialog dialog;
    dialog.DoModal();

    //}

    //Awesome my dialog opened and I can start editing the form (via the keyboard) no problems.
    //BUG: There is a problem as the mouse curser is still showing the 
    // move carpet position icon as if it is still focused on the RichTextEdit control.
    // If I click the mouse anywhere (in the MyDialog, or within the parent dialog)
    // the mouse icon, and focus correctly changes to MyDialog, then I can click OK or CANCEL. 



  return r;
}

MyDialog::DoModal の後に "CDialog::OnNotify(wParam, lParam, pResult)" を呼び出してみましたが、同じ問題が発生します。MyDialog::DoModal は、親ダイアログと同じスレッド内で呼び出されます。

私は次のことができると期待しています:

Word をクリックすると MyDialog が開き、MyDialog::Cancel ボタンをクリックするとダイアログが閉じます。

しかし、これが私のシーケンスであるため、問題があります。

単語をクリックすると、MyDialog が開き、MyDialog::Cancel ボタンをクリックします (動作しません - マウス アイコンのみが変わります)。MyDialog::Cancel ボタンをクリックすると、ダイアログが閉じます。

新しく開いたダイアログ内でマウス コントロールを取得するには、マウスを (最初にクリックする) 必要があります。つまり、ボタンなどのマウスオーバー イベントは、I (クリック) するまで何もしません。

4

0 に答える 0