• 全部
  • VC综合技术
  • 互联网技术
  • MFC AppLauncher
  • .NET 技术
  • 界面
  • 进程
  • 算法
  • 硬件/系统
  • 数据库
  • VC++技术资源

简单的一个问题,请不要笑话我啊,我确实没看明白书上说的

沈阳人 2002-05-10 11:15:03
学习自定义消息中......
在SDI程序中,想通过发送自定义的消息来调用某个函数。
使用POSTMESSAGE()
可是总是使用不正确,编译都不过的
CMyView::fun1()
{
...
PostMessage(???); //怎么写参数
...
}

希望通过这个消息来调用CMyView::fun2(),fun2()已经定义为一个消息响应函数了

错误信息如下:
error C2352: 'CWnd::PostMessageA' : illegal call of non-static member function
c:\program files\microsoft visual studio\vc98\mfc\include\afxwin.h(2009) : see declaration of 'PostMessageA'
...全文
95 点赞 收藏 18
写回复
18 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
沈阳人 2002-05-13
to: lin1980(口水龙)
在.H中有这个消息定义,而且CLASSVIEW中也有这个函数
就是响应不了
进程之间的通信怎么这么难啊!

TO: harry202(harry)
这个是什么意思啊?
回复
lin1980 2002-05-11
afx_msg LRESULT OnFirstthreadcompleted(WPARAM wParam,LPARAM lParam);
是在.h文件中加的,看看你的classview里面有没有onfirst。。这个函数
回复
沈阳人 2002-05-11

在CMYVIEW.H中定义自己的消息
#define WM_FIRST_THREAD_MESSAGE (WM_USER+100)

在CMYVIEW.CPP中添加如下代码

ON_MESSAGE(WM_FIRST_THREAD_MESSAGE , OnFirstthreadcompleted)

afx_msg LRESULT OnFirstthreadcompleted(WPARAM wParam,LPARAM lParam);

LRESULT CUsermessageView::OnFirstthreadcompleted(WPARAM wParam,LPARAM lParam)
{
AfxMessageBox ("OK!!!");
return TRUE ;
}

int CUsermessageView::fun()
{
...
BOOL checkpostmessage = AfxGetMainWnd()->SendMessage ( WM_FIRST_THREAD_MESSAGE ,0 ,0 );
DWORD errorvalue = GetLastError() ;
...
}

就是接收不到自己发送过来的消息
回复
沈阳人 2002-05-11
谢谢口水龙和买柴火的小男孩
现在编译通过了
而且从返回值看发送也是成功的
但是我的消息响应函数怎么还没有执行呢?

我先看看是不是自定义消息的映射什么是否都正确
二位大侠也帮想想,都哪些地方可能出问题,给点提示

到时候可以把分数加上去来感谢二位的
回复
turboly 2002-05-11
guanzhu
回复
lin1980 2002-05-11
HWND mainwindow = AfxGetMainWnd()->GetSafeHwnd;
....
卖才火的方法也可以
回复
yu_hl 2002-05-11
AfxGetMainWnd()->PostMessage(WM_FIRST_THREAD_MESSAGE, 0, 0);
回复
沈阳人 2002-05-11
to: lin1980(口水龙)

BOOL checkpostmessage = ::PostMessage(NULL , WM_FIRST_THREAD_MESSAGE , 0 , 0 );
我使用上面的语句可以把消息发送成功
但是响应函数也进不去

使用
HWND mainwindow = (HWND)AfxGetMainWnd() ;
BOOL checkpostmessage = ::SendMessage(mainwindow , WM_FIRST_THREAD_MESSAGE , 0 , 0 );
编译出错的

有详细的讲解资料吗?
我现在没有弄清楚其中基本原理
所以很晕,详细讲讲,好吗
回复
lin1980 2002-05-11
用::SendMessage()注意"::"这个符号!
回复
沈阳人 2002-05-11
BOOL PostMessage(
HWND hWnd, // handle of destination window
UINT Msg, // message to post
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);

BOOL PostMessage( UINT message, WPARAM wParam = 0, LPARAM lParam = 0 );

二者有什么区别?怎么使用?我没搞明白这个两个的东西
以及相应的SendMessage也是有两种形式
回复
沈阳人 2002-05-11
怎么可以获得HWND hWnd?
这个是个窗口消息队列吧
是不是程序中所有类型的自定义消息都可以发送到这个消息队列当中去


有什么这方面的资料吗
最好是有比较好的例子
回复
沈阳人 2002-05-11
不论使用SENDMESSAGE还是POSTMESSAGE都出现
类似如下的错误提示信息:
error C2352: 'CWnd::SendMessageA' : illegal call of non-static member function
c:\program files\microsoft visual studio\vc98\mfc\include\afxwin.h(2008) : see declaration of 'SendMessageA'

什么意思?
我使用的语句是
BOOL checkpostmessage=SendMessage(WM_FIRST_THREAD_MESSAGE,0 ,0);
回复
lin1980 2002-05-11
发送到HWND hWnd所标志的窗口
回复
沈阳人 2002-05-11
消息发送出去了
但是发送到哪里了?
有什么方法可以看消息的发送队列什么的
现在只是知道发送出去了
但是不知道发送到哪里了?
回复
harry202 2002-05-11
#include "mainfrm.h"
((CMainFrame *)AfxGetMainWnd())->PostMessage(WM_FIRST_THREAD_MESSAGE, 0, 0);
回复
seasol 2002-05-10
要想通过消息调用本类中的函数,应该使用SendMessage,而不是PostMessage
回复
harry202 2002-05-10
::PostMessage
回复
zygapi 2002-05-10
BOOL PostMessage(
HWND hWnd, // handle to destination window
UINT Msg, // message
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);
回复
相关推荐
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2002-05-10 11:15
社区公告

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