WINXP .NET MFCです。
リッチエディットボックスで、URLをリンクすることは、
SetAutoURLDetectとSetEventMask、ShellExecuteでできたのですが、
これだけですと、メールアドレスは「mailto:」がつかないとリンクされません。
しかし、アウトルックエクスプレスは「@」だけでリンクしますし、
過去にVC++のアプリで、「mailto:」なしリンクを見た記憶があります。
どのようにしたらいいのか、ご指導をお願いします。
よろしくお願いいたします。
自動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);
ありがとうございます。
根本的に、分かっていません。。。。
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);
}
いろいろとコードの位置を置き換えてみたのですが、変化はありませんでした。
ご指導をお願いします。
申し訳ありません。
1点は解決しました。
SetSelの前に文字列をリッチエディットボックスに入れないとだめでし。
ただ、別な問題に直面しました。
申し訳ありません。
不用意に送信してしまいました。
書き直します。
1点は解決しました。
SetSelの前に文字列をリッチエディットボックスに入れるべきでした。
ただ、別な問題に直面しました。
初歩的なことかもしれませんが、リッチエディットボックスの文字列の中で、複数個所にリンクを貼る場合、どうなるのでしょうか。
SetSelを2つ置いてみたのですが、うしろのほうにしか、アンダーラインが引かれません。
たびたび申し訳ありません。
解決しました。
SetSelごとにCHARFORMAT2構造体を置けばいいのですね。
なんだか、ひとりでボケとツッコミをやった気分です。
たいへんありがとうございました。
ツイート | ![]() |