关于mfc深入浅出的一个例子Hello mfc

xiandao82 2006-11-29 10:44:59
资源文件:
HELLO.rc

// Microsoft Visual C++ 生成的资源脚本。
//
#include "resource.h"

#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// 从 TEXTINCLUDE 2 资源生成。
//
#include "afxres.h"

/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS

/////////////////////////////////////////////////////////////////////////////
// 英语(美国)资源

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
LANGUAGE 4, 2
#pragma code_page(936)

#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//

1 TEXTINCLUDE
BEGIN
"resource.h\0"
END

2 TEXTINCLUDE
BEGIN
"#include ""afxres.h""\r\n"
"\0"
END

3 TEXTINCLUDE
BEGIN
"\r\n"
"\0"
END

#endif // APSTUDIO_INVOKED

#endif // 英语(美国)资源
/////////////////////////////////////////////////////////////////////////////



#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// 从 TEXTINCLUDE 3 资源生成。
//


/////////////////////////////////////////////////////////////////////////////
#endif // 不是 APSTUDIO_INVOKED

JJHouRIcon ICON DISCARDABLE "JJHOUR.ICO"
AFX_IDI_STD_FRAME ICON DISCARDABLE "JJHOUR.ICO"

MainMenu MENU DISCARDABLE
{
POPUP "&Help"
{
MENUITEM "&ABOUT...",IDM_ABOUT
}
}

AboutBox DIALOG DISCARDABLE 34,22,147,55
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "About Hello"
{
ICON "JJHouRIcon",IDC_STATIC,11,17,18,20
LTEXT "Hello MFC 4.0",IDC_STATIC,40,10,52,8
LTEXT "Copyright 1996",IDC_STATIC,40,25,100,8
LTEXT "J.J.Hour",IDC_STATIC,40,40,100,8
DEFPUSHBUTTON "OK",IDOK,105,7,32,14,WS_GROUP
}

resource.h

//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by HELLO.rc

// 新对象的下一些默认值
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 101
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1001
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif

#define IDM_ABOUT 100

STDAFX.h

#include <afxwin.h>


STDAFX.cpp

#include "stdafx.h"

HELLO.h

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


class CMyFrameWnd:public CFrameWnd
{
public:
CMyFrameWnd();
afx_msg void OnPaint();
afx_msg void OnAbout();
private:
DECARE_MESSAGE_MAP();
static VOID CALLBACK LineDDACallback(int,int,LPARAM);
};

HELLO.cpp

#include "Stdafx.h"
#include "Hello.h"
#include "Resource.h"

CMyWinApp theApp;

BOOL CMyWinApp::InitInstance()
{
m_pMainWnd=new CMyFrameWnd();
m_pMainWnd->ShowWindow(m_nCmdShow);
m_pMainWnd->UpdateWindow();
return TRUE;
}

CMyFrameWnd::CMyFrameWnd()
{
Create(NULL,"Hello MFC",WS_OVERLAPPEDWINDOW,rectDefault,NULL,"MainMenu");
}

BEGIN_MESSAGE_MAP(CMyFrameWnd,CFrameWnd)
ON_COMMAND(IDM_ABOUT,OnAbout)
ON_WM_PAINT()
END_MESSAGE_MAP()

void CMyFrameWnd::OnPaint()
{
CPaintDC dc(this);
CRect rect;
GetClientRect(rect);
dc.SetTextAlign(TA_BOTTOM|TA_CENTER);
::LineDDA(rect.right/2,0,rect.right/2,rect.bottom/2,(LINEDDAPROC)LineDDACallback,(LPARAM)(LPVOID)&dc);

}

VOID CALLBACK CMyFrameWnd::LineDDACallback(int x,int y,LPARAM lpdc)
{
static char szText[]="Hello,MFC";
((CDC*)lpdc)->TextOut(x,y,szText,sizeof(szText)-1);
for(int i=1;i<50000;i++);
}

void CMyFrameWnd::OnAbout()
{
CDialog about("AboutBox",this);
about.DoModal();
}


以上是全部代码,我照着书上打的.
编译提示我:

WINVER not defined. Defaulting to 0x0501 (Windows XP and Windows .NET Server)
e:\2006\vc\HelloWorld\HELLO.h(17) : warning C4183: “DECARE_MESSAGE_MAP”: 缺少返回类型;假定为返回“int”的成员函数
e:\2006\vc\HelloWorld\HELLO.cpp(20) : error C2509: “GetMessageMap” : 成员函数没有在“CMyFrameWnd”中声明
e:\2006\vc\HelloWorld\HELLO.h(10) : 参见“CMyFrameWnd”的声明
e:\2006\vc\HelloWorld\HELLO.cpp(20) : warning C4356: “CFrameWnd::messageMap” : 静态数据成员无法通过派生类初始化
e:\2006\vc\HelloWorld\HELLO.cpp(20) : warning C4356: “CFrameWnd::_messageEntries” : 静态数据成员无法通过派生类初始化

请各位帮忙..
...全文
259 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiandao82 2006-11-29
  • 打赏
  • 举报
回复
除了多了分号其他的都正常我用的编译环境是vs2003
一分之千 2006-11-29
  • 打赏
  • 举报
回复
HELLO.h

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


class CMyFrameWnd:public CFrameWnd
{
public:
CMyFrameWnd();
afx_msg void OnPaint();
afx_msg void OnAbout();
private:
DECARE_MESSAGE_MAP();//此处分号去掉 试试
static VOID CALLBACK LineDDACallback(int,int,LPARAM);//void 改为int CPP里相应改变
};
==================================
你自习对照一下原文 肯定打错不少地方。
如果原文跟你打的一样的话干脆换本书了,这书错误太多了!!
xiandao82 2006-11-29
  • 打赏
  • 举报
回复
去掉分号?提示如下错误

WINVER not defined. Defaulting to 0x0501 (Windows XP and Windows .NET Server)
e:\2006\vc\HelloWorld\HELLO.h(19) : warning C4518: “static void ” : 此处遇到意外的存储类或类型说明符;被忽略
e:\2006\vc\HelloWorld\HELLO.h(19) : error C2143: 语法错误 : 缺少“;”(在“__stdcall”的前面)
e:\2006\vc\HelloWorld\HELLO.h(19) : warning C4183: “DECARE_MESSAGE_MAP”: 缺少返回类型;假定为返回“int”的成员函数
e:\2006\vc\HelloWorld\HELLO.h(19) : warning C4183: “LineDDACallback”: 缺少返回类型;假定为返回“int”的成员函数
e:\2006\vc\HelloWorld\HELLO.cpp(21) : error C2509: “GetMessageMap” : 成员函数没有在“CMyFrameWnd”中声明
e:\2006\vc\HelloWorld\HELLO.h(11) : 参见“CMyFrameWnd”的声明
e:\2006\vc\HelloWorld\HELLO.cpp(21) : warning C4356: “CFrameWnd::messageMap” : 静态数据成员无法通过派生类初始化
e:\2006\vc\HelloWorld\HELLO.cpp(21) : warning C4356: “CFrameWnd::_messageEntries” : 静态数据成员无法通过派生类初始化
e:\2006\vc\HelloWorld\HELLO.cpp(32) : error C2440: “类型转换” : 无法从“overloaded-function”转换为“LINEDDAPROC”
在匹配目标类型的范围内没有具有该名称的函数
e:\2006\vc\HelloWorld\HELLO.cpp(37) : error C2556: “void CMyFrameWnd::LineDDACallback(int,int,LPARAM)” : 重载函数与“ int CMyFrameWnd::LineDDACallback(int,int,LPARAM)”只是在返回类型上不同
e:\2006\vc\HelloWorld\HELLO.h(19) : 参见“CMyFrameWnd::LineDDACallback”的声明
e:\2006\vc\HelloWorld\HELLO.cpp(37) : error C2371: “CMyFrameWnd::LineDDACallback” : 重定义;不同的基类型
e:\2006\vc\HelloWorld\HELLO.h(19) : 参见“CMyFrameWnd::LineDDACallback”的声明

#include <afxwin.h>嵌在哪个文件中?
王国凡 2006-11-29
  • 打赏
  • 举报
回复
后面的问题 #include <afxwin.h> 就好了吧.
王国凡 2006-11-29
  • 打赏
  • 举报
回复
>e:\2006\vc\HelloWorld\HELLO.h(17) : warning C4183: “DECARE_MESSAGE_MAP”:
>缺少返回类型;假定为返回“int”的成员函数
-----------------------------
文件中的 DECARE_MESSAGE_MAP(); 不需要分号, 即为 DECARE_MESSAGE_MAP()

16,467

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

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

试试用AI创作助手写篇文章吧