网站开发需要哪些工程师荆门网站建设514885
news/
2025/10/9 13:16:29/
文章来源:
网站开发需要哪些工程师,荆门网站建设514885,制作免费制作个人网站怎么做,辽宁建设工程信息网官网 项目经理解锁表格From: http://blog.csdn.net/handsomewang527/article/details/1676259 随着我们开发的应用的日益复杂#xff0c;像以往那样将所有功能坐在一个exe文件中情况越来越少#xff0c;更多时候是整个应用由若干模块、甚至若干单独的exe文件组成#xff0c;这就涉及到了模块或进…From: http://blog.csdn.net/handsomewang527/article/details/1676259 随着我们开发的应用的日益复杂像以往那样将所有功能坐在一个exe文件中情况越来越少更多时候是整个应用由若干模块、甚至若干单独的exe文件组成这就涉及到了模块或进程间的通讯交互问题本文主要谈谈在进程间的信息传递方法作为进一步探讨进程间通讯方案的参考。
1使用用户自定义消息在进程间传递消息。 经过一定时间的Win32开发大家对Windows Mobile平台下的消息映射机制应该都比较清楚了除了系统已经为我们设定的如WM_CREATE、WM_PAINT这类消息外还有一种特殊的WM_USER消息用于用户自定义消息。
定义格式如下 #define WM_IAMHANDSOME WM_USER1
然后同样的对于WM_IAMHANDSOME同样的将它映射到相应的处理函数上去。
当需要使用激发该消息时采用SendMessage函数发送一个WM_IAMHANDSOME即可。下面谈谈在进程间如何进行用户自定义消息的传递。 例假设两个程序一个叫zoujielun,一个叫feiyuqing两个程序进行一项操作唱一首名叫《千里之外》的歌。 其中即需要一个程序“唱”完后通知另一个程序接着“唱”。
1在两个程序中都定义#define WM_YOUTURN WM_USER10
2在feiyuqing进程中加入对应WM_YOUTURN的映射
const MSG_MAP_MAIN_S g_mainMsg[]
{ //……
{WM_YOUTURN,OnYouturn}, //……
};
3在zoujielun中向feiyuqing发送WM_YOUTURN的消息代码如下 Sing(_T(“屋檐如悬崖风铃如沧海我等燕归来……”)); HWND findWindowsNULL; findWindows FindWindow(_T(“feiyuqing”), _T(“feiyuqing)); SendMessage(findWindows,WM_YOUTURN,0,0);
这样即把消息发送给了feiyuqing进程。
4)在feiyuqing中对应的OnYouTurn做出相应处理即可。
LRESULT OnYouTurn(HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam)
{ Sing(_T(“我送你离开千里之外 ……”)); return 0;
} 这样即实现了进程间通过自定义消息传递来进行通讯但是这样的缺点是不能同时传递数据。假设feiyuqing因为年纪大了如果突然“失忆”了不记得歌词需要zoujielun不但告诉他该唱了还要告诉他该唱什么这时就需要利用系统一个强大的消息WM_COPYDATA。 2使用WM_COPYDATA消息跨进程传递数据 在SDK中该消息对应的参数为 WM_COPYDATA wParam (WPARAM)(HWND) hwnd; lParam (LPARAM)(PCOPYDATASTRUCT) pcds;
关键在于第二个参数即一个COPYDATASTRUCT结构的指针。
该数据结构的结构如下
typedef struct tagCOPYDATASTRUCT { DWORD dwData; DWORD cbData; PVOID lpData;
} COPYDATASTRUCT;
第一个数据成员可以传递一个DWORD类型如果只是要在进程间传一个DWORD类型的数据这里可以直接用这个成员传递。
关键在第二、三个数据成员第三个lpData即为欲传递的数据的指针第二个cbData即为传递的数据大小以byte为单位。
下面举例还是zoujielun和feiyuqing程序间的通讯。
1在feiyuqing进程中加入对应WM_COPYDATA的映射
const MSG_MAP_MAIN_S g_mainMsg[]
{ //……
{WM_COPYDATA,OnYouturn}, //……
};
2在zoujielun中向feiyuqing发送WM_YOUTURN的消息代码如下 Sing(_T(“屋檐如悬崖风铃如沧海我等燕归来……”)); HWND findWindowsNULL; findWindows FindWindow(_T(“feiyuqing), _T(“feiyuqing)); TCHAR *sContent new TCHAR[256]; wsprintf(sContent,_T(“我送你离开千里之外……));
COPYDATASTRUCT copyData;
copyData.cbData _msize(sContent);
copyData.lpData sContent;
SendMessage(findWindows,WM_COPYDATA,0,(LPARAM)copyData); // 不能使用PostMessage因为这是个非阻塞的函数对方会收不到发来的消息的。
3)在feiyuqing中对应的OnOnYouTurn做出相应处理即可。
LRESULT OnYouTurn(HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam)
{ TCHAR *sContent NULL; sContent (TCHAR*)((COPYDATASTRUCT*)lParam)-lpData; Sing(sContent); return 0;
}
即收到该消息后从相应参数取出数据进行处理。 学累了吧快来看看我的非技术博客猫思猫想
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/932574.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!