友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
第三电子书 返回本书目录 加入书签 我的书架 我的书签 TXT全本下载 『收藏到我的浏览器』

深入浅出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  { 

   
返回目录 上一页 下一页 回到顶部 0 0
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!