如何从Win32环境编写MFC程序?

不久前,有网友发了一个帖子:书上例子也有错?其中主要表达的是书上给出的不是从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,窗口无法保留----->这是没有该语句窗口将一闪而过的原因!

有问题,欢迎给我留言!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值