读书人

消息映射表的有关问题

发布时间: 2012-11-13 10:00:50 作者: rapoo

消息映射表的问题
各位帅哥靓女行行好,帮帮我这个菜鸟吧,第一次用mfc,从书上抄了一段代码就是有问题
一会儿是messageID标识符未定义,一会又来个sizeof错误

//定义宏
#include<windows.h>

HINSTANCE hInst;
HWND hWnd;
MSG msg;
char lpszClassName[]="窗口";
char *ShowText;

#define DECLARE_MESSAGE_MAP()\//声明消息映射表的宏
struct MSGMAP_ENTRY _messageEntres[];\

#define BEGIN_MESSAGE_MAP()\//消息映射表的开始宏
struct MSGMAP_ENTRY _messageEntres[]=\
{\

#define ON_WM(messageID,msgFuc)\//填写映射表的宏
messageID,msgFuc,
#define END_MESSAGE_MAP()\//消息映射表的结束宏
};\

//定义消息映射表项结构******************************************
struct MSGMAP_ENTRY
{
UINT nMessage;
void (*pfn)(HWND,UINT,WPARAM,LPARAM);
};

//声明消息处理函数原型*****************************************
void On_LButtonDown(HWND,UINT,WPARAM,LPARAM);
void On_Paint(HWND,UINT,WPARAM,LPARAM);
void On_Destroy(HWND,UINT,WPARAM,LPARAM);

//声明消息映射表***********************************************
DECLARE_MESSAGE_MAP()

//实现消息映射表***********************************************
BEGIN_MESSAGE_MAP()
ON_WM(WM_LBUTTONDOWN,On_LButtonDown)
ON_WM(WM_PAINT,On_Paint)
ON_WM(WM_DESTROY,On_Destroy)
END_MESSAGE_MAP()

//窗口函数******************************************************
LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
int n=sizeof(_messageEntres)/sizeof(_messageEntres[0]);
int i;
for(i=0;i<n;i++)
{
if(message==_messageEntres[i].nMessage)
(*_messageEntres[i]..pfn)(hWnd,message,wParam,lParam);
}
return DefWindowProc(hWnd,message,wParam,lParam);
}
//鼠标左键单击消息处理函数的实现******************************************************************
void On_LButtonDown(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
ShowText="Hello !";
InvalidateRect(hWnd,NULL,1);
}
//重绘窗口用户区消息处理函数的实现**************************************************************
void On_Paint(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hdc;
hdc=BeginPaint(hWnd,&ps);
TextOut(hdc,50,50,ShowText,6);
EndPaint(hWnd,&ps);
}
//销毁窗口消息处理函数的实现************************************************************************
void On_Destroy(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
PostQuitMessage(0);
}

ATOM MyRegisterClass(HINSTANCE hInstance);//注册窗口函数
BOOL Create(HINSTANCE,int);//程序实例初始化函数
int Run();//消息循环函数

int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
MyRegisterClass(hInstance);
Create(hInstance,nCmdShow);
ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);
return Run();
}

//注册窗口函数的实现
ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASS wc;
wc.style=0;
wc.lpfnWndProc=WndProc;
wc.cbClsExtra=0;
wc.cbWndExtra=0;
wc.hInstance=hInstance;
wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wc.hCursor=LoadCursor(NULL,IDC_ARROW);
wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wc.lpszMenuName=NULL;
wc.lpszClassName=lpszClassName;
return RegisterClass(&wc);
}

//创建窗口函数的实现
BOOL Create(HINSTANCE hInstance,int nCmdShow)
{
hWnd=CreateWindow(lpszClassName,
"Windows",
WS_OVERLAPPEDWINDOW,
400,300,180,160,
NULL,
NULL,
hInstance,
NULL);
return TRUE;
}

//消息循环函数的实现
int Run()
{
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}

1>------ 已启动生成: 项目: eg1-2 api2, 配置: Debug Win32 ------
1>生成启动时间为 2010/8/11 17:15:39。
1>ClCompile:


1> api2.cpp
1>d:\作业\vs2010\1-2 api2\api2.cpp(18): error C2065: “messageID”: 未声明的标识符
1>d:\作业\vs2010\1-2 api2\api2.cpp(18): error C2079: “_messageEntres”使用未定义的 struct“_messageEntres”
1>d:\作业\vs2010\1-2 api2\api2.cpp(18): error C2078: 初始值设定项太多
1>d:\作业\vs2010\1-2 api2\api2.cpp(18): error C2065: “msgFuc”: 未声明的标识符
1>d:\作业\vs2010\1-2 api2\api2.cpp(35): error C2017: 非法的转义序列
1>d:\作业\vs2010\1-2 api2\api2.cpp(38): error C2017: 非法的转义序列
1>d:\作业\vs2010\1-2 api2\api2.cpp(39): error C2017: 非法的转义序列
1>d:\作业\vs2010\1-2 api2\api2.cpp(40): error C2017: 非法的转义序列
1>d:\作业\vs2010\1-2 api2\api2.cpp(41): error C2017: 非法的转义序列
1>d:\作业\vs2010\1-2 api2\api2.cpp(42): error C2017: 非法的转义序列
1>d:\作业\vs2010\1-2 api2\api2.cpp(47): error C2070: “MSGMAP_ENTRY []”: 非法的 sizeof 操作数
1>d:\作业\vs2010\1-2 api2\api2.cpp(49): error C2143: 语法错误 : 缺少“)”(在“;”的前面)
1>d:\作业\vs2010\1-2 api2\api2.cpp(49): error C2143: 语法错误 : 缺少“;”(在“)”的前面)
1>d:\作业\vs2010\1-2 api2\api2.cpp(49): error C2143: 语法错误 : 缺少“;”(在“)”的前面)
1>d:\作业\vs2010\1-2 api2\api2.cpp(49): error C2065: “n”: 未声明的标识符
1>d:\作业\vs2010\1-2 api2\api2.cpp(49): error C2059: 语法错误:“)”
1>d:\作业\vs2010\1-2 api2\api2.cpp(50): error C2143: 语法错误 : 缺少“;”(在“{”的前面)
1>d:\作业\vs2010\1-2 api2\api2.cpp(51): error C2065: “message”: 未声明的标识符
1>d:\作业\vs2010\1-2 api2\api2.cpp(52): error C2059: 语法错误:“.”
1>d:\作业\vs2010\1-2 api2\api2.cpp(53): fatal error C1903: 无法从以前的错误中恢复;正在停止编译
1>
1>生成失败。
1>
1>已用时间 00:00:01.51
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========


[解决办法]
到这里看看
http://topic.csdn.net/u/20100123/02/184f1edd-6528-4c67-b3cc-bb993e5e4998.html

读书人网 >C++

热点推荐