关于sendMessage和PostMessage的问题

wumin940590725 2015-03-23 11:37:51
我在Cwnd为基类的类中,调用GetSafeHwnd获取了HWND的句柄
然后我在一个线程中调用sendMessage,发现这个句柄没有任何意义,消息没有传到我自定义的消息函数,请问有人知道这个怎么改吗?
我在CDialog里面是成功的,但是在这里却不对,好奇怪啊
a.h
class a : public CWnd
{
DECLARE_DYNAMIC(a)
a.cpp
IMPLEMENT_DYNAMIC(a, CWnd)
BEGIN_MESSAGE_MAP(a, CWnd)
ON_MESSAGE(WM_GETMESSAGE,getTheData)
END_MESSAGE_MAP()
...全文
175 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
wumin940590725 2015-03-25
  • 打赏
  • 举报
回复
正确答案如10楼所示,需要创建窗体,cwnd是父类,但是不管理自定义消息
wumin940590725 2015-03-23
  • 打赏
  • 举报
回复
引用 4 楼 jason_wentzel 的回复:
这个是调用的函数,按这种写法在cdialog里面获取到的hwnd传消息是没问题的,但是这个里面的就出错了,不知道为什么
wumin940590725 2015-03-23
  • 打赏
  • 举报
回复
引用 4 楼 jason_wentzel 的回复:

这个我获取后是通过getCaptureCardData传递的句柄,然后我在线程的类里面用全局变量接到这个句柄,然后在这个类里面使用了sendMessage
孤客天涯 2015-03-23
  • 打赏
  • 举报
回复
引用 2 楼 wumin940590725 的回复:
[quote=引用 1 楼 jason_wentzel 的回复:] PostMessage和SendMessage需要一个窗口句柄,你要把窗口句柄传给线程, 在线程中你是怎么调用的?
hwnd=GetSafeHwnd(); SendMessage(hwnd,WM_GETMESSAGE,0,0);[/quote] 线程是没有窗口的,你在线程中调用GetSafeHwnd你获取谁的句柄?你得把主程序的窗口指针或句柄以参数方式传给线程 // 例如 DWORD ThreadFun(LPVOID pParam) { CWnd *pWnd = (CWnd*)pParam; pWnd ->PostMessage(...); return 0; }
wumin940590725 2015-03-23
  • 打赏
  • 举报
回复
引用 1 楼 jason_wentzel 的回复:
PostMessage和SendMessage需要一个窗口句柄,你要把窗口句柄传给线程,
在线程中你是怎么调用的?

这个是用cwnd做为基类的,如果我直接用cdialog做为基类就没有问题,奇怪。当然这两个基类我是直接vs默认创建的
wumin940590725 2015-03-23
  • 打赏
  • 举报
回复
引用 1 楼 jason_wentzel 的回复:
PostMessage和SendMessage需要一个窗口句柄,你要把窗口句柄传给线程, 在线程中你是怎么调用的?
hwnd=GetSafeHwnd(); SendMessage(hwnd,WM_GETMESSAGE,0,0);
孤客天涯 2015-03-23
  • 打赏
  • 举报
回复
PostMessage和SendMessage需要一个窗口句柄,你要把窗口句柄传给线程, 在线程中你是怎么调用的?
赵4老师 2015-03-23
  • 打赏
  • 举报
回复
赵4老师 2015-03-23
  • 打赏
  • 举报
回复
But in fact, I am NOT professional man,I just Ctrl+Ins and Shift+Ins so so.
wumin940590725 2015-03-23
  • 打赏
  • 举报
回复
引用 11 楼 zhao4zhong1 的回复:
Multiple Threads in the User Interface http://msdn.microsoft.com/zh-cn/library/ms810439.aspx
not Multiple threads problem,I only want to know why I can't get message from my code,maybe you don't see my problem,only think multiple threads is hard to understand and it's easy to have problem,so you show the webpage for me. but I must say please look my problem then tell me the answer or don't make you look like professional, thank you
赵4老师 2015-03-23
  • 打赏
  • 举报
回复
Multiple Threads in the User Interface http://msdn.microsoft.com/zh-cn/library/ms810439.aspx
wumin940590725 2015-03-23
  • 打赏
  • 举报
回复
CWnd::Create(NULL,"MyTestObject",WS_CHILD,CRect(0,0,0,0),::AfxGetMainWnd(),1234);创建窗体
wumin940590725 2015-03-23
  • 打赏
  • 举报
回复
a.cpp IMPLEMENT_DYNAMIC(transformData, CWnd) BEGIN_MESSAGE_MAP(transformData, CWnd) ON_MESSAGE(WM_GETMESSAGE,getTheData) END_MESSAGE_MAP() a.h DECLARE_DYNAMIC(transformData)
引用 7 楼 jason_wentzel 的回复:
wumin940590725 2015-03-23
  • 打赏
  • 举报
回复
引用 7 楼 jason_wentzel 的回复:
CWnd跟CDialog应该没关系,CDialog本来就是由CWnd派生的,如果你的窗口句柄是全局的,且在使用时该句柄是不为空的,应该就没什么问题,你看看你WM_GETMESSAGE是如何定义的?另外改成PostMessage试试
#define WM_GETMESSAGE WM_USER+114 //获取数据全局定义 改成postmessage依然没有效果
孤客天涯 2015-03-23
  • 打赏
  • 举报
回复
CWnd跟CDialog应该没关系,CDialog本来就是由CWnd派生的,如果你的窗口句柄是全局的,且在使用时该句柄是不为空的,应该就没什么问题,你看看你WM_GETMESSAGE是如何定义的?另外改成PostMessage试试

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧