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

解決


太陽  2006-07-31 07:20:21  No: 62604  IP: 192.*.*.*

WINXP  .NET  MFCです。

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

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

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

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

編集 削除
dairygoods  2006-07-31 14:12:49  No: 62605  IP: 192.*.*.*

自動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 03:14:31  No: 62606  IP: 192.*.*.*

ありがとうございます。

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

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 03:43:37  No: 62607  IP: 192.*.*.*

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

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

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

編集 削除
太陽  2006-08-01 03:49:40  No: 62608  IP: 192.*.*.*

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


1点は解決しました。

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

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

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

編集 削除
太陽  2006-08-01 03:57:10  No: 62609  IP: 192.*.*.*

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

解決しました。

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

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

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

編集 削除