Visual C++ Windows Programming

Slides:



Advertisements
Similar presentations
主讲:王幸民 理学院计算机基础教学部.
Advertisements

第一單元 建立java 程式.
授课教师:江星玲 1.
过程性保存文本格式的实现 计算概论小课题 王元康.
项目:贪吃蛇游戏设计 工作任务一:系统设计(system design) 工作任务二:豆类(Bean)设计
第一章 面向对象程序设计.
计算机高级程序设计 第五章.
设计模式可以帮助我们改善系统的设计,增强 系统的健壮性、可扩展性,为以后铺平道路。
第13章多项目设计与开发.
基于VC++的数字图像特效处理系统的设计与实现
第7单元 面向过程编程—— 继承与多态.
Ch02 視窗Swing套件 物件導向系統實務.
程式語言的基礎 Input Output Program 世代 程式語言 第一世代 Machine language 第二世代
程式設計概論 1.1 程式設計概論 程式語言的演進 物件導向程式 程式開發流程 1.2 C++開發工具
Java簡介.
資料結構設計與C++程式應用 Fundamentals of Data Structures and Their Applications Using C++ 第3章 佇列 資料結構設計與C++程式應用.
第十一章 面向对象设计 第十二章 面向对象实现
鄭士康 國立台灣大學 電機工程學系/電信工程研究所/ 資訊網路與多媒體研究所
Visual C++ Windows Programming
VC 程式設計 Base I 報告者:Jerry Chen TEL:
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
程序设计期末复习 黎金宁
2 C++ 的基本語法和使用環境 親自撰寫和執行程式是學好程式語言的不二法門。本章藉由兩個簡單的程式,介紹C++ 程式的基本結構和開發環境,讓初學者能逐漸建立使用C++ 的信心。
第5章 文本与字体 2018/12/3 面向对象与可视化 程序设计 --Visual C++ 编程 主讲教师: 唐 龙教授 (计算机科学与技术系) 黄维通博士 (计算机与信息管理中心) 清 华 大 学 2001年2月 2018/12/3 Huang Weitong.
類別(class) 類別class與物件object.
简要回顾 了解课程体系、课程目的和主要内容 掌握Windows编程涉及的一些主要概念 DOS程序和Windows程序的主要区别 窗口和程序
第1章 Windows应用程序框架的 创建与消息处理
ASP.NET基本設計與操作 建國科技大學 資管系 饒瑞佶 2007年.
MFC WinSock类的编程 为简化套接字网络编程,更方便地利用Windows的消息驱动机制,微软的基础类库(Microsoft Foundation Class Libary,简称MFC),提供了两个套接字类,在不同的层次上对Windows Socket API函数进行了封装,为编写Windows.
安裝JDK 安裝Eclipse Eclipse 中文化
网络游戏开发语言基础 ——Windows程序设计
Visual Basic 物件導向程式設計簡介.
多媒體概論報告-BMP 組員名稱: 盧彥良-資料蒐集 周誠哲-資料蒐集
視窗程式設計 (Windows Programming)
第二章 SPSS的使用 2.1 啟動SPSS系統 2.2 結束SPSS系統 2.3 資料分析之相關檔案 2.4 如何使用SPSS軟體.
第七章 檔案處理.
第4章 MFC编程 4.1 MFC概述 4.2 MFC和Win CObject类 4.4 消息映射的实现
第 10 章 Windows用户界面 10.1 Windows消息与命令 10.2 单文档与多文档程序 10.3 对话框与常用组件
Java 程式設計 講師:FrankLin.
Visual C++ Windows Programming
Topic Introduction—RMI
第一單元 建立java 程式.
標籤、按鈕、工具列、狀態列 (Labels, Buttons, Tool Strips, and Status Strips)
TB-054A  周天穎 編著 儒林圖書公司 發行.
第十五讲 MFC与消息处理 MFC简介 Windows编程机制 MFC应用程序框架原理 创建应用程序框架 消息及其分类 消息映射机制
版权所有 复制必究 第 6 章 MFC原理与方法.
第 19 章 XML記憶體執行模式.
潘爱民 C++ Overview 潘爱民
第十二讲 菜单、工具栏和状态栏 严宣辉 数学与计算机科学学院
《面向对象程序设计与Visual C++6.0教程》
Visual C++ Windows Programming
MFC及其应用.
GridView.
Class & Object 靜宜大學資工系 蔡奇偉副教授 ©2011.
FTP使用教學 簡介: 軟體名稱:FileZilla 軟體性質:Freeware 版本: 繁體中文版
第5章 文本与字体 2019/4/25 面向对象与可视化 程序设计 --Visual C++ 编程 主讲教师: 唐 龙教授 (计算机科学与技术系) 黄维通博士 (计算机与信息管理中心) 清 华 大 学 2001年2月 2019/4/25 Huang Weitong.
功能表的建立 製作.
函數應用(二)與自定函數.
陣列與結構.
授课老师:龚涛 信息科学与技术学院 2016年3月 教材:《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
第10章媒体控制接口 10.1 MCI设备类型 10.2 MCI编程步骤 10.3使用MCIWnd窗口类.
#include <iostream.h>
進階UI元件:ListView元件以及複選 靜宜大學資管系 楊子青
MultiThread Introduction
第四章 陣列、指標與參考 4-1 物件陣列 4-2 使用物件指標 4-3 this指標 4-4 new 與 delete
What is “this”? 在物件導向程式設計中,類別的定義就是在說明如果創建了“這個物件”的話,它會具有那些屬性與功能,以及這些功能是如何實現的。 而所謂的“這個物件”就以 this 來表示。 當我們在JavaScript與jQuery中寫 script 程式(函式)時,“誰”呼叫這個函式,這個“誰”就是該函式中所謂的.
C++语言程序设计 C++语言程序设计 第十一章 异常处理 C++语言程序设计.
SQLite資料庫 靜宜大學資管系 楊子青.
InputStreamReader Console Scanner
手工编写第一个 MFC程序 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
Presentation transcript:

Visual C++ Windows Programming 第三章 MFC簡介 台大電機系 李奇錚

大綱 MFC介紹 MFC 的基本架構 MFC 的使用方式 資源的設計與使用 訊息處理 Document / View 的觀念

MFC介紹 AF( application frameworks) 由軟體廠商所提供 撰寫應用軟體的架構 AF與物件導向 軟體再用的觀念 繼承和聚合 MFC Microsoft Foundation Class MFC是一個AF Program reuse

八大類別 CObject 和視覺相關的 CFrameWnd , CDialog , CView 和應用程式相關的 Serialization : 將物件儲存到檔案,或自檔案讀出 Diagnostic output : 提供programmer在執行時診斷物件 ASSERT_VALID , AssertVaild , Dump , afxDump , TRACE Run-Time Class Info : 提供programmer在執行時其判斷物件型別 IsKindOf or RUNTIME_CLASS 和視覺相關的 CFrameWnd , CDialog , CView 和應用程式相關的 CWinApp , CFrameWnd , CDocument 這些都繼承自CCmdTarget OLE2 製作OLE Server的類別

八大類別 Internet服務類別 CFileFind , CInternetSession ,CHttp ,Connection 資料庫相關 CDataBase , CRecordSet 一般用途的類別 CString , CTime ,CPoint,.. Internet伺服器 CHtmlStream , CHttpServer

MFC 的基本架構 CObject 應用程式類別 容器類別 繪圖類別 視窗類別 資料庫類別 網際網路服務類別

全域函數 全域變數 : 不屬於任何類別,可以隨時隨地被呼叫 Afxbort – 終止程式的執行 AfxBeginThread – 啟動新的執行緒 AfxEndThread – 結束執行緒 AfxGetApp – 取得CWinApp物件的指標 AfxThrowFileException – 產生File的例外

MFC 的使用方式 標頭檔 應用程式物件與視窗框架物件 #include <afxwin.h> CWinApp CFrameWnd

應用程式物件與視窗框架物件 應用程式物件 指向 m_pMainWnd 視窗框架物件 產生

撰寫程式 借用MFC的類別 直接使用 直接使用已經寫好的類別 繼承 繼承原有的類別,針對不同的特性,加以修改

MFC 的使用方式 (續) #include <afxwin.h> class CFirstApp : public CWinApp { public: BOOL InitInstance() { CFrameWnd *Frame = new CFrameWnd(); m_pMainWnd = Frame; Frame->Create(NULL, "Hello, MFC!!"); Frame->ShowWindow(SW_SHOW); return true; } } ; CFirstApp a_app;

自訂視窗框架及資源檔 利用繼承的方式 繼承CFrameWnd,已產生符合需求的Frame 自行定義所需求的資源檔

資源的設計與使用 Resource Script Accelerator Bitmap Cursor Dialog Icon Menu String Table Toolbar Version

資源的設計與使用 (續) Menu Item 屬性 ID: 按下 menu item 傳回的 command 代號 Caption: menu item 的文字 ("&" : 快速鍵) Seperator: 分隔線 Checked: menu item 是否被選取 Pop-up: menu "folder" or menu item Grayed: 是否為 enabled Inactive: 是否正為游標選取中

資源的設計與使用 (續) #include <afxwin.h> #include "resource.h" class CFirstFrame : public CFrameWnd { private: CMenu *FMenu; public: CFirstFrame() { Create(NULL, "Menu Resource Demo"); FMenu = new CMenu; FMenu->LoadMenu(IDR_MENU1); SetMenu(FMenu); } } ; class CFirstApp : public CWinApp { BOOL InitInstance() { CFrameWnd *Frame = new CFirstFrame; m_pMainWnd = Frame; //Frame->Create(NULL, "Hello, MFC!!"); Frame->ShowWindow(SW_SHOW); return true; CFirstApp a_app;

訊息(Message) 利用MFC撰寫視窗程式,是利用Message Map的方式來回應訊息的 訊息的種類 負責回應訊息的類別中,宣告訊息應對 DECLARE_MESSAGE_MAP() 訊息的種類 標準系統訊息 由作業系統所產生的,ex.滑鼠左鍵被按下,移動滑鼠.. 由CWnd家族的類別負責接收處理 ON_WM_XXX 命令訊息 大多是使用者自訂的選單,工具列等被選取時,所發出的訊息 由CCmdTarget家族類別負責處理和接收 ON_COMMAND(訊息代號,回應函數)

標準系統訊息 Message Map BEGIN_MESSAGE_MAP(…. , …..) ON_WM_MOUSEMOVE() ……… END_MESSAGE_MAP() 處理函式 afx_msg void OnMouseMove(UNIT nFlags , CPoint point) { ….. }

命令訊息 Message Map BEGIN_MESSAGE_MA(訊息代碼 , 回應函數) ON_COMMAND() ……… END_MESSAGE_MAP() Ex. ON_COMMAND(ID_Exit1,OnExit) 處理函式 afx_msg void 回應函數名稱() { ….. } Ex . afx_msg void OnExit() {…………..}

訊息處理 DECLARE_MESSAGE_MAP() BEGIN_MESSAGE_MAP(class, base) END_MESSAGE_MAP()

訊息處理 (續) class CFirstFrame : public CFrameWnd { ...; DECLARE_MESSAGE_MAP() } ; ... BEGIN_MESSAGE_MAP(CFirstFrame, CFrameWnd) ON_COMMAND(ID_EXIT, OnExit) ON_WM_LBUTTONDOWN() ON_WM_MOUSEMOVE() ON_WM_LBUTTONUP() END_MESSAGE_MAP()

訊息處理 (續) #include <afxwin.h> #include "resource.h" class CFirstFrame : public CFrameWnd { private: CMenu *FMenu; public: CFirstFrame() { Create(NULL, "Message Processing Demo"); FMenu = new CMenu; FMenu->LoadMenu(IDR_MENU1); SetMenu(FMenu); } ~CFirstFrame() { delete FMenu; } afx_msg void OnExit() { MessageBox("It's time to stop.", "Stop Window", MB_ICONSTOP); DestroyWindow(); afx_msg void OnLButtonDown(UINT nFlags, CPoint point) { SetCapture(); } afx_msg void OnMouseMove(UINT nFlags, CPoint point) { if(this == GetCapture()) { CClientDC aDC(this); aDC.Ellipse(point.x - 3, point.y - 3, point.x + 3, point.y + 3);

訊息處理 (續) afx_msg void OnLButtonUp(UINT nFlags, CPoint point) { ReleaseCapture(); } DECLARE_MESSAGE_MAP() } ; BEGIN_MESSAGE_MAP(CFirstFrame, CFrameWnd) ON_COMMAND(ID_EXIT, OnExit) ON_WM_LBUTTONDOWN() ON_WM_MOUSEMOVE() ON_WM_LBUTTONUP() END_MESSAGE_MAP() class CFirstApp : public CWinApp { public: BOOL InitInstance() { CFrameWnd *Frame = new CFirstFrame; m_pMainWnd = Frame; Frame->ShowWindow(SW_SHOW); return true; } CFirstApp a_app;

Document / View ch3_2的程式有一些問題 視窗的重繪?? 因為沒有將視窗的資料記錄下來!! Document / View MFC所提供的一種資料處理和顯示的機制

Document / View Document CDocumnet 和應用程式互動的那些資料 包含Serialize()這個函式 不單單只是文字,可以是遊戲資料,幾何模型,文字檔… 包含Serialize()這個函式 可以進行資料的存取 Void CxxDoc : Serialize(CArchive &ar) { if(ar.IsStoring()) ….. } else

Document / View View 顯示Document的方式 設定一個Document應該如何顯示視窗上 ex. 全部顯示或部份顯示

Document / View Document Windows Frame View

Document / View How MFC Link Document and View Using Document Templates Document Templates 每一個Document都有自己的document template 有兩種以上的Doc , 只需要一個document template來管理即可 兩種類型 SDI : CSingleDocTemplate MDI : CMultiDocTemplate

Document / View Application Object Doc template Doc Object Frame Window View Object 表示產生

Document / View #include <afxwin.h> #include "resource.h" #include <afxtempl.h> class MyDocument : public CDocument { public: CArray <CPoint, CPoint &> pArray; MyDocument() { SetTitle("Document / View Demo"); } void AddPoint(CPoint p) { pArray.Add(p); } CPoint GetPoint(int i) { return pArray[i]; } int GetSize() { return pArray.GetSize(); } DECLARE_DYNCREATE(MyDocument) DECLARE_MESSAGE_MAP() } ; IMPLEMENT_DYNCREATE(MyDocument, CDocument) BEGIN_MESSAGE_MAP(MyDocument, CDocument) END_MESSAGE_MAP()

class MyView : public CView { void OnDraw(CDC *aDC) { MyDocument *doc = (MyDocument *) GetDocument(); int num = doc->GetSize(); int i; for(i = 0; i < num; i++) { CPoint point = doc->GetPoint(i); aDC->Ellipse(point.x - 3, point.y - 3, point.x + 3, point.y + 3); } afx_msg void OnLButtonDown(UINT, CPoint point) { SetCapture(); } afx_msg void OnMouseMove(UINT, CPoint point) { if (this == GetCapture()) { CClientDC aDC(this); aDC.Ellipse(point.x - 3, point.y - 3, point.x + 3, point.y + 3); doc->AddPoint(point); afx_msg void OnLButtonUp(UINT, CPoint point) { ReleaseCapture(); } DECLARE_DYNCREATE(MyView) DECLARE_MESSAGE_MAP() } ;

IMPLEMENT_DYNCREATE(MyView, CView) BEGIN_MESSAGE_MAP(MyView, CView) ON_WM_LBUTTONDOWN() ON_WM_MOUSEMOVE() ON_WM_LBUTTONUP() END_MESSAGE_MAP() class MyFrame : public CFrameWnd { public: afx_msg void OnExit() { MessageBox("It's time to stop.", "Stop Window", MB_ICONSTOP); DestroyWindow(); } DECLARE_DYNCREATE(MyFrame) DECLARE_MESSAGE_MAP() } ; IMPLEMENT_DYNCREATE(MyFrame, CFrameWnd) BEGIN_MESSAGE_MAP(MyFrame, CFrameWnd) ON_COMMAND(ID_EXIT, OnExit)

class MyApp : public CWinApp { BOOL InitInstance() { CDocument *doc; CSingleDocTemplate *DocTemplate; DocTemplate = new CSingleDocTemplate(IDR_MENU1, RUNTIME_CLASS(MyDocument), RUNTIME_CLASS(MyFrame), RUNTIME_CLASS(MyView)); AddDocTemplate(DocTemplate); doc = DocTemplate->CreateNewDocument(); m_pMainWnd = DocTemplate->CreateNewFrame(doc, NULL); DocTemplate->InitialUpdateFrame((CFrameWnd *)m_pMainWnd, doc); m_pMainWnd->ShowWindow(SW_SHOW); return true; } } ; MyApp a_app;

補充 InitialUpdateFrame() DECLARE_DYNCREATE(CObject-derived) Calling this function causes the views in that frame window to receive their OnInitialUpdate calls DECLARE_DYNCREATE(CObject-derived) Enables objects of CObject-derived classes to be created dynamically at run time. IMPLEMENT_DYNCREATE must be included in the class implementation

補充 Collection : 由CObject衍伸出來 Ex. CArray , CList CArray<ObjectType , ObjectType &>anArray Ex. CArray<CPoint,CPoint &>PointArray PointArray.Add(aPoint) aPoint = PointArray.GetAt(2); PointArray.SetAt(3,aPoint); or PointArray[3] = aPoint