MFC中关于自定义消息

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MFC中关于自定义消息相关的知识,希望对你有一定的参考价值。

大家好,我是VC初学者,出现了个问题,望各位大侠帮忙?
我在单文档的视类的构造函数中,创建了一个线程, 我做了一个简单测试,发现不行:

这是线程函数如下:
DWORD WINAPI CMyView::FunProS1(LPVOID lpParameter)

HWND hWnd = (HWND)lpParameter;
while (true)

::PostMessage(hWnd,WM_RECE ,12, 0);
// ::MessageBox(hWnd,"ok","ok",MB_OK);

return 0;


然后我在VIEW类的.h中加入了解#define WM_RECE WM_USER+100
然后在
//AFX_MSG(CMyView)
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
//AFX_MSG
afx_msg void OnReceive(WPARAM wParam,LPARAM lParam); //我自己加的函数声明。
DECLARE_MESSAGE_MAP()

然后加消息映射:
BEGIN_MESSAGE_MAP(CMyView, CView)
//AFX_MSG_MAP(CMyView)
ON_WM_CREATE()
//AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
ON_MESSAGE(WM_RECE, OnReceive) //我自己加的
END_MESSAGE_MAP()

然后编写函数:
VOID CMyView::OnReceive(WPARAM wParam, LPARAM lParam)

MessageBox("yes");

编译,链接后,运行起来,没有这个MessageBox"yes";

但是如果我在线程函数中加个MessageBox(hWnd,"**");却能显示,表明,这个线程确实运行了,但是却无法把这个消息投递到主进程的视类上来,这是为什么?

参考技术A 楼上正解。请贴出你的CreateThread或AfxBeginThread的代码。
其它地方的代码基本上都没有问题,注意一点,自定义消息函数一般返回LRESULT,这样比较规范。
参考技术B 检查你的HANDLE WINAPI CreateThread(
__in LPSECURITY_ATTRIBUTES lpThreadAttributes,
__in SIZE_T dwStackSize,
__in LPTHREAD_START_ROUTINE lpStartAddress,
__in LPVOID lpParameter,
__in DWORD dwCreationFlags,
__out LPDWORD lpThreadId
);

函数的第4个参数,是否是你的MyView句柄。
或者在你的线程函数中确认hWnd是MyView的句柄。本回答被提问者采纳

以上是关于MFC中关于自定义消息的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot 中关于自定义异常处理的套路!

VB 中关于自定义对话框Dialog 的问题……

MFC 自定义消息(非系统消息)

IO中关于自定义缓冲区和使用默认缓冲区哪个效率更高的对比

MFC的自定义消息的定义与使用

MFC中用户自定义类响应自定义消息