以下内容,主要讲解了托管C++与WIN32API的混合编程,WIN32API函数如何在托管C++代码中使用,如何重载FORM的WinProc消息处理函数,工作线程如何向WINFORM发送消息等内容
1.托管C++中使用WIN32API函数
如使用 ::FindWindow(),PostMessage()函数为例
需要在工程的stdafx.h中加入如下几条语句:(对于非托管的头文件引用,以及lib的连接,最好放在stdafx.h文件中)
#include <vcclr.h>//PtrToStringChars的定义
#include <Windows.h>
#include "WinUser.h"
#pragma comment(lib,"user32.lib");//用于使用FindWindow(),PostMessage()两个函数
2.在文件头自定义消息
#define WM_RECEIVE_DATA_SUCCESS (WM_USER+100)
3.重载FORM的WinProc函数,用于处理消息
在你的FORM类中,如在窗体类public ref class DispatchMainForm : public System::Windows::Forms::Form的定义中增加:
protected:
virtual void WndProc( Message% m ) override
{
switch ( m.Msg )
{
case WM_RECEIVE_DATA_SUCCESS:
//...
break;
}
Form::WndProc( m );
}
4.在窗体中任一按钮事件中增加测试用的发送消息代码:
String ^s3 = gcnew String(this->Text);
pin_ptr<const wchar_t> str1 = PtrToStringChars(s3);
HWND hn= FindWindow(NULL,str1);
PostMessage(hn,WM_RECEIVE_DATA_SUCCESS,NULL,NULL);
5. 托管 String ^指针转为 char * 指针
String ^ pStr = "Hello World!";
char* pChars = (char*)Marshal::StringToHGlobalAnsi(pStr).ToPointer();
//使用pChars
Marshal::FreeHGlobal((IntPtr)pChars);
不好意思,刚才提交的时候,网站出错了,内容全没了,所以写得比较精简,如果对你有帮助,不仿"顶"一下,呵呵 ,,,,
(原创作品,转载请注明出错,谢谢)
Ivan 2009-11-3 22:42 于冰城