PostMessage()给winform窗口发送信息
2015-11-17 15:24
816 查看
背景:在解决方案中,c++实现了一个通信DLL,通信某些的状态需要转发给上层的winform窗口,在界面通过图标显示状态.
解决方案:通过发送自定义windows消息,重写winform窗口处理消息的函数。
解决流程:
1.在DLL的头文件中自定义windows消息
2.在winform代码文件中定义消息
public const int USER = 0x0400;//用户自定义消息的开始数值
public const int IGNITIONON_MSG = USER+1;
public const int IGNITIONOFF_MSG = USER + 2;
public const int VCICONNECT_MSG = USER + 3;
public const int VCIDISCONNECT_MSG = USER + 4;
3.向dll中传递winform句柄
BlueTooth blue = BlueTooth.GetInstance(strVciName,this.Handle);
4.发送消息
PostMessage((HWND)pBlueTooth->m_Wnd, VCICONNECT_MSG, 0, 0);
5.重写winform窗口消息处理函数
解决方案:通过发送自定义windows消息,重写winform窗口处理消息的函数。
解决流程:
1.在DLL的头文件中自定义windows消息
#define IGNITIONON_MSG WM_USER + 1 #define IGNITIONOFF_MSG WM_USER + 2 #define VCICONNECT_MSG WM_USER+3 #define VCIDISCONNECT_MSG WM_USER+4
2.在winform代码文件中定义消息
public const int USER = 0x0400;//用户自定义消息的开始数值
public const int IGNITIONON_MSG = USER+1;
public const int IGNITIONOFF_MSG = USER + 2;
public const int VCICONNECT_MSG = USER + 3;
public const int VCIDISCONNECT_MSG = USER + 4;
3.向dll中传递winform句柄
BlueTooth blue = BlueTooth.GetInstance(strVciName,this.Handle);
static BlueTooth^ GetInstance(String^ strVciName,IntPtr Hwnd) { bool status=false; if (nullptr == Blue) { Blue = gcnew BlueTooth(); status=Blue->InitEngin(strVciName); } else { status = Blue->InitEngin(strVciName); } if (status) { Blue->m_Impl->SetWindow(Hwnd.ToInt32()); return Blue; } else { return nullptr; } }
4.发送消息
PostMessage((HWND)pBlueTooth->m_Wnd, VCICONNECT_MSG, 0, 0);
5.重写winform窗口消息处理函数
protected override void DefWndProc(ref System.Windows.Forms.Message m) { switch (m.Msg) { case IGNITIONON_MSG: { } break; case IGNITIONOFF_MSG: { } break; case VCICONNECT_MSG: { } break; case VCIDISCONNECT_MSG: { } break; default: base.DefWndProc(ref m); break; } }
相关文章推荐
- ng之自定义指令
- Unity加载prefab时调用脚本函数顺序和内存释放问题
- SAE服务下用java实现微信公众账号图灵机器人
- C#循环练习
- sicily 1107. Simple Puzzle
- test
- mat最新下载地址
- 安卓仿手机QQ消息BadgeView气泡跟随手指移动,并实现进出动画效果。
- apache 请求转发配置
- Qt核心剖析: moc
- hadoop常用命令
- td回撤之绝对回撤
- 深入解析LoadRunner下的参数化取值
- 如何停用AIX中System Director Agents进程
- 【hdu 2112】 HDU Today ( 最短路 Dijkstra)(map)
- gif压缩
- 安卓开发组件之TimePicker和DatePicker
- Sublime汉化破解中文乱码问题解决方法
- C++面试问题汇总
- 几个重要windows驱动函数分析