SlideShare a Scribd company logo
MFC筆記本
KX
規劃
軟
體
硬
體
介面程式
運算程式
控制單元
運算單元
專案檔架構
Dialog Editor
Image Editor
Font Editor
.bmp
.ico
.cur
.dlg
.fon
.rc
.h
.c
Text Editor C compiler
RC compiler .res
.obj
IDE Source
Code
Compiler /Debug
/Release
Link
.exe
.def
.lib
C runtime
dll import
MFC mapping Win32 App
= WinMain()
UI App
= WindowProc()
WM_Quit
ExitInstance()→結束
= WM_IDLE
Run()
OnIdle()
InitInstance()
CMyAppAppCMainFrame
CMyAppDoc
CMyAppView
Doc/View
管理應用程式資料
顯示Document,並充許使用直接操作資料
View的外框
貫串Document、View、FrameWnd
應用程式的初始化和清除的動作
都可以處理命令訊息
CView
CFrameWnd
CWnd
CDocTemplate
CDocument
CWinApp
CWinThread
CCmdTarget
CObject
SDI
SDI/MDI
SDI MDI
Frame CFrameWnd CMDIFrameWnd
View CView CMDIChildWnd
Templat
e
CDocTemplat
e
CMultiDocTemplat
e
Main Frame Window
Document
Document Template
Application Object
Toolbar
View
Status Bar
SDI之View和Doc的關係
• CView→Draw()→主視窗的顯示功能
• CView→從Doc拿資料,以特定的效果呈現
• 資料類別建給CDoc成員
• CDoc→程式的資料記錄(資料結構)
read
show
read
draw
call
Human’s eye
CView( )
CDoc( )物件
Draw( )
CDC
OnDraw( )
CDC* pDC
CPaintDC
CClientDC
CWindowDC
CMetafileDC
WM_PAINT
void CView::OnPaint()
{
// standard paint routine
CPaintDC dc(this);
OnPrepareDC(&dc);
OnDraw(&dc);
}
//Setup
//Used
//Call
Windows OS
View
Resource使用關係圖
ID_DATA_COMMECT
某個ID
↙
Toolbar Menu Command
Resource的東西
↘
繼承來的函數
↙
Class WizardResource View
MessageMap
Update_Command_UI
├ Enable
├ SetCheck
├ SetRadio
└ SetText
↖
更新函數
由此製作工具列
由此製作選單
Setup
Used
製作狀態列
1. 先建一個ID
Resource View→String Table→ID_INDICATOR_XXX
2. 將ID放入狀態列顯的示順序
File View→MainFrm.cpp
static UINTIndicators[]
{
依顯示順序放入狀態列使用的ID
}
3. 將ID和函數連結
手動編輯Message Map
ON_UP_COMMAND_UI(ID_INDICATOR_XXX, 函數名稱)
4. 在Message Map前宣告函數
afx_msg void 函數名稱(CCmdUI *pCmdUI)
5. 建立函數
手動建立函數
void CMainFrame::函數名稱(CCmdUI *pCmdUI)
{
….(固定內容)
}
ID
Indicators[]
ID1 ID2 ID3
fun1( ) fun2( ) fun2( )
Message Map
CCmdUI物件
UI_Update
訊息處理函數 SetText()
函數
放進
Call 函數
對映
Dialog
• 先設計物件。
• 再依物件的使用介面設計
Dialog的圖形化介面。
• 兩個一對一,不同的物件或
Dialog不可交叉使用。
物件
Dialog
給予參數
相
對
應
Dialog
變數給初值
Categor
y
在哪給初值 檢查/傳送
Value Dialog建構子 DDX/DDV機制,用Message Variables
修改DoDataExchange(),加入自訂函
數
Control Dialog初始化函
數
OnInitDialog()
OnOK()函數裡定義
CDialog.OninitDialog() CWnd.Updata()
呼叫
CDialog.OnOK() CWnd.Updata()
呼叫
Dialog of Property
Sheet/Page
CPropertySheet
CPropertyPage
CPropertyPage
CWnd
CDialog
CPropertySheet
CPropertyPage
Resource View>Dialog
Dialog Propertyies
Style>Style:Child
Style>Border:Thin
More Style>ˇDisabled
CPropertySheet
classe View>CMainFrame>某ID的Command()
{
CPropertySheet PropSheet;
CPage1 pp1;
CPage2 pp2;
PropSheet.AddPage(&pp1);
PropSheet.AddPage(&pp1);
PropSheet.SetTitle(“MyApp Settings “);
PropSheet.DoModal();
}
設定「套用」Enable
SetModifed(TRUE);
MapMode
座標軸 單位
MM_TEXT 1pixel
MM_HIMETRIC 0.01mm
MM_LOMETRIC 0.1mm
MM_TWIPS 1/1440in
MM_HIENGLIST 0.001in
MM_LOEHGLISH 0.01in
MM_ISOTROPIC 自訂xy軸同單位
MM_ANISOTROPIC 自訂xy軸不同單位
Thread
Check worker thread
pThread->InitInstance() *pThead->m_pfnThreadProc
CWinThread * m_thread = NULL;
HWND hMyWnd = this->m_hWnd
m_thread = AfxBeginThread(函數名稱, hMyWnd );
Worker threadUI thread
建立一個CMyThread
AfxBeginThread
(RUNTIME_CLASS(CMyThread));
這樣還是會ERROR~
Dialog控制MainFrame
//在衛星Dialog中想存取MainFrame、Doc、View的資料時,就是這樣做。
//1. 取得主視窗控制權
CMainFrame * pWnd = dynamic_cast<CMainFrame *>(AfxGetMainWnd());
ASSERT_VALID(pWnd); //檢查指標是不是正確的
//2. 取得目前開啟文件控制權
CSTUpload * pDoc = dynamic_cast<CSTUpload *>(pWnd->GetActiveDocument());
ASSERT_VALID(pDoc); //檢查指標是不是正確的
pDoc->SetModifiedFlag(BOOL); //檔案更新要存檔的提示
pDoc->UpdateAllViews(NULL); //更新所有的view
MFC檔案讀寫、相對應的例外處理
• CFile
├CMemFile 好的執行效能
│└CShareFile 記憶體中,可以共享檔案 存到剪貼簿
├COleStreamFile
│└ CMonikerFile
│ └ CAsyncMonikerFile
│ └ CDataPathProperty
│ └ CCachedDataPathProperty
├CScoketFile
└CStdioFile 有緩衝區 標準輸出入檔案
└CInternetFile
├CGopherfile
└CHttpFile
MFC檔案讀寫、相對應的例外處理
• CFile
是否新建檔案,開&讀舊檔,唯讀寫,禁止共享(讀或寫)
(使用Win32API)
• CStdioFile
可指定文字模式、二進位模式開檔
(使用C語言函式)
– 讀取的資料量 CStdioFile.Read(指標 讀取資料的記憶體位址, UINT 欲讀取的資料量);
• StringRead()的用法類似Read()
除了:
1. 讀取到‘n’結束。
2. 輸出結束自動加上null。
3. 會「回傳(讀取的)記憶體位址」,若讀不到東西回傳null。
– 讀取資料的記憶體位址 CStdioFile.StringRead(指標 讀取資料的記憶體位址 , UINT 欲讀取的資料量);
– BOOL CStdioFile.StringRead(CString&);
MFC檔案讀寫、相對應的例外處理
• 案的例外處理類別
CException
└CFileException
MFC檔案讀寫、相對應的例外處理
• 例外處理範例:
try
{
CFile MyFile("MyFile.old", CFile::modeRead);
}
catch(CFileException *fx)
{
TCHAR buf[255];
fx->GetErrorMessage(buf, 255);
CString strPrompt(buf);
AfxMessageBox(strPrompt);
}
或者
CFile MyFile;
CFileException fx;
if(!MyFile.Open("Myfile.old", CFile::modeRead, &fx))
{
TCHAR buf[255];
fx.GetErrorMessage(buf, 255);
CString strPrompt(buf);
AfxMessageBox(strPrompt);
}
Serialization()
• CObject物件(MFC的最bass class)就有
CObject CArchive
Run-Time Object
Model Support
CDumpContext
CRuntimeClass
時間格式
COleDateTime aTime
If ( aTime.GetStatus() != COleDateTime::valid) //檢查是否為有效格式
資料庫
進階了!!!
DAO & ODBC
CObject
CRecordset
CDatabase
ODBC Database
Support
User recordsets
CView
CWnd
CCmdTarget
CScrollView
CFormView
CRecordView
User record views
CObject
CView
CWnd
CCmdTarget
CScrollView
CFormView
CRecordView
User record views
CDaoRecordset
CDaoDatabase
DAO Database
Support
CDaoQueryDef
CDaoTableDef
CDaoWorkspace
DAO & ODBC
ODBC DAO
建立/中斷連結 CDatabase.Open()
CDatabase.OpenEx()
CDatabase.Close()
CDaoDatabase.Open()
CDaoDatabase.Close()
管理查詢記錄
像Doc
CRrecordset.Open()
CRrecordset.Close()
CDaoRecordset.Open()
CDaoRecordset.Close()
記錄欄位的內容值
填到Recordset物件
的成員變數
像DDX
RFX DFX
將recordset物件的
已錄顯示給使用者
看。
繼承自CFormView
CRecordView.OnMove() CDaoRecordView.OnMove
略…
接下來直接進入COM
COM
COM技術
COM元件的類別代碼
(ClassID)
它是獨一無二的數字GUID
COM元件
重覆使用的控制項
COM介面
一組方法的集合
COM介面
COM提供的服務
IUnknow
MFC tips for single document

More Related Content

Similar to MFC tips for single document

LLVM introduction
LLVM introductionLLVM introduction
2006年招聘试题
2006年招聘试题2006年招聘试题
2006年招聘试题yiditushe
 
C#语言与面向对象程序设计
C#语言与面向对象程序设计C#语言与面向对象程序设计
C#语言与面向对象程序设计WizRay
 
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天Gelis Wu
 
Windows Mobile 6 遊戲開發入門
Windows Mobile 6 遊戲開發入門Windows Mobile 6 遊戲開發入門
Windows Mobile 6 遊戲開發入門Chui-Wen Chiu
 
Windows 8 apps dev.整理及分享
Windows 8 apps dev.整理及分享Windows 8 apps dev.整理及分享
Windows 8 apps dev.整理及分享Liyao Chen
 
HTML+COIMOTION 開發跨平台 app
HTML+COIMOTION 開發跨平台 appHTML+COIMOTION 開發跨平台 app
HTML+COIMOTION 開發跨平台 app
Ben Lue
 
Ecomm App Dev Chn
Ecomm App Dev ChnEcomm App Dev Chn
Ecomm App Dev Chnnuo xu
 
Ch01
Ch01Ch01
Ch01
jashliao
 
Introduction To Direct Show
Introduction To Direct ShowIntroduction To Direct Show
Introduction To Direct Showguestce3937
 
Introduction To Direct Show
Introduction To  Direct ShowIntroduction To  Direct Show
Introduction To Direct Showguestce3937
 
Android 介面設計
Android 介面設計Android 介面設計
Android 介面設計
PingLun Liao
 
前端构建工具
前端构建工具前端构建工具
前端构建工具
wkylin
 
容器驅動開發 - .NET Conf 2017 @ 台中
容器驅動開發 - .NET Conf 2017 @ 台中容器驅動開發 - .NET Conf 2017 @ 台中
容器驅動開發 - .NET Conf 2017 @ 台中
Andrew Wu
 
部門會議 950619 Leon的錦囊妙計
部門會議 950619 Leon的錦囊妙計部門會議 950619 Leon的錦囊妙計
部門會議 950619 Leon的錦囊妙計Leon Chuang
 

Similar to MFC tips for single document (20)

mfc
mfcmfc
mfc
 
LLVM introduction
LLVM introductionLLVM introduction
LLVM introduction
 
2006年招聘试题
2006年招聘试题2006年招聘试题
2006年招聘试题
 
C#语言与面向对象程序设计
C#语言与面向对象程序设计C#语言与面向对象程序设计
C#语言与面向对象程序设计
 
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
 
Windows Mobile 6 遊戲開發入門
Windows Mobile 6 遊戲開發入門Windows Mobile 6 遊戲開發入門
Windows Mobile 6 遊戲開發入門
 
Windows 8 apps dev.整理及分享
Windows 8 apps dev.整理及分享Windows 8 apps dev.整理及分享
Windows 8 apps dev.整理及分享
 
I os 01
I os 01I os 01
I os 01
 
Jobforcompal
JobforcompalJobforcompal
Jobforcompal
 
HTML+COIMOTION 開發跨平台 app
HTML+COIMOTION 開發跨平台 appHTML+COIMOTION 開發跨平台 app
HTML+COIMOTION 開發跨平台 app
 
Ecomm App Dev Chn
Ecomm App Dev ChnEcomm App Dev Chn
Ecomm App Dev Chn
 
Ch01
Ch01Ch01
Ch01
 
Introduction To Direct Show
Introduction To Direct ShowIntroduction To Direct Show
Introduction To Direct Show
 
Introduction To Direct Show
Introduction To  Direct ShowIntroduction To  Direct Show
Introduction To Direct Show
 
Android 介面設計
Android 介面設計Android 介面設計
Android 介面設計
 
I os 16
I os 16I os 16
I os 16
 
前端构建工具
前端构建工具前端构建工具
前端构建工具
 
容器驅動開發 - .NET Conf 2017 @ 台中
容器驅動開發 - .NET Conf 2017 @ 台中容器驅動開發 - .NET Conf 2017 @ 台中
容器驅動開發 - .NET Conf 2017 @ 台中
 
部門會議 950619 Leon的錦囊妙計
部門會議 950619 Leon的錦囊妙計部門會議 950619 Leon的錦囊妙計
部門會議 950619 Leon的錦囊妙計
 
Framebuffer
FramebufferFramebuffer
Framebuffer
 

More from Chris Wang

屏東縣政府112年度大專青年公部門暑期工讀計畫簡章.pdf
屏東縣政府112年度大專青年公部門暑期工讀計畫簡章.pdf屏東縣政府112年度大專青年公部門暑期工讀計畫簡章.pdf
屏東縣政府112年度大專青年公部門暑期工讀計畫簡章.pdf
Chris Wang
 
「設計」在工程師職涯中 扮演的角色
「設計」在工程師職涯中 扮演的角色「設計」在工程師職涯中 扮演的角色
「設計」在工程師職涯中 扮演的角色
Chris Wang
 
歡迎加入軟體構築行列
歡迎加入軟體構築行列歡迎加入軟體構築行列
歡迎加入軟體構築行列
Chris Wang
 
自我探索的資訊教育
自我探索的資訊教育自我探索的資訊教育
自我探索的資訊教育
Chris Wang
 
完美 camp 進化論
完美 camp 進化論完美 camp 進化論
完美 camp 進化論
Chris Wang
 
Dm create message old
Dm create message oldDm create message old
Dm create message old
Chris Wang
 
Dm create message new
Dm create message newDm create message new
Dm create message new
Chris Wang
 
用 jenkins 實戰 CD/CI
用 jenkins 實戰 CD/CI用 jenkins 實戰 CD/CI
用 jenkins 實戰 CD/CI
Chris Wang
 
MVC Design in Web backend Server
MVC Design in Web backend ServerMVC Design in Web backend Server
MVC Design in Web backend Server
Chris Wang
 
Bug afx ini-line122
Bug afx ini-line122Bug afx ini-line122
Bug afx ini-line122
Chris Wang
 
物件的值莫名奇妙被改掉
物件的值莫名奇妙被改掉物件的值莫名奇妙被改掉
物件的值莫名奇妙被改掉
Chris Wang
 
VC6 font setup tips
VC6 font setup tipsVC6 font setup tips
VC6 font setup tips
Chris Wang
 
CString of MFC skills
CString of MFC skillsCString of MFC skills
CString of MFC skills
Chris Wang
 
應用於液晶電視中動態背光調光技術之演算法與系統整合實現 論文口試投影片
應用於液晶電視中動態背光調光技術之演算法與系統整合實現 論文口試投影片應用於液晶電視中動態背光調光技術之演算法與系統整合實現 論文口試投影片
應用於液晶電視中動態背光調光技術之演算法與系統整合實現 論文口試投影片
Chris Wang
 
偷偷學習 Python3
偷偷學習 Python3偷偷學習 Python3
偷偷學習 Python3
Chris Wang
 
思考 Vuex 發送 API 的架構
思考 Vuex 發送 API 的架構思考 Vuex 發送 API 的架構
思考 Vuex 發送 API 的架構
Chris Wang
 
從 Flux 認識 vuex
從 Flux 認識 vuex從 Flux 認識 vuex
從 Flux 認識 vuex
Chris Wang
 
Information architecture reading ch7
Information architecture reading ch7Information architecture reading ch7
Information architecture reading ch7
Chris Wang
 
用Vue改dom
用Vue改dom用Vue改dom
用Vue改dom
Chris Wang
 
Cppunit下載、編譯、使用與困難排除
Cppunit下載、編譯、使用與困難排除Cppunit下載、編譯、使用與困難排除
Cppunit下載、編譯、使用與困難排除
Chris Wang
 

More from Chris Wang (20)

屏東縣政府112年度大專青年公部門暑期工讀計畫簡章.pdf
屏東縣政府112年度大專青年公部門暑期工讀計畫簡章.pdf屏東縣政府112年度大專青年公部門暑期工讀計畫簡章.pdf
屏東縣政府112年度大專青年公部門暑期工讀計畫簡章.pdf
 
「設計」在工程師職涯中 扮演的角色
「設計」在工程師職涯中 扮演的角色「設計」在工程師職涯中 扮演的角色
「設計」在工程師職涯中 扮演的角色
 
歡迎加入軟體構築行列
歡迎加入軟體構築行列歡迎加入軟體構築行列
歡迎加入軟體構築行列
 
自我探索的資訊教育
自我探索的資訊教育自我探索的資訊教育
自我探索的資訊教育
 
完美 camp 進化論
完美 camp 進化論完美 camp 進化論
完美 camp 進化論
 
Dm create message old
Dm create message oldDm create message old
Dm create message old
 
Dm create message new
Dm create message newDm create message new
Dm create message new
 
用 jenkins 實戰 CD/CI
用 jenkins 實戰 CD/CI用 jenkins 實戰 CD/CI
用 jenkins 實戰 CD/CI
 
MVC Design in Web backend Server
MVC Design in Web backend ServerMVC Design in Web backend Server
MVC Design in Web backend Server
 
Bug afx ini-line122
Bug afx ini-line122Bug afx ini-line122
Bug afx ini-line122
 
物件的值莫名奇妙被改掉
物件的值莫名奇妙被改掉物件的值莫名奇妙被改掉
物件的值莫名奇妙被改掉
 
VC6 font setup tips
VC6 font setup tipsVC6 font setup tips
VC6 font setup tips
 
CString of MFC skills
CString of MFC skillsCString of MFC skills
CString of MFC skills
 
應用於液晶電視中動態背光調光技術之演算法與系統整合實現 論文口試投影片
應用於液晶電視中動態背光調光技術之演算法與系統整合實現 論文口試投影片應用於液晶電視中動態背光調光技術之演算法與系統整合實現 論文口試投影片
應用於液晶電視中動態背光調光技術之演算法與系統整合實現 論文口試投影片
 
偷偷學習 Python3
偷偷學習 Python3偷偷學習 Python3
偷偷學習 Python3
 
思考 Vuex 發送 API 的架構
思考 Vuex 發送 API 的架構思考 Vuex 發送 API 的架構
思考 Vuex 發送 API 的架構
 
從 Flux 認識 vuex
從 Flux 認識 vuex從 Flux 認識 vuex
從 Flux 認識 vuex
 
Information architecture reading ch7
Information architecture reading ch7Information architecture reading ch7
Information architecture reading ch7
 
用Vue改dom
用Vue改dom用Vue改dom
用Vue改dom
 
Cppunit下載、編譯、使用與困難排除
Cppunit下載、編譯、使用與困難排除Cppunit下載、編譯、使用與困難排除
Cppunit下載、編譯、使用與困難排除
 

MFC tips for single document