この記事は2019年03月08日に投稿しました。
目次
かんたん Visual C++ [改訂2版] (プログラミングの教科書)
- 作者: 堀義博
- 出版社/メーカー: 技術評論社
- 発売日: 2017/10/13
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
1. はじめに
こんにちは、iOSのエディタアプリPWEditorの開発者の二俣です。
今回は業務で使用しているMFCのメッセージ通信でデータを渡す方法についてです。
2. MFCのメッセージ通信でデータを渡す
MFCのメッセージ通信でデータを渡すには、WM_COPYDATAメッセージを使用します。
実装例
SampleDlg.h
// データの受け渡しに使用する構造体 typedef struct tagSendData { CString msg; tagSendData() : msg(_T("")) {} } SendData; class CSampleDlg : public CDialogEx { ... DECLARE_MESSAGE_MAP() public: // ボタンのイベントハンドラ // WM_COPYDATAメッセージを送信します。 afx_msg void OnBnClickedButton1(UINT nID); // WM_COPYDATAメッセージを処理するイベントハンドラ afx_msg LRESULT OnCopyData(WPARAM wParam, LPARAM lParam); ... };
SampleDlg.cpp
// 複数のWM_COPYDATAメッセージの送信元を判別するために使用するID #define MSG_SEND_DATA (1) //! メッセージマップ BEGIN_MESSAGE_MAP(CSampleDlg, CDialogEx) ON_BN_CLICKED(IDC_BUTTON1, &CSampleDlg::OnBnClickedButton1) ON_MESSAGE(WM_COPYDATA, &CSampleDlg::OnCopyData) END_MESSAGE_MAP() /** * @brief ボタンが押下された時に呼び出されます。 */ void CSampleDlg::OnBnClickedButton1() { // 渡したいデータを設定します。 m_sendData.msg = _T("Hello world"); // WM_COPYDATAで使用するデータ構造体を設定します。 COPYDATASTRUCT data; data.dwData = 0; // 渡したいデータのポインタを設定します。 data.lpData = &m_sendData; // 渡したいデータのサイズを設定します。 data.cbData = sizeof(m_sendData); // WM_COPYDATAメッセージを送信します。 SendMessage(WM_COPYDATA, MSG_SEND_DATA, (LPARAM)&data); } /** * @brief WM_COPYDATAメッセージのイベントハンドラ * * @param [in] wParam 送信元を判別するID * @param [in] lParam 渡されたデータ構造体 * @return 処理結果 */ LRESULT CSampleDlg::OnCopyData(WPARAM wParam, LPARAM lParam) { switch (wParam) { // 該当するメッセージの場合 case MSG_SEND_DATA: // lParamで渡されたCOPYDATASTRUCTからデータを取り出します。 COPYDATASTRUCT* pData = (COPYDATASTRUCT*)lParam; SendData* pSendData = (SendData*)pData->lpData; // 取り出したデータを表示します。 AfxMessageBox(pSendData->msg); break; case default: // 上記以外、何もしません。 break; } return 0; }
3. おわりに
時間のかかる処理を別スレッドで行い、処理終了時に処理結果のデータをUI側に渡すために使用しました。
標準講座MFC6.0―Visual C++による効率的なWindowsプログラミング (Programmer’s SELECTION)
- 作者: ハーバートシルト,田中正造,Herbert Schildt,コスモワークス
- 出版社/メーカー: 翔泳社
- 発売日: 1999/04/01
- メディア: 単行本
- 購入: 11人 クリック: 39回
- この商品を含むブログ (4件) を見る
紹介している一部の記事のコードはGitlabで公開しています。
興味のある方は覗いてみてください。
私が勤務しているニューラルでは、主に組み込み系ソフトの開発を行っております。
弊社製品のハイブリッドOS Bi-OSは高い技術力を評価されており、特に制御系や通信系を得意としています。
私自身はiOSモバイルアプリやウィンドウズアプリを得意としております。
ソフトウェア開発に関して相談などございましたら、お気軽にご連絡ください。
また一緒に働きたい技術者の方も随時募集中です。
興味がありましたらご連絡ください。
EMAIL : info-nr@newral.co.jp / m-futamata@newral.co.jp
TEL : 042-523-3663
FAX : 042-540-1688