
L p trình C trên Winậ
ÖÙng duïng Single Document:
Ví duï taïo moät öùng duïng teân vidu1 kieåu single document
baèng trình AppWizard. Trình AppWizard seõ taïo ra caùc lôùp ñoái
töôïng daãn xuaát töø caùc lôùp ñoái töôïng cô sôû Application
classes, Document classes, ViewClasses vaø Frames classes
Ví duï:
Lôùp cô sôû Lôùp daãn xuaát Teân taäp tin Ghi chuù
CWinApp Cvd1App Vd1.cpp
CDocument Cvd1Doc Vidu1Doc.cpp
CView Cvd1View Vidu1View.cpp
CFrameWnd CmainFrame MainFrm.cpp
CMDIChildWnd CchildFrame ChildFrm.cpp
Taäp tin RESOURCE.H
Taäp tin naøy chöùa toaøn boä nhöõng leänh #define duøng
ñònh nghóa chæ danh ID nhöõng taøi nguyeân nhö laø:
DD_ABOUTBOX: Ñoái vôùi taøi nguyeân laø moät hoäp hoäi
thoaïi about box
IDR_MAINFRAME: Ñoái vôùi vieäc chia seû söû duïng bôûi nhieàu
loaïi taøi nguyeân.
IDR_VIDU1TYPE : Ñoái vôùi taøi nguyeân laø bieåu töôïng taøi
lieäu
Coøn caùc haèng _APS_3D_xxxx vaø _APS_NEXT_xxxx khaùc
khoâng tröïc tieáp ñöôïc söû duïng bôûi caùc taäp tin taøi nguyeân
khaùc. Taäp tin naøy seõ ñöôïc söû duïng bôûi taäp tin Vidu1.RC.
Noäi dung taäp tin RESOURCE.RC
// { { N O _ DEPENDENCIES } }
// Micro s o f t Visual C+ + g e n e r a t e d includ e file.
// Use d b y VIDU1.RC
#d e fi n e IDD_ABOUTBOX 10 0
#d e fi n e IDR_MAINFRAME 12 8
#d e fi n e IDR_VIDU1TYPE 12 9
// Next d e f a u l t val u e s for ne w obj e c t s
#ifd e f APSTUDIO_INVOKED
#ifn d e f APSTUDIO_READONLY_SYMBOLS
#d e fi n e _APS_3D_CONTROL S 1
#d e fi n e _APS_NEXT_RESOURCE_VALUE 13 0
#d e fi n e _APS_NEXT_CONTROL_VALUE 10 0 0
Trang 1

L p trình C trên Winậ
#define _APS_NEXT_SYMED_VALUE 101
#define _APS_NEXT_COMMAND_VALUE 32771
#endif
#endif
Taäp tin Vidu1.H
Taäp tin tieâu ñeà Vidu1.H chöùa caùc khai baùo lieân quan
ñeán lôùp Cvidu1App laø lôùp öùng duïng Cvidu1. Cvidu1App laø theå
hieän (instance) chöông trình öùng duïng Vidu1. Lôùp naøy ñöôïc
daãn xuaát töø lôùp CwinApp
Class Cvidu1App : public CwinApp {
CwinAppp ( Class Windows Application) theo sô ñoà döùôi ñaây:
CObject
CCmdTarget
CWinThread
CWinApp
laø haäu dueä cuûa lôùp CCmdTarget lo vieäc quaûn lyù nhöõng
coâng vieäc ñöôïc ñoøi hoûi ñeå khôûi ñoäng öùng duïng cuõng nhö
ñeå cho chaïy vaø keát thuùc öùng duïng MFC. Nhö sô ñoà treân
CWinApp ñöôïc daãn xuaát töø moät chuoãi lôùp CWinThread,
CcmdTarget vaø CObject. Trong ví duï Cvidu1App laø giao dieän vôùi
Windows. Khi moät tình huoáng xaûy ra trong Windows thì thoâng
ñieäp seõ gôûi ñeán chöông trình Cvidu1App ñeå cho noù bieát ñöôïc
caùi gì xaûy ra. Ví duï neáu moät phím ñöôïc nhaán, thì thoâng ñieäp
WM_KEYDOWN seõ ñöôïc phaùt ra vaø chuyeån cho Cvidu1App vaø
ñeán phieân chöông trình seõ khôûi ñoäng haøm giaûi quyeát vaán
ñeà naøy laø OnKeyDown().
// Vidu1 . h : ma in hea d e r file for the VIDU1 ap p lic a t i o n
#if!
d ef in e d ( A F X_VIDU1_H__B6 8 2 FE 1 1_E5 4 B_ 4 D 8 0 _ A 4 9 B_ 3 C 3
AEAE1FF8 5__INCLUDED_)
#d e fi n e AFX_VIDU1_H__B6 8 2FE 1 1_E 5 4B_ 4D 8 0 _ A4 9 B _3 C3 A
EAE1FF85__INCLUDED_
#if _MSC_VER > 100 0
#pr a g m a onc e
#en d i f // _MSC_VER > 100 0
#ifn d e f __AFXWIN_H__
#er r o r includ e 'st d a f x . h' bef o r e inclu di n g this file
for PCH
#en d i f #incl u d e "res o u r c e . h" // main sy m b o l s
/////////////////////////////////////////////////////////////////////////////
Trang 2

L p trình C trên Winậ
// CVidu1App:
// See Vidu1.cpp for the implementation of this class
// class CVidu1App : public CWinApp
{
public:
CVidu1App();
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CVidu1App)
public:
virtual BOOL InitInstance();
//}}AFX_VIRTUAL
// Implementation
//{{AFX_MSG(CVidu1App)
afx_msg void OnAppAbout();
// NOTE - the ClassWizard will add and remove member functions
here.
// DO NOT EDIT what you see in these blocks of generated code
!
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before
the previous line.
#endif // !
defined(AFX_VIDU1_H__B682FE11_E54B_4D80_A49B_3C3AEAE1FF85__
INCLUDED_)
Trong lôùp ñoái töôïng coù khai baùo caùc haøm constructor
CVidu1App(), haøm thaønh vieân bò phuû quyeát InitInstance() vaø
OnAppAbout(). Vieäc ñònh nghóa ñöôïc thöïc hieän trong taäp tin
Vidu1.cpp.
AppWizard cho haøm OnAppAbout() naèm giöõa caëp chuù
giaûi ñaëc bieät:
// { { A FX_MS G( C vi d u 1 A p p )
Afx_m s g voi d OnA p p A b o u t ( ) ;
// } } A F X_ MS G
Duøng ñeå keát sinh ra baûng ñaùp öùng thoâng ñieäp. AFX_MSG
duøng ñeå ñaùnh daáu khôûi ñaàu vaø keát thuùc nhöõng muïc vaøo
lieân quan ñeán message map. Muïc vaøo naøy bao giôø cuõng baét
ñaàu bôûi afx_msg void theo sau laø teân haøm giaûi quyeát thoâng
ñieäp bao giôø cuõng baét ñaàu bôûi On.
Trang 3

L p trình C trên Winậ
Caëp chuù giaûi {{AFX_MSG … }}AFX_MSG seõ töông öùng
vôùi caëp chuù giaûi {{AFX_MSG_MAP …. }} AFX_MSG_MAP trong
taäp tin Vidu1.cpp
Haøm chuù giaûi maø ClassWizard söû duïng ñeå phuû quyeát
haøm virtual nhö InitIntance() seõ söû duïng macro AFX_VIRTUAL nhö
sau:
// { { A FX_VIRTUAL(CVi d u 1 A p p )
pu b lic:
vir t u a l BOOL InitIn s t a n c e ( ) ;
// } } A F X_ VIRTUAL
AFX_VIRTUAL duøng ñaùnh daáu khôûi ñaàu vaø keát thuùc
nhöõng khai baùo cuûa caùc haøm virtual maø ClassWizard seõ phuû
quyeát trong taäp tin .H cuûa lôùp.
Cuoái cuøng taäp tin khai baùo lôùp naøy laø doøng macro
DECLARE_MESSAGE_MAP() baùo cho bieát laø treân taäp tin .CPP seõ
coù phaàn ñònh nghóa moät “baûn ñoà thoâng ñieäp” (message
map) lieân quan ñeán caùc haøm giaûi quyeát thoâng ñieäp baét
ñaàu bôûi macro BEGIN_MESSAGE_MAP vaø keát thuùc bôûi macro
END_MESSAGE_MAP nhö sau:
BEGIN_MESSAGE_MAP(CVidu1App, CWinApp)
//{{AFX_MSG_MAP(CVidu1App)
ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
// NOTE - the ClassWizard will add and remove mapping macros here.
// DO NOT EDIT what you see in these blocks of generated code!
//}}AFX_MSG_MAP
// Standard file based document commands
ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)
ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)
// Standard print setup command
ON_COMMAND(ID_FILE_PRINT_SETUP,
CWinApp::OnFilePrintSetup)
END_MESSAGE_MAP()
Taäp tin STDAFX.H
Taäp tin STDAFX.H chuû yeáu include 3 taäp tin AFXWIN.H ,
AFXEXT.H vaø AFXDISP.H . Caùc leänh naøy baûo ñaûm laø öùng
duïng coù theå duøng nhöõng lôùp trong caùc taùc vuï chuaån vaø
nôùi roäng cuõng nhö lôùp lieân quan ñeán ActiveX Control (OLE).
Trang 4

L p trình C trên Winậ
#if!
defined(AFX_STDAFX_H__0CF6915F_3416_4CE6_AE4D_815051CD1243__INCL
UDED_)
#defineAFX_STDAFX_H__0CF6915F_3416_4CE6_AE4D_815051CD1243__I
NCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#define VC_EXTRALEAN
#include <afxwin.h> // MFC core and standard components
#include <afxext.h> // MFC extensions
#include <afxdisp.h> // MFC Automation classes
Taäp tin MainFrm.H
Taäp tin naøy chöùa caùc khai baùo lieân quan ñeán lôùp khung
cöûa soå chính (main frame) cuûa öùng duïng, CmainFrame. Lôùp
naøy laø haäu dueä cuûa lôùp CframeWnd. Lôùp CmainFrame naøy
xem nhö laø theå hieän cöûa soå cuûa öùng duïng ñoái theá giôùi
beân ngoaøi.
#if!
defi n e d ( AFX_MAINFRM_H__D2F0 1 5 2 D_ 9 3 B 3 _ 4 3 2 9 _ 9 7 B 6 _ 5 DCE
D9B3 9 D 0 0 __INCLUDED_)
#d e fi n e
AFX_MAINFRM_H__D2F0 1 5 2 D_ 9 3 B 3_ 4 3 2 9 _ 9 7 B 6 _ 5 DCED 9B 3 9 D 0
0__INCLUDED_
#if _MSC_VER > 100 0
#pr a g m a onc e
#en d i f // _MSC_VER > 100 0
clas s CMainFr a m e : pu blic CFra m e W n d
{
pro t e c t e d : // cre a t e fro m seri aliz a t i o n onl y
CMainFr a m e ( ) ;
DECLARE_DYNC REATE(CM ai nFr a m e )
// Attri b u t e s
pu b lic:
// Op e r a t i o n s
pu b lic:
// Ov e r rid e s
// Clas s W i z a r d g e n e r a t e d virtu al func t i o n ov e r r i d e s
// { { A F X_ VIRTUAL(CM ai n Fr a m e )
Trang 5

