MFCのクラスを多重継承して作成したクラスのオブジェクトをnewを使って作成する
と,いろいろなエラーが出るのでます.
また,多重継承したクラスで,メッセージハンドラを記述すれば,エラーがでます.
これらの対処方法を教えて下さい.その他のいくつかのエラーは,
メソッドの前にクラス名を書いて,どのクラスのメソッドを用いているのかはっきりさせる方法で対処
できたのですが,これらにはどのようにして対処すれば良いのでしょうか?
多重継承を用いずに実現できませんか?
具体的に何をしたいのかが分かれば回答できるかもしれません。
CRichEditCtrlをベースとした,プログラムエデイタを作成しています.
ここで,マウスの位置(CPoint)を,エデイタの先頭からのインデックス値に変換
したいのですが,その関数が有りません.
”CPoint GetCharPos( long lChar ) const”
では,インデックス値から,クライアント座標を出すことはできても,
その逆ができません.
CEditでは,
”CPoint PosFromChar( UINT nChar ) const;”
”int CharFromPos( CPoint pt ) const;”
があり,インデックス値からクライアント座標への変換と
クライアント座標からインデックス値への変換の両方ができる
関数が用意されています.
CRichEditCtrlから派生したクラスに,さまざまな
関数を加えてた派生クラスがあるので,基底をCEditに変更することは
できません.そこで,基底をCRichEditCtrlとCEditにしたのですが,
さまざまなエラーがでて困っているという現状です.
> ”CPoint GetCharPos( long lChar ) const”
> では,インデックス値から,クライアント座標を出すことはできても,
GetCharPos で次々と文字位置を取得していって、マウスポインタの座標と比較すればよいのでは?
すべての文字と比較するのはコストがががるでしょうから、
まず表示されている行の先頭の文字位置と比較してマウスポインタがある行を確定し、
その後、その行に含まれる文字の位置と次々に比較していけばマウスポインタがある文字のインデックスが分かりますわね。
> CRichEditCtrlから派生したクラスに,さまざまな
> 関数を加えてた派生クラスがあるので,基底をCEditに変更することは
> できません.そこで,基底をCRichEditCtrlとCEditにしたのですが,
それは無理です。
CEdit の CharFromPos は CEdit の内部構造に基づいて文字のインデックスを割り出しているのですから、
多重継承したところで、CRichEditCtrl の 内部構造に適用できるわけがないです。