手工写MFC应用程序
来源:互联网 发布:linux tomcat 日志 编辑:程序博客网 时间:2024/04/29 17:18
//Hello.h
class CmyApp : public CwinApp
{
public:
virtual BOOL InitInstance();
};
class CMainWindow : public CFrameWnd
{
public:
CMainWindow();
protected:
afx_msg void OnPaint();
DECLARE_MESSAGE_MAP()
};
//Hello.cpp
#include <afxwin.h>
#include "Hello.h"
CMyApp myApp;
// CMyApp member functions
BOOL CMyApp::InitInstance()
{
m_pMainWnd = new CMainWindow;
m_pMainWnd->ShowWindow(m_nCmdShow);
m_pMainWnd->UpdateWindow();
return TRUE;
}
// CMainWindow message map and member functions
BEGIN_MESSAGE_MAP(CMainWindow, CFrameWnd)
ON_WM_PAINT()
END_MESSAGE_MAP()
CMainWindow::CMainWindow()
{
Create(NULL, _T("The Hello Application"));
}
void CMainWindow::OnPaint()
{
CPaintDC dc(this);
CRect rect;
GetClientRect(&rect);
dc.DrawText(_T("Hello,World"), -1, &rect,
DT_SINGLELINE | DT_CENTER | DT_VCENTER);
}
应用程序对象
CWinApp:你可以从CWinApp类派生出自己的应用程序类,然后声明该类的全局应用程序对象,以便在应用程序开始时该对象便在内存中被实例化。应用程序对象提供了成员函数以初始化并运行你的应用程序。一般在从CwinApp派生出自己的应用程序类时,只需要覆盖InitInstance()成员函数即可。
InitInstance()函数
CwinApp::InitInstance()是一个虚函数。
可以覆盖该成员函数来初始化你的应用程序。在该函数中,你一般要创建你的应用程序的主窗口(构造一个窗口对象),并让CwinThread::m_pMainWnd指向它。在该程序中是用如下语句实现的:
m_pMainWnd = new CMainWindow;
但是光创建一个窗口并不会在屏幕上显示它,你仍然要调用窗口对象的ShowWindow()和UpdateWindow()成员函数。ShowWindow()成员函数使窗口可见,UpdateWindow()成员函数发送一条WM_PAINT消息来更新窗口的客户区。
框架窗口对象
CFrameWnd类派生出来的CMainWindow类构成了该应用程序的框架窗口类。该类的声明中包含一个构造函数和一个处理WM_PAINT消息用来绘制窗口的函数OnPaint(),另用DECLARE_MESSAGE_MAP()语句声明了一个消息映射。该类的构造函数生成了在屏幕上看到的窗口:
Create (NULL, _T ("The Hello Application"));
参数中NULL表示使用默认的窗口类,后面的一个参数标识了窗口的标题名。
绘制窗口
应用程序不能随心所欲地在屏幕上进行给制,它必须通过响应来自Windows的WM_PAINT消息进行绘制,此消息通知它该更新窗口。
消息映射
CMainWindow类的声明中DECLARE_MESSAGE_MAP()语句声明一个消息映射。
消息映射是一个将消息和成员函数相互关联的表。当应用程序框架窗口接收到一个消息时,MFC将搜索该窗口的消息映射,如果存在一个处理该消息的处理程序就调用它。
消息映射是避免使用冗长虚表的一种方式。
class CmyApp : public CwinApp
{
public:
virtual BOOL InitInstance();
};
class CMainWindow : public CFrameWnd
{
public:
CMainWindow();
protected:
afx_msg void OnPaint();
DECLARE_MESSAGE_MAP()
};
//Hello.cpp
#include <afxwin.h>
#include "Hello.h"
CMyApp myApp;
// CMyApp member functions
BOOL CMyApp::InitInstance()
{
m_pMainWnd = new CMainWindow;
m_pMainWnd->ShowWindow(m_nCmdShow);
m_pMainWnd->UpdateWindow();
return TRUE;
}
// CMainWindow message map and member functions
BEGIN_MESSAGE_MAP(CMainWindow, CFrameWnd)
ON_WM_PAINT()
END_MESSAGE_MAP()
CMainWindow::CMainWindow()
{
Create(NULL, _T("The Hello Application"));
}
void CMainWindow::OnPaint()
{
CPaintDC dc(this);
CRect rect;
GetClientRect(&rect);
dc.DrawText(_T("Hello,World"), -1, &rect,
DT_SINGLELINE | DT_CENTER | DT_VCENTER);
}
应用程序对象
CWinApp:你可以从CWinApp类派生出自己的应用程序类,然后声明该类的全局应用程序对象,以便在应用程序开始时该对象便在内存中被实例化。应用程序对象提供了成员函数以初始化并运行你的应用程序。一般在从CwinApp派生出自己的应用程序类时,只需要覆盖InitInstance()成员函数即可。
InitInstance()函数
CwinApp::InitInstance()是一个虚函数。
可以覆盖该成员函数来初始化你的应用程序。在该函数中,你一般要创建你的应用程序的主窗口(构造一个窗口对象),并让CwinThread::m_pMainWnd指向它。在该程序中是用如下语句实现的:
m_pMainWnd = new CMainWindow;
但是光创建一个窗口并不会在屏幕上显示它,你仍然要调用窗口对象的ShowWindow()和UpdateWindow()成员函数。ShowWindow()成员函数使窗口可见,UpdateWindow()成员函数发送一条WM_PAINT消息来更新窗口的客户区。
框架窗口对象
CFrameWnd类派生出来的CMainWindow类构成了该应用程序的框架窗口类。该类的声明中包含一个构造函数和一个处理WM_PAINT消息用来绘制窗口的函数OnPaint(),另用DECLARE_MESSAGE_MAP()语句声明了一个消息映射。该类的构造函数生成了在屏幕上看到的窗口:
Create (NULL, _T ("The Hello Application"));
参数中NULL表示使用默认的窗口类,后面的一个参数标识了窗口的标题名。
绘制窗口
应用程序不能随心所欲地在屏幕上进行给制,它必须通过响应来自Windows的WM_PAINT消息进行绘制,此消息通知它该更新窗口。
消息映射
CMainWindow类的声明中DECLARE_MESSAGE_MAP()语句声明一个消息映射。
消息映射是一个将消息和成员函数相互关联的表。当应用程序框架窗口接收到一个消息时,MFC将搜索该窗口的消息映射,如果存在一个处理该消息的处理程序就调用它。
消息映射是避免使用冗长虚表的一种方式。
- 手工写MFC应用程序
- 手工编写一个web应用程序
- MFC中手工创建控件
- MFC中手工创建控件
- MFC应用程序
- 手工写一个分词器
- 驱动框架_创建设备_写28个历程_写mfc应用程序进行通信
- 手工编写第一个WEB应用程序
- MFC Windows程序设计:手工创建菜单
- 为手工添加MFC PreTranslateMessage 重载
- 手工创建mfc程序的几个步骤
- VC++6.0和VS2005在编写MFC应用程序时,操作方面的差异
- 在编写控制台应用程序时,且要用MFC框架时添加的头文件
- win32应用程序 与 mfc应用程序
- 如何手工写.reg编辑注册表文件
- 再写手工打造可执行程序
- 再写手工打造可执行程序
- 【原创】再写手工打造可执行程序
- 回调函数和函数指针
- Buyou:让你在iPad上轻松购物
- 最新Centos linux MySQL修改root密码的N种方法
- 墨卡托投影
- 在 aix,hp-ux的 shell中取前N天的时间
- 手工写MFC应用程序
- Nginx的Upload上传模块
- 费尔V8智能杀毒多处内核拒绝服务漏洞
- 今天开始记录我的嵌入式学习历程
- ubuntu 设置 中文 MAN
- C++内存管理(一)介绍
- matlab计时函数
- Ubuntu下Vim的配置
- SAP 复制移动类型提示"在工作区中指定关键字"