友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
深入浅出MFC第2版(PDF格式)-第66部分
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!
■ 看不到WinMain,因此不知程序从哪里开始执行。
■ 看不到RegisterClass 和CreateWindow,那么窗口是如何做出来的呢?
■ 看不到 Message Loop (GetMessage/DispatchMessage ),那么程序如何推动?
■ 看不到Window Procedure,那么窗口如何运作?
我的目的就在铲除这些困惑。
Hello 程序源代码
■ HELLO。MAK makefile
■ RESOURCE。H 所有资源ID 都在这里定义。本例只定义一个IDM_ABOUT 。
■ JJHOUR。ICO 图标文件,用于主窗口和对话框。
■ HELLO。RC 资源描述档。本例有一份菜单、一个图标、和一个对话框。
■ STDAFX。H 包含AFXWIN。H 。
■ STDAFX。CPP 包含STDAFX。H ,为的是制造出Prepiled header 。
■ HELLO。H 声明CMyWinApp 和CMyFrameWnd 。
■ HELLO。CPP 定义CMyWinApp 和CMyFrameWnd 。
注意:没有模块定义文件。DEF ?是的,如果你不指定模块定义文件,联结器就使用默认值。
每有WM_PAINT 消息
发生,Hello MFC 字符串
即「从天而降」
Application object
MainFrame object,
是一个全域对象,代
代表主窗口,其基础
表整个程序,其基础
类别是CFrameWnd
类别是CWinApp
图6…2 Hello 程序中的两个对象
352
…………………………………………………………Page 415……………………………………………………………
第6章 MFC 程式的生死因果
STDAFX。H STDAFX。CPP
#include #include
HELLO。CPP HELLO。RC
HELLO。H
#include #include 〃resource。h〃
CMyWinApp #include 〃resource。h〃 #include
class declaration #include 〃hello。h〃
CMyWinApp theApp; Icon description
CMyFrameWnd
class declaration
CMyWinApp
Menu description
class definition
RESOURCE。H
Dialog Template
CMyFrameWnd
#define IDM_xxx
class definition
Message Map
图6…3 Hello 程序的基本文件架构。一般习惯为每个类别准备一个 。H (声
明)和一个 。CPP (实作),本例把两类别集中在一起是为了简化。
HELLO。MAK (请在DOS 窗口中执行nmake hello。mak。环境设定请参考p。224)
#0001 # filename : hello。mak
#0002 # make file for hello。exe (MFC 4。0 Application)
#0003 # usage : nmake hello。mak (Visual C++ 5。0)
#0004
#0005 Hello。exe : StdAfx。obj Hello。obj Hello。res
#0006 link。exe /nologo /subsystem:windows /incremental:no
#0007 /machine:I386 /out:〃Hello。exe〃
#0008 Hello。obj StdAfx。obj Hello。res
#0009 msvcrt。lib kernel32。lib user32。lib gdi32。lib mfc42。lib
#0010
#0011 StdAfx。obj : StdAfx。cpp StdAfx。h
#0012 cl。exe /nologo /MD /W3 /GX /O2 /D 〃WIN32〃 /D 〃NDEBUG〃 /D 〃_WINDOWS〃
#0013 /D 〃_AFXDLL〃 /D 〃_MBCS〃 /Fp〃Hello。pch〃 /Yc〃stdafx。h〃
#0014 /c StdAfx。cpp
#0015
#0016 Hello。obj : Hello。cpp Hello。h StdAfx。h
#0017 cl。exe /nologo /MD /W3 /GX /O2 /D 〃WIN32〃 /D 〃NDEBUG〃 /D 〃_WINDOWS〃
#0018 /D 〃_AFXDLL〃 /D 〃_MBCS〃 /Fp〃Hello。pch〃 /Yu〃stdafx。h〃
#0019 /c Hello。cpp
#0020
#0021 Hello。res : Hello。rc Hello。ico jjhour。ico
#0022 rc。exe /l 0x404 /Fo〃Hello。res〃 /D 〃NDEBUG〃 /D 〃_AFXDLL〃 Hello。rc
353
…………………………………………………………Page 416……………………………………………………………
第篇 湷觥 FC 程式設計
RESOURCE。H
#0001 // resource。h
#0002 #define IDM_ABOUT 100
HELLO。RC
#0001 // hello。rc
#0002 #include 〃resource。h〃
#0003 #include 〃afxres。h〃
#0004
#0005 JJHouRIcon ICON DISCARDABLE 〃JJHOUR。ICO〃
#0006 AFX_IDI_STD_FRAME ICON DISCARDABLE 〃JJHOUR。ICO〃
#0007
#0008 MainMenu MENU DISCARDABLE
#0009 {
#0010 POPUP 〃&Help〃
#0011 {
#0012 MENUITEM 〃&About HelloMFC。。。〃; IDM_ABOUT
#0013 }
#0014 }
#0015
#0016 AboutBox DIALOG DISCARDABLE 34; 22; 147; 55
#0017 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
#0018 CAPTION 〃About Hello〃
#0019 {
#0020 ICON 〃JJHouRIcon〃;IDC_STATIC;11;17;18;20
#0021 LTEXT 〃Hello MFC 4。0〃;IDC_STATIC;40;10;52;8
#0022 LTEXT 〃Copyright 1996 Top Studio〃;IDC_STATIC;40;25;100;8
#0023 LTEXT 〃J。J。Hou〃;IDC_STATIC;40;40;100;8
#0024 DEFPUSHBUTTON 〃OK〃;IDOK;105;7;32;14;WS_GROUP
#0025 }
STDAFX。H
#0001 // stdafx。h : include file for standard system include files;
#0002 // or project specific include files that are used frequently;
#0003 // but are changed infrequently
#0004
#0005 #include // MFC core and standard ponents
354
…………………………………………………………Page 417……………………………………………………………
第6章 MFC 程式的生死因果
STDAFX。CPP
#0001 // stdafx。cpp : source file that includes just the standard includes
#0002 // Hello。pch will be the pre…piled header
#0003 // stdafx。obj will contain the pre…piled type information
#0004
#0005 #include 〃stdafx。h〃
HELLO。H
#0001 //……………………………………………………………………………………………………………………………………………………………………
#0002 // MFC 4。0 Hello Sample Program
#0003 // Copyright (c) 1996 Top Studio * J。J。Hou
#0004 // 档名 : hello。h
#0005 //
作者 : 侯俊杰
#0006 //
#0007 // 编译联结 : 请参考hello。mak
#0008 //
#0009 // 声明Hello 程序的两个类别 : CMyWinApp 和CMyFrameWnd
#0010 //……………………………………………………………………………………………………………………………………………………………………
#0011
#0012 class CMyWinApp : public CWinApp
#0013 {
#0014 public:
#0015 BOOL InitInstance(); //
每一个应用程序都应该改写此函数
#0016 };
#0017
#0018 //……………………………………………………………………………………………………………………………………………………………………
#0019 class CMyFrameWnd : public CFrameWnd
#0020 {
#0021 public:
#0022 CMyFrameWnd(); // constructor
#0023 afx_msg void OnPaint(); // for WM_PAINT
#0024 afx_msg void OnAbout(); // for WM_MAND (IDM_ABOUT)
#0025
#0026 private:
#0027 DECLARE_MESSAGE_MAP() // Declare Message Map
#0028 static VOID CALLBACK LineDDACallback(int;int;LPARAM);
注意 : callback 函数必须是〃static〃,才能去除隐藏的'this' 指针。
#0029 //
#0030 };
355
…………………………………………………………Page 418……………………………………………………………
第篇 湷觥 FC 程式設計
HELLO。CPP
#0001 //……………………………………………………………………………………………………………………………………………………………………
#0002 // MFC 4。0 Hello sample program
#0003 // Copyright (c) 1996 Top Studio * J。J。Hou
#0004 // 档名 : hello。cpp
#0005 //
作者 : 侯俊杰
#0006 //
#0007 // 编译联结 : 请参考hello。mak
#0008 //
#0009 // 本例示范最简单之MFC 应用程序,不含Document/View 架构。程序每收到
#0010 // WM_PAINT 即利用GDI 函数LineDDA() 让〃Hello; MFC〃 字符串从天而降。
#0011 //……………………………………………………………………………………………………………………………………………………………………
#0012 #include 〃Stdafx。h〃
#0013 #include 〃Hello。h〃
#0014 #include 〃Resource。h〃
#0015
#0016 CMyWinApp theApp; // application object
#0017
#0018 //……………………………………………………………………………………………………………………………………………………………………
#0019 // CMyWinApp's member
#0020 //……………………………………………………………………………………………………………………………………………………………………
#0021 BOOL CMyWinApp::InitInstance()
#0022 {
#0023 m_pMainWnd = new CMyFrameWnd();
#0024 m_pMainWnd…》ShowWindow(m_nCmdShow);
#0025 m_pMainWnd…》UpdateWindow();
#0026 return TRUE;
#0027 }
#0028 //……………………………………………………………………………………………………………………………………………………………………
#0029 // CMyFrameWnd's member
#0030 //……………………………………………………………………………………………………………………………………………………………………
#0031 CMyFrameWnd::CMyFrameWnd()
#0032 {
#0033 Create(NULL; 〃Hello MFC〃; WS_OVERLAPPEDWINDOW; rectDefault;
#0034 NULL; 〃MainMenu〃); // 〃MainMenu〃 定义于 RC 档
#0035 }
#0036 //……………………………………………………………………………………………………………………………………………………………………
#0037 BEGIN_MESSAGE_MAP(CMyFrameWnd; CFrameWnd)
#0038 ON_MAND(IDM_ABOUT; OnAbout)
#0039 ON_WM_PAINT()
#0040 END_MESSAGE_MAP()
#0041 //……………………………………………………………………………………………………………………………………………………………………
#0042 void CMyFrameWnd::OnPaint()
#0043 {
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!