多重継承時の問題点解決法は? – プログラミング – Home

多重継承時の問題点解決法は?
 
通知
すべてクリア

多重継承時の問題点解決法は?


シルクハット
 シルクハット
(@シルクハット)
ゲスト
結合: 23年前
投稿: 23
Topic starter  

MFCのクラスを多重継承して作成したクラスのオブジェクトをnewを使って作成する
と,いろいろなエラーが出るのでます.
また,多重継承したクラスで,メッセージハンドラを記述すれば,エラーがでます.

これらの対処方法を教えて下さい.その他のいくつかのエラーは,
メソッドの前にクラス名を書いて,どのクラスのメソッドを用いているのかはっきりさせる方法で対処
できたのですが,これらにはどのようにして対処すれば良いのでしょうか?


引用解決済
トピックタグ
kazuma
 kazuma
(@kazuma)
ゲスト
結合: 23年前
投稿: 217
 

多重継承を用いずに実現できませんか?
具体的に何をしたいのかが分かれば回答できるかもしれません。


返信引用
シルクハット
 シルクハット
(@シルクハット)
ゲスト
結合: 23年前
投稿: 23
Topic starter  

CRichEditCtrlをベースとした,プログラムエデイタを作成しています.
ここで,マウスの位置(CPoint)を,エデイタの先頭からのインデックス値に変換
したいのですが,その関数が有りません.
”CPoint GetCharPos( long lChar ) const”
では,インデックス値から,クライアント座標を出すことはできても,
その逆ができません.

CEditでは,
”CPoint PosFromChar( UINT nChar ) const;”
”int CharFromPos( CPoint pt ) const;”
があり,インデックス値からクライアント座標への変換と
クライアント座標からインデックス値への変換の両方ができる
関数が用意されています.

CRichEditCtrlから派生したクラスに,さまざまな
関数を加えてた派生クラスがあるので,基底をCEditに変更することは
できません.そこで,基底をCRichEditCtrlとCEditにしたのですが,
さまざまなエラーがでて困っているという現状です.


返信引用
kazuma
 kazuma
(@kazuma)
ゲスト
結合: 23年前
投稿: 217
 

> ”CPoint GetCharPos( long lChar ) const”
> では,インデックス値から,クライアント座標を出すことはできても,

GetCharPos で次々と文字位置を取得していって、マウスポインタの座標と比較すればよいのでは?
すべての文字と比較するのはコストがががるでしょうから、
まず表示されている行の先頭の文字位置と比較してマウスポインタがある行を確定し、
その後、その行に含まれる文字の位置と次々に比較していけばマウスポインタがある文字のインデックスが分かりますわね。

> CRichEditCtrlから派生したクラスに,さまざまな
> 関数を加えてた派生クラスがあるので,基底をCEditに変更することは
> できません.そこで,基底をCRichEditCtrlとCEditにしたのですが,

それは無理です。
CEdit の CharFromPos は CEdit の内部構造に基づいて文字のインデックスを割り出しているのですから、
多重継承したところで、CRichEditCtrl の 内部構造に適用できるわけがないです。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました