リッチエディットビューでメモ帳のようなものを作っているのですが、特定の言葉に
対してリンクを張りたいと思っています。
このようなことは可能なのでしょうか?
開発環境は MFC MDI VC++6.0です。
MSDNなどを調べてSetEventMask()とENM_LINKあたりを使えば出来るとわかりました。
領域をドラッグアンドドロップして右クリックのポップアップメニューからのいべんと
に下のように追加したのですがコンパイルは出来ても実行するとエラーになってしまい
ます。
m_pRichEditCtrl->SetEventMask(m_pRichEditCtrl->GetEventMask()|ENM_LINK);
ここではポインタ変数は下のように定義してます
CRichEditCtrl* m_pRichEditCtrl;
ここまでは使用例に書いてあるのでわかったのですがこの先のEN_LINKの処理がどうして
もわかりません。
一応
Void CTextView::OnEnLink(NMHDR *pNMHDR,LRESULT *pResult){
ENLINK *pEnlink = reinterpret_cast<ENLINK *>(pNWHDR);
if(pEnlink->msg==LBUTTONDOWN){
//クリック処理
}
}
としているのですが問題点をご指摘してください。
さらに追加です。
どうもm_pRichEditCtrlのほうに問題があるみたいです。
この関数群を実行できないみたいです。このほかにもCutやCopyなどの単純なものを実行
しようとしてもASSERTでストップしているので読み込むことが出来ないようです。なに
か間違っている点がわかる方がいたら教えてください。
ASSERTは何処で止まっていますか?
これは問題点を検討する上でとても大切な情報ですよ。
逆に言うとASSERTで止まっている所にヒントがある場合が多いです。
指摘されているソースの該当行の内容を確認して見てはどうでしょうか?
ASSERTのダイアログが出ると嫌がる人がいますが、
ASSERTは問題点を指摘してくれる有難い物なのでもっと活用しましょう。
あと、MFCやライブラリのソースを読む事も大切なので
もしソースをインストールしていないのであれば、
ソースも一緒にインストールしておいた方がいいです。
返信が遅れてしまって申し訳ありません。
afxcmn.inlのそれぞれの呼び出しのところで出ているみたいです。Cutすると676で、
copyなら674といった具合です。
それでいてハンドルエラー的なメッセージをいただいているということはリッチエデ
ィットを使う際にはリッチエディットクラスを作成する以外にも必要な準備があるとい
うことなのでしょうか?
リッチエディットコントロールの初期化はされていますか??
AfxInitRichEdit();
msdnにはダイアログベースではないのでその初期化は必要ないと書いてあったのですが
MDIにもその処理が必要なのでしょうか
MDIだったのですね。失礼しましたm(_ _)m
DLLがロードされていれば問題ないと思います。
リッチエディットクラスを作成するだけは駄目だと思いますよ。
クラスを作成してもウインドウを生成しないとメッセージは使えませんから。
この辺はもっとも基本的な部分なんですが、きちんと理解されているでしょうか?
クラスのインスタンスを作成する事とリッチエディットのウインドウを生成する事は
話が別です。インスタンスだけ作成してもコントロールはできません。
新規作成で「MFC APPWizaid」を選択してViewのクラスで「CRichEditView」
を選択すれば、そのままで動きます。
ご自分で「CRichEditView」クラスを作ってやってみたいのならまずサンプルを
動かしてみるのが大切です。
PATIOさんのご意見にもあるとおり、「CRichEditView」のクラスを追加した
だけではうまくいきません。
>特定の言葉に対してリンクを張りたいと思っています。
これに対しての対応がなかったみたいですね。
ただ、上の「2007/01/24(水) 20:12:56」に書いた方法でスケルトンを
作ると、「CutやCopy」は普通に出来ます。
このスケルトンを基にして「ENM_LINK」を加えてみたらどうでしょうか。
http://www.kumei.ne.jp/c_lang/sdk2/sdk_149.htm
SDKですが参考にどうぞ。