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,"**");却能显示,表明,这个线程确实运行了,但是却无法把这个消息投递到主进程的视类上来,这是为什么?
其它地方的代码基本上都没有问题,注意一点,自定义消息函数一般返回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中关于自定义消息的主要内容,如果未能解决你的问题,请参考以下文章