MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
MFCの基礎 - ユーザ定義メッセージのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
MFCの基礎 - ユーザ定義メッセージ
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == <code>CWnd</code>クラスや<code>CView</code>クラスの派生クラスにおいて、ユーザ定義メッセージを作成して使用する手順を記載する。<br> <br> 具体的には、<code>SendMessage</code>関数や<code>PostMessage</code>関数を実行して、ユーザ定義メッセージを呼び出す。<br> <syntaxhighlight lang="c++"> <CWndクラスまたはCViewの派生クラスのポインタ>->SendMessage(メッセージ名, WPARAM, LPARAM); </syntaxhighlight> <br><br> == ユーザメッセージの定義 == メッセージ名とメッセージIDを定義するため、stdafx.hファイル等に以下を追記する。<br> <u>ただし、メッセージIDは、ユーザが使用できる範囲<code>WM_APP(0x8000)から0xBFFF</code>を使用すること。</u> <syntaxhighlight lang="c++"> // stdafx.h #define <メッセージ名> WM_USER + [任意の整数値] </syntaxhighlight> <br><br> == 応答関数の追加 == ユーザ定義のメッセージを処理するメソッドは、<code>CWnd</code>クラスや<code>CView</code>クラスの派生クラスのヘッダファイルに以下のように定義する。<br> 定義する場所は、<code>public</code>属性として、<code>DECLARE_MESSAGE_MAP()</code>マクロ以降に定義する。<br> <syntaxhighlight lang="c++"> // CWndまたはCViewの派生クラス.h public: afx_msg LRESULT <関数名>(UINT wParam, LONG lParam); </syntaxhighlight> <br><br> == メッセージマップに登録 == ユーザ定義メッセージを処理する関数とメッセージIDを関連付ける。<br> <code>CWnd</code>クラスや<code>CView</code>クラスの派生クラスのcppファイルにある<code>BEGIN_MESSAGE_MAP</code>マクロから<code>END_MESSAGE_MAP</code>マクロ内に、<br> 以下のように登録する。<br> <syntaxhighlight lang="c++"> // CWndまたはCViewの派生クラス.cpp BEGIN_MESSAGE_MAP // ... ON_MESSAGE(<メッセージ名>, &<関数名>) // ... END_MESSAGE_MAP </syntaxhighlight> <br><br> == 関数の記述 == <code>CWnd</code>クラスや<code>CView</code>クラスの派生クラスのcppファイルに、応答関数を作成する。<br> <syntaxhighlight lang="c++"> // CWndまたはCViewの派生クラス.cpp LRESULT クラス名::関数名(UINT wParam, LONG lParam) { // do something return 0; } </syntaxhighlight> <br><br> == サンプルコード == <syntaxhighlight lang="c++"> // SampleDlg.h class CSampleDlg : public CDialogEx { // ... DECLARE_MESSAGE_MAP() public: // ... // ユーザ定義メッセージを処理する関数を定義する afx_msg LRESULT OnTest(WPARAM wParam, LPARAM lParam); } </syntaxhighlight> <br> <syntaxhighlight lang="c++"> // stdafx.h // メッセージIDを定義する // メッセージIDはユーザが使用できる範囲 WM_APP(0x8000)~0xBFFFFで定義する #define WM_MSG_TEST (WM_APP + 1) </syntaxhighlight> <br> <syntaxhighlight lang="c++"> // SampleDlg.cpp BEGIN_MESSAGE_MAP(CSampleDlg, CDialogEx) // ... // ユーザ定義メッセージを処理する関数とメッセージIDを関連付ける ON_MESSAGE(WM_MSG_TEST, &CSampleDlg::OnTest) END_MESSAGE_MAP() void CSampleDlg::SampleFunc() { // ユーザ定義メッセージを送信する this->PostMessage(WM_MSG_TEST, 0, 0); // this->SendMessage(WM_MSG_TEST, 0, 0); } // ユーザ定義メッセージを処理する関数を実装する LRESULT CSampleDlg::OnTest(WPARAM wParam, LPARAM lParam) { ::AfxMessageBox(_T("ユーザ定義メッセージの動作試験")); return 0; } </syntaxhighlight> <br><br> __FORCETOC__ [[カテゴリ:MFC]]
MFCの基礎 - ユーザ定義メッセージ
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse