不久前,有网友发了一个帖子:书上例子也有错?其中主要表达的是书上给出的不是从AppWizard直接生成,而是自己编写的一个简单的MFC程序例子.我把那个例子摘录如下:
#include <afxwin.h>
class CMyWnd:public CFrameWnd
{
private:
char * ShowText;
public:
afx_msg void OnPaint();
afx_msg void OnLButtonDown();
DECLARE_MESSAGE_MAP()
};
BEGIN_MESSAGE_MAP(CMyWnd,CFrameWnd)
ON_WM_PAINT()
ON_WM_LBUTTONDOWN()
END_MESSAGE_MAP()
void CMyWnd::OnPaint()
{
CPaintDC dc(this);
dc.TextOut(20,20,ShowText);
}
void CMyWnd::OnLButtonDown()
{
ShowText="有消息隐射表的程序";
InvalidateRect(NULL,TRUE);
}
class CMyApp:: public CWinApp
{
public:
BOOL InitInstance();
};
BOOL CMyApp::InitInstance()
{
CMyWnd * pMainWnd= new CMyWnd;
pMainWnd->Create(0,"MFC");
pMainWnd->ShowWindow(m_nCmdShow);
pMainWnd->UpdateWindow();
pMainWnd=pMainWnd;
return TRUE;
}
CMyApp MyApp;
应该说,这个程序中有些细微的打印错误,例如:派生类不能用::等.这里先不管,问题是如何从Win32 Application的Empty File环境得到MFC的程序? 如何与其内部封装的代码联系起来?
其奥妙原来在这里!
1. 首先建立一个Win32的Empty file,例如取名为test-----> 生成test工程空间;
2. 在工程菜单下点击"设置/settings"子菜单,弹出相应的对话框,在标签为general内标为MFC的下拉列表框中选"use MFC in a shared DLL"或"use MFC in a static library"即可.
将上述代码复制到相应的.cpp文件,修改其中句法错误,编译,连接成功.
正确的代码,如下:
#include <afxwin.h>
class CMyWnd:public CFrameWnd
{
private:
char * ShowText;
public:
afx_msg void OnPaint();
afx_msg void OnLButtonDown();
DECLARE_MESSAGE_MAP()
};
BEGIN_MESSAGE_MAP(CMyWnd,CFrameWnd)
ON_WM_PAINT()
ON_WM_LBUTTONDOWN()
END_MESSAGE_MAP()
void CMyWnd::OnPaint()
{
CPaintDC dc(this);
dc.TextOut(20,20,ShowText);
}
void CMyWnd::OnLButtonDown()
{
ShowText="有消息隐射表的程序";
InvalidateRect(NULL,TRUE);
}
class CMyApp:public CWinApp
{
public:
BOOL InitInstance();
};
BOOL CMyApp::InitInstance()
{
CMyWnd * pMainWnd= new CMyWnd;
pMainWnd->Create(0,"MFC");
pMainWnd->ShowWindow(m_nCmdShow);
pMainWnd->UpdateWindow();
m_pMainWnd=pMainWnd;
return TRUE;
}
CMyApp MyApp;
其中:1.m_pMainWnd为CWnd类的窗口指针,pMainWnd是派生类窗口指针;2.m_pMainWnd为全局变量,而pMainWnd则是局部变量3.因此,如果不把pMainWnd传给m_pMainWnd,窗口无法保留----->这是没有该语句窗口将一闪而过的原因!
有问题,欢迎给我留言!