近来学习MFC框架,参照的书籍是:MFC windows程序设计,有些年头的书了。
之前把这本书浏览式的看了一遍,然后第二遍跟着书中的实例,敲点代码。
这不,第一个MFC程序,没有使用向导生成。
Hello.h
//2012-11-26 raoqh
//声明一个类继承CWinApp
class CMyApp:public CWinApp
{
public:
virtual BOOL InitInstance();//重写初始化函数
};
//声明主窗口继承自CFrameWnd
class CMainWindow:public CFrameWnd
{
public:
CMainWindow();
protected:
afx_msg void OnPaint();//消息处理函数,重画
DECLARE_MESSAGE_MAP()//声明消息队列
};
Hello.cpp
CMainWindow::CMainWindow()
{
Create(NULL,_T("The Hello Application"));
}
//消息处理函数
void CMainWindow::OnPaint()
{
CPaintDC dc(this);
CRect rect;
GetClientRect(&rect);
dc.DrawText(_T("Hello,MFC"),-1,&rect,DT_SINGLELINE | DT_CENTER | DT_VCENTER);
}
*****************************************************************************
然而这个简单的程序出现了两个问题。
/*
:fatal error C1189: #error : Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]
:出现该错误是告诉我们当前程序需要连接库的,或者叫做外接库。而当前程序是不需要的,因此报错。
:解决办法是项目->属性->配置属性->常规->MFC的使用,改为“在共享 DLL 中使用 MFC”
*/
/*
:“fatal error LNK1561: 必须定义入口点”解决方法
:出现该错误解决办法是:项目->属性->连接器->高级->入口点,加上WinMainCRTStartup
:出错的原因是程序没有找到入口点,而MFC中入口点被封装成其他函数,比如上面的WinMainCRTStartup 或者 wWinMainCRTStartup
这两个函数式不同的字符编码平台下所不同的。
当使用的是Unicode编码方式时,程序入口点是wWinMainCRTStartup。
当使用的是多字节编码方式时,程序的入口点是WinMainCRTStartup。
主要还是因为我们没有使用向导生成MFC程序,所以有些配置我们还不了解。
*/