この記事は2019年03月08日に投稿しました。

目次
![かんたん Visual C++ [改訂2版] (プログラミングの教科書) かんたん Visual C++ [改訂2版] (プログラミングの教科書)](https://images-fe.ssl-images-amazon.com/images/I/51kl%2BP4hpkL._SL160_.jpg)
かんたん 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