C++系(主にボーランドビルダー)でVBの様なイベント付きクラスを作成したいのです。
単なるスレッドクラスの定義は:
//----------------------------------------------
// クラス
// スレッドクラスより派生
//----------------------------------------------
class CUserClass : public TThread
{
private:
AnsiString aa;
HANDLE hr;// ハンドル
protected:
HWND FormHandle; // 親フォームハンドル
void __fastcall Execute();// スレッドメイン処理
public:
__fastcall CUserClass(bool,AnsiString ,HWND ); // コンストラクタ
__fastcall ~CUserClass(); // デストラクタ
};
でいいのですが・・・。
何かクラス側で変化があったとき、クラスを使う親側モジュールにイベントを発生させたいのですが。
クラス側から親側に
SendMessage( 親側ハンドル, 送りたいメッセージ, 0, 0 );
でメッセージを送る方法があるのですが、これだと親側がクラスでないといけないし、送りたいメッセージが固定となるし・・・。
よい方法を教えてください。
No.1ベストアンサー
- 回答日時:
関数を宣言する
その関数を「型」とするフィールドを作る
コンストラクタでnullに初期化する
使う側で、そのフィールドに飛ばしたい関数のアドレスを設定する
イベントを発生させたいタイミングで、フィールドがnullでなければコールする
ってかんじかな?
BCBなら「コンポーネント開発者ガイド」に「イベントの作成」という章があります。
No.2
- 回答日時:
初心者には呼出側をクラスにした方法がベターですが
こんな方法もあるよってことです。
後はご自分で考えてください。
typedef LRESULT (*CALL_PROC)(WPARAM wParam,LPARAM lParam);
class Caller
{
CALL_PROC pFn;
Caller():pFn(NULL)
{
}
void SetCallback(CALL_PROC pFn)
{
Caller::pfn = pFn;
}
LRESULT Foo(WPARAM wParam,LPARAM lParam)
{
if (pFn)
return (*pFn)(wParam,lParam);
return 0;
}
};
LRESULT Func(WPARAM w,LPARAM l)
{
return 0;
};
:
Caller ob;
ob.SetCallback(&Func);
:
ob.Foo(1,2);
この回答への補足
吟味していきたいと思いますが僕の知識ではどうも難しいようです。だれかコメントつきで超初心者でも分かるような説明をお願いしたいと思います。
補足日時:2004/06/23 12:16お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- Visual Basic(VBA) Vba LongPtrについて教えてください 2 2022/08/19 11:14
- Java javaのクラスの分け方について質問です。 APIの内部用と外部用でクラスを分けたいのですがインター 2 2022/04/26 16:06
- 学校 担任の先生の育休メッセージについて クラスの担任の先生が育休になるのでクラスでメッセージを書こうとい 1 2022/12/21 01:52
- Java java 飾子を付けること(public static・・・) ・コンソールへの出力処理はmainメ 2 2022/06/16 19:34
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/06 09:28
- Java リレーションエンティティクラスとは何ですか? 2 2023/02/10 00:02
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
イベントにAddHandlerされてい...
-
FriendとPublicの違い。。。
-
C#のクラス設計について教えて...
-
MFCのドラッグ&ドロップについて
-
クラスのアドレスを引数として...
-
オーバーライド関数の呼び出し...
-
既定のコンストラクタがない?
-
MRUの一時回避 VC++2008 MFC
-
MFCアプリのコマンドラインでパ...
-
C++ protectedにアクセス不可
-
vba sendKeysを送る相手のソフ...
-
MFC CSplitter内にコントロール...
-
ダイアログ表示時にチェックボ...
-
VC++ MFC CFrameWndって・・・
-
このコンパイルエラーの意味に...
-
ボタンのオーナードローについて
-
派生クラスから基本クラスprote...
-
DLLからEXEのクラスを呼び出す...
-
CMainFrameクラスの使い方
-
MessageBoxを継承したい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FriendとPublicの違い。。。
-
既定のコンストラクタがない?
-
(UWSC) 「#32770」の意味わかり...
-
クラスのアドレスを引数として...
-
ダイアログ表示時にチェックボ...
-
イベントにAddHandlerされてい...
-
【ASP.NET】 独自で作成したク...
-
MFCアプリのコマンドラインでパ...
-
DebugクラスとTraceクラスの違い
-
ボタンのオーナードローについて
-
OnInitDialog()の関数の組み込み方
-
IncludeではなくClassで宣言す...
-
関数の呼び出し元の検索
-
このコンパイルエラーの意味に...
-
C++ protectedにアクセス不可
-
C++で継承元のクラスの代入演算...
-
DataGridViewのセルに斜線を引...
-
C#で通常のbuttonコントロール...
-
エディットコントロールのイベ...
-
CMainFrameクラスの使い方
おすすめ情報