#define IDR_MAINFRAME 128 // 主框架的资源代号 class CMyApp : public CWinApp { public:
virtual BOOL InitInstance(); DECLARE_MESSAGE_MAP() };
BEGIN_MESSAGE_MAP(CMyApp, CWinApp)
ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew) ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen) ON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp::OnFilePrintSetup) END_MESSAGE_MAP()
// 初始化程序实例:建立并登记文档模板 BOOL CMyApp::InitInstance() {
CSingleDocTemplate* pDocTemplate; pDocTemplate = new CSingleDocTemplate( IDR_MAINFRAME,
RUNTIME_CLASS(CMyDoc), RUNTIME_CLASS(CMainFrame), RUNTIME_CLASS(CMyView)); AddDocTemplate(pDocTemplate); CCommandLineInfo cmdInfo; ParseCommandLine(cmdInfo);
if (!ProcessShellCommand(cmdInfo)) return FALSE;
m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED); return TRUE; }
// 全局应用程序对象 CMyApp theApp;
7-23 为例9-3的吹泡泡程序添加一标识符为IDI_MAINICON的图标(该图标应已按11.8:“向项目中添加资源”中的方法建立并加入项目)。
说 明:建立项目的方法见9.8:“用Visual C++集成开发环境开发Win32应用程序”。 程 序:
在例9-3程序前面添加一文件包含命令: #include ”resource.h”
并将CMyApp::InitInstance()函数修改为: BOOL CMyApp::InitInstance() {
HICON hIcon;
hIcon = LoadIcon(IDI_MAINICON); // 载入图标 CMyWnd *pFrame = new CMyWnd; pFrame->Create(0,_T(\吹泡泡程序\
pFrame->SetIcon(hIcon, TRUE); // 设置大图标 pFrame->SetIcon(hIcon, FALSE); // 设置小图标 pFrame->ShowWindow(m_nCmdShow); this->m_pMainWnd = pFrame; return TRUE; }
7-24 显示一张位图文件(.BMP)。
说 明:首先建立Win32 Application空白项目和源代码文件(不要忘记设置项目使之可以使用MFC类库),然后按11.8:“向项目中添加资源”的方法为项目建立资源文件,并将待显示的位图文件作为资源装入项目。 程 序:
// Example 11-2:显示BMP图片 #include
class CMyWnd: public CFrameWnd {
CBitmap m_Bitmap; int m_nHeight; int m_nWidth; public: CMyWnd(); protected:
afx_msg void OnPaint(); DECLARE_MESSAGE_MAP() };
// 消息映射
BEGIN_MESSAGE_MAP(CMyWnd, CFrameWnd) ON_WM_PAINT() END_MESSAGE_MAP() // 框架窗口类的成员函数 CMyWnd::CMyWnd() {
m_Bitmap.LoadBitmap(IDB_BITMAP1); BITMAP BM;
m_Bitmap.GetBitmap(&BM); m_nWidth = BM.bmWidth; m_nHeight = BM.bmHeight; }
49
// 响应绘制窗口客户区消息 void CMyWnd::OnPaint() {
CPaintDC dc(this); CDC MemDC;
MemDC.CreateCompatibleDC(NULL); MemDC.SelectObject(&m_Bitmap);
dc.BitBlt(0,0,m_nWidth,m_nHeight,&MemDC,0,0,SRCCOPY); }
// 应用程序类
class CMinMFCApp: public CWinApp { public:
BOOL InitInstance(); };
// 应用程序类的成员函数 // 初始化应用程序实例
BOOL CMinMFCApp::InitInstance() {
CMyWnd *pFrame = new CMyWnd;
pFrame->Create(0,_T(\ pFrame->ShowWindow(m_nCmdShow); this->m_pMainWnd = pFrame; return TRUE; }
// 全局应用程序对象 CMinMFCApp ThisApp;
7-25 修改11-2,使之可以不同比例放大或缩小图象。 说 明:使用StretchBlt()函数代替BitBlt()函数就可实现图象的缩放显示。在项目中加入一个弹出式菜单(将标识符改为IDR_MAINMENU),内含3个菜单选项:缩小1倍显示,按原尺寸显示和放大1倍显示,其标识符分别改为ID_SHRINK,ID_BESTFIT和ID_ZOOMOUT。 程 序:
// Example 11-3:以不同尺寸显示BMP图片 #include
class CMyWnd: public CFrameWnd {
CBitmap m_Bitmap; float m_fTimes; int m_nHeight;
int m_nWidth; public: CMyWnd();
BOOL PreCreateWindow(CREATESTRUCT &cs); protected:
afx_msg void OnPaint(); afx_msg void OnShrink(); afx_msg void OnBestFit(); afx_msg void OnZoomOut(); DECLARE_MESSAGE_MAP() };
// 消息映射
BEGIN_MESSAGE_MAP(CMyWnd, CFrameWnd) ON_WM_PAINT()
ON_COMMAND(ID_SHRINK, OnShrink) ON_COMMAND(ID_BESTFIT, OnBestFit) ON_COMMAND(ID_ZOOMOUT, OnZoomOut) END_MESSAGE_MAP() // 主窗口类的成员函数 CMyWnd::CMyWnd() {
BITMAP BM;
m_Bitmap.LoadBitmap(IDB_BITMAP1); m_Bitmap.GetBitmap(&BM); m_nWidth = BM.bmWidth; m_nHeight = BM.bmHeight; m_fTimes = 1.0; }
// 装入菜单
BOOL CMyWnd::PreCreateWindow(CREATESTRUCT &cs) { cs.hMenu
=
LoadMenu(NULL,
MAKEINTRESOURCE(IDR_MAINMENU)); return CFrameWnd::PreCreateWindow(cs); }
// 缩小图象
void CMyWnd::OnShrink() {
m_fTimes = 0.5; Invalidate(); }
// 放大图象
void CMyWnd::OnZoomOut() {
m_fTimes = 2.0; Invalidate(); }
// 原样显示
50