リッチエディットボックスのメールアドレスのリンク

解決


太陽  2006-07-31 16:20:21  No: 62604

WINXP  .NET  MFCです。

リッチエディットボックスで、URLをリンクすることは、
SetAutoURLDetectとSetEventMask、ShellExecuteでできたのですが、
これだけですと、メールアドレスは「mailto:」がつかないとリンクされません。

しかし、アウトルックエクスプレスは「@」だけでリンクしますし、
過去にVC++のアプリで、「mailto:」なしリンクを見た記憶があります。

どのようにしたらいいのか、ご指導をお願いします。

よろしくお願いいたします。


dairygoods  2006-07-31 23:12:49  No: 62605

自動URL判定が気に入らないわけですから、
SetAutoURLDetect(FALSE)
とし、自分でリンクを張ります。

// たとえば、先頭から5文字に...
rich.SetSel(0, 5);

// リンク属性をセット
CHARFORMAT2 cf;
memset(&cf, 0, sizeof(cf));
cf.cbSize = sizeof(cf);
cf.dwMask = CFM_LINK;
cf.dwEffects = CFE_LINK;
m_rich.SendMessage(EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf);


太陽  2006-08-01 12:14:31  No: 62606

ありがとうございます。

根本的に、分かっていません。。。。

rich.SetSel(0, 5);  は、この場合、先頭から5字目にアンダーラインを引いてみせる、という理解でよろしいのでしょうか。

下記のようにしたのですが、リッチエデットボックスにテキストを入れても、そもそもアンダーラインが引かれません。

OnInitialUpdate()の中で、

m_rich.SetAutoURLDetect(FALSE);

m_rich.SetSel(0, 5);

CHARFORMAT2 cf;
    memset(&cf, 0, sizeof(cf));
    cf.cbSize = sizeof(cf);
    cf.dwMask = CFM_LINK;
    cf.dwEffects = CFE_LINK;

m_rich.SendMessage(EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf);

m_rich.SetEventMask(m_richedit1.GetEventMask() | ENM_LINK);

OnEnLinkRichedit21(NMHDR *pNMHDR, LRESULT *pResult)  の中で、

CString ss1;
if (pEnLink->msg == WM_LBUTTONDOWN) {
    m_rich.SetSel(pEnLink->chrg); ss1 = m_rich.GetSelText();

    ShellExecute(NULL, "open", "iexplore.exe", ss1, NULL, SW_SHOWNORMAL);
}

いろいろとコードの位置を置き換えてみたのですが、変化はありませんでした。

ご指導をお願いします。


太陽  2006-08-01 12:43:37  No: 62607

申し訳ありません。
1点は解決しました。

SetSelの前に文字列をリッチエディットボックスに入れないとだめでし。

ただ、別な問題に直面しました。


太陽  2006-08-01 12:49:40  No: 62608

申し訳ありません。
不用意に送信してしまいました。
書き直します。

1点は解決しました。

SetSelの前に文字列をリッチエディットボックスに入れるべきでした。

ただ、別な問題に直面しました。
初歩的なことかもしれませんが、リッチエディットボックスの文字列の中で、複数個所にリンクを貼る場合、どうなるのでしょうか。

SetSelを2つ置いてみたのですが、うしろのほうにしか、アンダーラインが引かれません。


太陽  2006-08-01 12:57:10  No: 62609

たびたび申し訳ありません。

解決しました。

SetSelごとにCHARFORMAT2構造体を置けばいいのですね。

なんだか、ひとりでボケとツッコミをやった気分です。

たいへんありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加