求助:自定义事件通信

这是wxWidgets论坛的中文版本。在这里,您可以用您的母语汉语讨论上面任一子论坛所涉及的所有关于wxWidgets的话题。欢迎大家参与到对有价值的帖子的中英互译工作中来!
Post Reply
dalixux
In need of some credit
In need of some credit
Posts: 5
Joined: Sat Sep 25, 2010 9:21 am

求助:自定义事件通信

Post by dalixux »

问个 进程间通信的问题
我的一个DLL 在另一个进程中 通过自定义的消息 直接使用PostMessage发送给
我的主程序 主程序用wxWidgets的话 如何自定义消息

以前使用的方法是 向框架frame发送 按键消息
有没有更好的方法
kingkamg
I live to help wx-kind
I live to help wx-kind
Posts: 187
Joined: Tue Apr 08, 2008 1:45 pm

Post by kingkamg »

Code: Select all

BEGIN_DECLARE_EVENT_TYPES()
	DECLARE_EVENT_TYPE(wxEVT_CUSBUT_RANGE, -1)
	DECLARE_EVENT_TYPE(wxEVT_CUSBUT, -1)
END_DECLARE_EVENT_TYPES()

#define EVT_RADIOBUT_RANGE(id1, id2, func) \
	DECLARE_EVENT_TABLE_ENTRY( \
	wxEVT_CUSBUT_RANGE, id1, id2, \
	wxCommandEventHandler(func), \
	(wxObject *) NULL \
	),

#define EVT_RADIOBUT(id, func) \
	DECLARE_EVENT_TABLE_ENTRY( \
	wxEVT_CUSBUT, id, wxID_ANY, \
	wxCommandEventHandler(func), \
	(wxObject *) NULL \
	),
Satervalley
Knows some wx things
Knows some wx things
Posts: 47
Joined: Fri Dec 14, 2007 1:10 am

Post by Satervalley »

wxWidgets 定义了几个跨进程通讯类,请参阅 wxServer, wxClient, wxConnection等,是跨平台的。或使用 boost 里的 跨进程 库。
dalixux
In need of some credit
In need of some credit
Posts: 5
Joined: Sat Sep 25, 2010 9:21 am

Post by dalixux »

谢谢
跨进程通信 打算用共享内存自己实现了

最初整个程序是用wxpython+C扩展做的
但是发现 某些场合下 效率不够 所以才想学习wxWidgets 用C++直接写了

当时采用的方法是 用frame只有panel一个子窗口时 frame被覆盖了
在frame上注册一个 按键消息 这样直接用PostMessage 向frame发送按键消息

wxWidgets由于不是很熟 现在的问题就是PostMessage需要用消息ID
自定义事件时 需要知道wxWidgets 事件处理时的消息ID与 windows SDK的消息ID之间的对应关系
dalixux
In need of some credit
In need of some credit
Posts: 5
Joined: Sat Sep 25, 2010 9:21 am

Post by dalixux »

比如
PostMessage(hwnd_frame, WM_USER + 0x100, NULL, NULL)
WM_USER+0X100在自定义事件里怎么用 才能使得 发送这个消息ID时
frame 会调用对应的事件处理
dalixux
In need of some credit
In need of some credit
Posts: 5
Joined: Sat Sep 25, 2010 9:21 am

Post by dalixux »

抱歉 刚刚搜索 好像wxWidgets 里也有 WM_USER定义 不知道跟windows SDK里的定义是不是一样
这里
PostMessage里用的WM_USER 指的是 windows SDK里的WM_USER
Satervalley
Knows some wx things
Knows some wx things
Posts: 47
Joined: Fri Dec 14, 2007 1:10 am

Post by Satervalley »

可以查看下代码看看在 wxMSW 下,wxWidgets 的user messsage id 是怎么实现的,然后写一些平台相关代码了。用 message 跨进程通讯不是很效率和可靠,而且只能传递两个简单数据。win 下专门有个 message,跨进程通讯的,好像是什么 user data 消息,好像内部通过共享内存传递多些数据,tray icon 好像就和这个消息有关。
还是建议用内置的平台无关类。
dalixux
In need of some credit
In need of some credit
Posts: 5
Joined: Sat Sep 25, 2010 9:21 am

Post by dalixux »

windows 有个WM_COPY消息通过剪切板 传递数据
我不需要用消息传递数据 只需要通知 另1个进程 共享内存中有数据就行了
实在不行 还是用老方法 了
Post Reply