0

MFC で textEdit アプリケーションを構築しています。ユーザーが Web アドレスを書いたときに自動的にハイパーリンクを作成する方法はありますか? これは、Web アドレス「www.google.com」を入力すると、アプリケーションが Web アドレスを検出し、すぐにハイパーリンクを作成するようなものです。これについて説明しているドキュメントを検索しましたが、見つかりませんでした..そして作成できませんでした..私はすでにメモ帳を作成しましたが、メモ帳にハイパーリンクの機能を追加できませんでした。

次の文はハイパーリンクの機能です。

  1. テキストをクリックすると、テキストで指定された場所にブラウザー ウィンドウを開く必要があります。

  2. カーソルは、コントロール上を移動するときに、標準の矢印カーソルから人差し指に変更する必要があります。

  3. カーソルがコントロール上に移動したときに、コントロール内のテキストに下線を引く必要があります。

  4. ハイパーリンク コントロールでは、テキストを別の色で表示する必要があります。黒だけでは不十分です。私が追加した機能は次のとおりです。

5. 一度アクセスしたハイパーリンク コントロールは、色を変更する必要があります。

6. ハイパーリンク コントロールは、キーボードからアクセスできる必要があります。

7.コントロールにフォーカスがあるとき、またはカーソルがコントロールの上にあるときに、プログラマーがいくつかのアクションを実行できるように、ある種のフックをインストールする必要があります。

機能の中で、私が一番完成させたいのは1つ目です。ハイパーリンク テキストをクリックすると、インターネット上のブラウザ ウィンドウにリンクされるはずです。

答えて助けてください。ありがとう。

4

2 に答える 2

1

CRichEditCtrlコントロールを使用するだけです ( でAfxInitRichEdit2を呼び出すことを忘れないでくださいInitInstance)。SetAutoURLDetectを呼び出します。終わり。

于 2012-10-21T19:24:38.803 に答える
0

残念ながら、これは機能させるには十分ではありません。URL に似たテキストを青い下線付きで表示しますが、リンクは呼び出しません。

これは、追加のコードで処理する必要があります。これにより、必要なイベント マスクが設定されます。

long lMask = m_RichEditCtrl.GetEventMask();
m_RichEditCtrl.SetEventMask(lMask | ENM_LINK);

m_RichEditCtrl.SetAutoURLDetect();

また、反映された EN_LINK は、リンクをたどるために処理する必要があります。例えば:

void CHyperLinkInEditView::OnEnLink(NMHDR *pNMHDR, LRESULT *pResult)
{
    ENLINK *p_Link = reinterpret_cast<ENLINK *>(pNMHDR);
    if(p_Link && p_Link->msg == WM_LBUTTONDOWN)
    {
        //int iRange = m_RichEditCtrl.GetTextRange(p_enLinkInfo->chrg.cpMin, p_enLinkInfo->chrg.cpMax);
        m_RichEditCtrl.SetSel(p_Link->chrg);

        CString szLinkString = m_RichEditCtrl.GetSelText ();
        ShellExecute(m_hWnd, L"Open", szLinkString, NULL, NULL, SW_MAXIMIZE);
    }
    *pResult = 0;
}

上記のすべてで、要件 1、2、3 (部分的に – テキストには常に下線が引かれます)、および 4 が解決されます。5、6、および 7 はよくわかりません。

詳しく教えていただけますか?

于 2012-10-23T21:56:48.013 に答える