ボタンのイベントをハンドル – プログラミング – Home

ボタンのイベントをハンドル
 
通知
すべてクリア

[解決済] ボタンのイベントをハンドル


亀亀
 亀亀
(@亀亀)
ゲスト
結合: 18年前
投稿: 8
Topic starter  

いつもお世話になります。
環境XP VC++6.0 MFC使用

ButtonWrapperというクラスを作成しました。
Genericクラスです。
CButton型のポインタをメンバに持っています。
Drawメソッドが呼ばれたら引数で渡されたウィンドウ
上にボタンを貼り付けます。

void ButtonWrapper::Draw( CWnd *pWnd )
{
m_pButton = new CButton;

CRect rect;
rect.left = 10;
rect.top = 10;
rect.right = 100;
rect.bottom = 100;

m_pButton->Create( Test, WS_VISIBLE | WS_CHILD
, rect, pWnd, 20000 );
}

呼び出し側は
m_buttonWrapper.Draw( this );
などとなります。

ここでボタンのクリックイベントを
ButtonWrapperクラスにてハンドルしたいのですが、
どの様に書けばよろしいでしょうか。
宜しくお願い致します。


引用未解決
トピックタグ
たいちう
 たいちう
(@たいちう)
ゲスト
結合: 23年前
投稿: 662
 

ここが参考になるかと。
http://www.alpha-net.ne.jp/users2/uk413/vc/VCT_BTowner.html


返信引用
亀亀
 亀亀
(@亀亀)
ゲスト
結合: 18年前
投稿: 8
Topic starter  

ご回答ありがとうございます。
オーナードローにしないと不可能でしょうか。
ButtonWrapperクラスは事情があって、
CButtonの派生クラスにはしたくないのですが。


返信引用
たいちう
 たいちう
(@たいちう)
ゲスト
結合: 23年前
投稿: 662
 

> オーナードローにしないと不可能でしょうか。

不可能ではないのかもしれないけど、、、
事情もわからない私にはアドバイスしにくいな。

他の回答者の役にも立つかもしれないので、
もう少しだけ質問。

1.
> Drawメソッドが呼ばれたら引数で渡されたウィンドウ
> 上にボタンを貼り付けます。

ウィンドウを詳しく説明してください。
(CDialogとか、CViewとか、任意のウィンドウとか)

2.
m_buttonWrapper.Draw( this ); の thisは何?

3.
ButtonWrapper::Drawは、一度しか呼ばれないんですよね?
そのタイミングは?

4.そもそもプロジェクトの種類は?


返信引用
亀亀
 亀亀
(@亀亀)
ゲスト
結合: 18年前
投稿: 8
Topic starter  

説明不足で申し訳ありませんでした。

1.CDialogです
2.CDialogです。(1.と同じ)
3.OnInitDialog()です。一度しか呼びません。
4.MFC AppWizard のダイアログベースです。

以上です。宜しくお願い致します。


返信引用
超初心者
 超初心者
(@超初心者)
ゲスト
結合: 23年前
投稿: 139
 

クリックといったら親ウィンドウへ通知されるので
受け取ることは出来ないね。

マウスのボタンダウンとかなら受け取れるけど
クリックとは違うんだよな。

クリックはボタン上でボタンダウンして
そのボタン上でボタンを離したときに
親ウィンドウへWM_COMMANDメッセージとしてポストされるはず。

親ウィンドウに細工でもしない限り無理なんじゃないの。


返信引用
通りすがり
 通りすがり
(@通りすがり)
ゲスト
結合: 24年前
投稿: 92
 

Genericクラスでは、こんな方法しか無いのでは
CWndクラスにできれば、メッセージ転送でできるけど

CButton の派生クラスを作り
ButtonWrapperのポインターをメンバに追加
Click イベントで ButtonWrapperの関数を呼び出す

ButtonWrapper Drawで
CButton 派生クラスをnewする。自身のポインターも渡す。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

私も他の人と同意見ですね。
Genericクラスだとそもそもメッセージを受け取る為の機構が中に無いわけだから
無理でしょう。それにButtonWrapperクラスはCButtonクラスではありませんし。
is aの関係ではなくて、have aの関係ですよね。
クリックイベントはボタンクラスがマウスボタンのイベントを受けて
親ウインドウに通知していると思うのでボタンクラスを弄らずに転送先を
変えるのは無理だと思います。
親ウインドウで受けておいて受けた内容をButtonWrapperクラスに通知するような
方法が一番確実ではないかと思います。
(通りすがりさんが書かれているようにクラスのメンバー関数を呼び出す形になるかと)
少なくとも親ウインドウの助けを借りないと無理なのではないでしょうか。


返信引用
亀亀
 亀亀
(@亀亀)
ゲスト
結合: 18年前
投稿: 8
Topic starter  

皆様、いろいろなアドバイスいただきありがとうございました。
通りすがり様の以下の方法でやってみたいと思います。

>ButtonWrapper Drawで
>CButton 派生クラスをnewする。自身のポインターも渡す。


返信引用
亀亀
 亀亀
(@亀亀)
ゲスト
結合: 18年前
投稿: 8
Topic starter  

すいません。解決しました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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