MFC中ON_MESSAGE调用自定义消息处理函数不能使用this指针还有重画函数InvalidateRect 函数代码如下

屏蔽处是错误相关的代码程序用的是WIN32修改写的,+MFC静态库WIN7系统别人的可以用我的就不能,在跑出库的时候消息里边应该存有当前类框架的指针的,进入消息处理函数的... 屏蔽处是错误相关的代码
程序用的是 WIN32 修改写的,+MFC静态库
WIN7系统
别人的可以用我的就不能,在跑出库的时候消息里边应该存有当前类框架的指针的,进入消息处理函数的时候用this指针调用w_hWnd 使用绘图InvalidateRect(this->m_hWnd,NULL,TRUE)函数不能绘制函数,这是一个错误,在类中声明两个变量,x,y 给他们写重载赋值函数后,在自定义的消息处理函数中不能使用x,y 说是没定义,什么意思?别人的就行我的就不行。求解!代码有点问题,我就不改了 直接贴上了,
代码功能,在新建的窗口中,打印一个字符串,实现在鼠标移动的过程中字符串跟随移动
#include "stdafx.h"
int x =100;
int y =100;
class CMyFrameWnd : public CFrameWnd
{
DECLARE_MESSAGE_MAP()
public:
LRESULT OnCreate(WPARAM wParam,LPARAM lParam);
LRESULT OnPaint(WPARAM wParam,LPARAM lParam);
LRESULT OnMove(WPARAM wParam,LPARAM lParam);
/*
int x;
int y;
CMyFrameWnd();
*/
};
/*
CMyFrameWnd::CMyFrameWnd()
{
x = 100;
y = 100;
}
*/
BEGIN_MESSAGE_MAP(CMyFrameWnd,CFrameWnd)
ON_MESSAGE(WM_CREATE,OnCreate)
ON_MESSAGE(WM_PAINT,OnPaint)
ON_MESSAGE(WM_MOUSEMOVE,OnMove)
END_MESSAGE_MAP()

LRESULT OnMove(WPARAM wParam,LPARAM lParam)
{
x = LOWORD(lParam);
y = HIWORD(lParam);
/* ::InvalidateRect(this->m_hWnd,NULL,TRUE);*/
return 0;
}

LRESULT CMyFrameWnd::OnPaint(WPARAM wParam,LPARAM lParam)
{
PAINTSTRUCT ps = {0};
HDC hdc = ::BeginPaint(m_hWnd,&ps);
::TextOut(hdc,x,y,"HELLO",5);
::EndPaint(m_hWnd,&ps);
return 0;
}
LRESULT CMyFrameWnd :: OnCreate(WPARAM wPAram,LPARAM lParam)
{
AfxMessageBox("CMyFrameWnd::OnCreate");
return 0;
}

class CMyWinApp : public CWinApp
{
public:
virtual BOOL InitInstance();
};

CMyWinApp theApp;

BOOL CMyWinApp :: InitInstance()
{
CMyFrameWnd *pFrame = new CMyFrameWnd();
pFrame->Create(NULL,"MFCMsg");
m_pMainWnd= pFrame;
pFrame->ShowWindow(SW_SHOW);
pFrame->UpdateWindow();
return TRUE;

}
展开
 我来答
百度网友bab7c74
2013-11-19 · TA获得超过126个赞
知道答主
回答量:125
采纳率:100%
帮助的人:111万
展开全部
关于这个问题,以前我也回答过一位朋友了,这说明你对MFC对Windows消息的映射还不了解,消息分三种没有,但其中没有ON_MESSAGE的消息的,
1、标准的Windows消息(响应函数由IDE默认)定义响应函数格式为:ON_WM_XXX(),比如你例子中的ON_CREAT,这个是标准的Windows消息,在message map中建立映射时,只有写ON_WM_CREAT();那么系统默认ON_CREAT消息的响应函数是onCreat(),你只用去用就行,例如你派生类中的onPaint,onInitInstance等都是标准的Windows消息
2、COMMAD消息(一般的菜单栏,工具栏的),在message map中声明为
ON_COMMADN(ID_XXX,func);
3、notification消息,比如按钮之类的,,声明为
ON_BNCLICKED(ID_XXX,func)
追问
虽然答 的汗多 但是不是我要的答案,还是谢谢你
闲来无事id
推荐于2016-07-10 · TA获得超过108个赞
知道答主
回答量:71
采纳率:0%
帮助的人:79.7万
展开全部
应该是CMyFrameWnd::OnMove

LRESULT CMyFrameWnd::OnMove(WPARAM wParam,LPARAM lParam)
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式