学了MFC,但是觉得它的类太大,我好多都用不到,又因为学过API,所以决定写自己的框架,方便以后的开发。
刚开始我就写了两个类,CWnd和CWinApp,能运行,可是就我加上消息映射的时候出了问题,哎,郁闷中啊!
帮忙看看:(只给出消息映射部分)class CWnd;
typedef void (__thiscall CWnd::*AFX_PMSGPROC )(WPARAM,LPARAM);
struct AFX_MSGMAP_ENTRY
{
    UINT nMsg; 
    UINT nCode; 
    UINT nID; 
    UINT nLastID;
    AFX_PMSGPROC pfn; };
#define DECLARE_MESSAGE_MAP()\
public:\
static const AFX_MSGMAP_ENTRY messageEntries[];\#define BEGIN_MESSAGE_MAP(theClass)\
const AFX_MSGMAP_ENTRY theClass::messageEntries[] ={\
#define END_MESSAGE_MAP()\
{0, 0, 0, 0,(AFX_PMSGPROC)0}};\#define ON_WM_CREATE(func)\
   {WM_CREATE,0,0,0,(AFX_PMSGPROC)func},\
#define ON_WM_PAINT(func)\
   {WM_PAINT,0,0,0,(AFX_PMSGPROC)func},\class CWnd
{
public:
         ....
void OnCreate(WPARAM,LPARAM);
void OnPaint(WPARAM,LPARAM);
DECLARE_MESSAGE_MAP()
};
//Win.CPP
BEGIN_MESSAGE_MAP(CWnd)
ON_WM_CREATE(&CWnd::OnCreate)
ON_WM_PAINT(&CWnd::OnPaint)
END_MESSAGE_MAP()
//MessageMapvoid CWnd::OnCreate(WPARAM wParam,LPARAM lParam)
{

}
void CWnd::OnPaint(WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
hdc=::BeginPaint(m_hWnd,&ps);
::TextOut(hdc,20,0,"Hello,World!",12);
::EndPaint(m_hWnd,&ps);
}
这里是比着MFC做的,但是有的地方简化了.
我用的是VC2005,错误是这样的:
f:\green project\软件开发\vs2005\winclass\afxdef.h(36) : error C2162: 应输入宏形参
1>f:\green project\软件开发\vs2005\winclass\win.cpp(83) : error C2065: “define”: 未声明的标识符
1>f:\green project\软件开发\vs2005\winclass\win.cpp(83) : error C2146: 语法错误 : 缺少“}”(在标识符“ON_WM_PAINT”的前面)
1>f:\green project\软件开发\vs2005\winclass\win.cpp(83) : error C2146: 语法错误 : 缺少“;”(在标识符“ON_WM_PAINT”的前面)
1>f:\green project\软件开发\vs2005\winclass\win.cpp(83) : error C2448: “ON_WM_PAINT”: 函数样式初始值设定项类似函数定义
1>f:\green project\软件开发\vs2005\winclass\win.cpp(83) : error C2059: 语法错误 : “,”
1>f:\green project\软件开发\vs2005\winclass\win.cpp(85) : error C2143: 语法错误 : 缺少“;”(在“{”的前面)
1>f:\green project\软件开发\vs2005\winclass\win.cpp(85) : error C2447: “{”: 缺少函数标题(是否是老式的形式表?)
1>f:\green project\软件开发\vs2005\winclass\win.cpp(85) : error C2059: 语法错误 : “}”
1>生成日志保存在“file://f:\Green Project\软件开发\VS2005\WinClass\Debug\BuildLog.htm”汗...帮忙看下,头都晕了!

解决方案 »

  1.   

    还有哪位仁兄也在用VC++,API和MFC都行,留下QQ,加下好友以后讨论下,这样天天在这里问,分都没了!
    加我的也行:280978163;谢谢!
      

  2.   


    #define DECLARE_MESSAGE_MAP()\
    public:\
        static const AFX_MSGMAP_ENTRY messageEntries[];#define BEGIN_MESSAGE_MAP(theClass)\
        const AFX_MSGMAP_ENTRY theClass::messageEntries[] ={
    #define END_MESSAGE_MAP()\
    {0, 0, 0, 0,(AFX_PMSGPROC)0}};#define ON_WM_CREATE(func)\
               {WM_CREATE,0,0,0,(AFX_PMSGPROC)func},
    #define ON_WM_PAINT(func)\
               {WM_PAINT,0,0,0,(AFX_PMSGPROC)func},
    给你改了一下,你试一下。你的问题是定义时,多加了一些'\',这个用在宏定义时,是代表下面的一行跟这行同行的意思,你定义了五个宏,但按上面的写法,其实你只定义了一个宏,所以编译时会报错。