C语言程序设计(郑莉)课后习题答案 下载本文

#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 #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 #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