intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Lập trình windows với MFC Micrisoft visual C++6.0- P8

Chia sẻ: Cong Thanh | Ngày: | Loại File: PDF | Số trang:10

108
lượt xem
25
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

windows cung cấp một hệ thống các công cụ đồ họa cơ bản như sau: Pen : Công cụ vẽ điểm hoặc đường thẳng. Brush : Công cụ tô màu. Font : Công cụ qui định kiểu ký tự cho nội dung văn bản. Bitmap : Công cụ quản lý vùng ảnh điểm. Palette : Công cụ quản lý bộ màu hiển thị. Region : Công cụ quản lý vùng hiển thị có dạng bất kỳ.

Chủ đề:
Lưu

Nội dung Text: Lập trình windows với MFC Micrisoft visual C++6.0- P8

  1. void DockControlBar ( Thöïc haønh 2: Thöïc hieän öùng duïng töông töï VD28, caøi heä thoáng menu CControlBar * pBar, // Con troû ñoái töôïng toolbar töông töï ví duï chöông 7 cho ñoái töôïng frame window. UINT nDockBarID // Thoâng soá aán ñònh Taïo môùi döï aùn VD29 töông töï döï aùn VD28. ); Keát ñoái töôïng toolbar vaøo frame window, söû duïng khi tröôùc ñoù ñònh Taïo môùi menu resource vôùi soá hieäu IDR_MAINFRAME, thieát keá menu caùch keát toolbar cho frame window laø CBRS_ALIGN_ANY. Thoâng soá naøy nhö moâ taû ôû chöông 7. aán ñònh phaûi phuø hôïp vôùi ñaëc tính cuûa pBar, coù theå laø caùc giaù trò sau: Taïo môùi baûng phím taét vôùi soá hieäu IDR_MAINFRAME. Khai baùo noäi AFX_IDW_DOCKBAR_TOP : Keát ôû caïnh treân dung baûng phím taét nhö muïc (7.5). AFX_IDW_DOCKBAR_BOTTOM : Keát ôû caïnh döôùi Haønh vi InitInstance cuûa CEmpApp thöïc hieän khai baùo con troû ñoái AFX_IDW_DOCKBAR_LEFT : Keát ôû caïnh traùi töôïng CFrameWnd*. Duøng haønh vi LoadFrame cuûa ñoái töôïng naøy ñeå AFX_IDW_DOCKBAR_RIGHT : Keát ôû caïnh phaûi khôûi ñoäng thoâng soá cho noù töø caùc resource lieân quan: virtual BOOL OnCreateClient ( BOOL CEmpApp::InitInstance() LPCREATESTRUCT lpcs, // Con troû ñeán caáu truùc chöùa { CCreateContext* pContext // Caùc thoâng soá lieân keát. CFrameWnd *main = new CFrameWnd; m_pMainWnd = main; ); Haønh vi ñöôïc thöïc hieän khi caùc view ñaõ ñöôïc taïo xong. Keá thöøa haønh main->LoadFrame(IDR_MAINFRAME); vi naøy ñeå aán ñònh caùc thoâng soá rieâng cuûa öùng duïng. main->ShowWindow(SW_SHOW); // Show the frame window virtual CWnd* GetMessageBar( ); Traû veà con troû troû ñeán ñoái töôïng return TRUE; statusbar tröïc thuoäc. } 10.5 SÖÛ DUÏNG FRAME WINDOW LAØM GIAO DIEÄN CHÍNH: 10.5.2 String Table vaø CFrameWnd: Keá thöøa töø CWnd, CFrameWnd vaø caùc lôùp keá thöøa töø noù coù theå duøng khai StringTable, moät thaønh phaàn trong resource cuûa öùng duïng, duøng chöùa caùc baùo caùc ñoái töôïng cöûa soå giao dieän chính cuûa öùng duïng. giaù trò haèng chuoãi. Moãi haèng chuoãi coù moät soá hieäu phaân bieät. Vieäc taïo môùi 10.5.1 Thöïc hieän öùng duïng vôùi giao dieän chính laø CFrameWnd: haèng chuoãi trong resource cöûa öùng duïng ñöôïc thöïc hieän nhö sau: Thöïc haønh 1: Thöïc hieän öùng duïng vôùi cöûa soå chính laø frame window. Taïo môùi resource (nhö 2.8). Löu yù choïn resource type laø String Table. Taïo döï aùn VD28 chæ chöùa lôùp CEmpApp keá thöøa töø CWinApp. Trong haønh vi InitInstance cuûa CEmpApp, khai baùo bieán con troû ñoái töôïng CFrameWnd* vaø duøng noù laøm cöûa soå giao dieän chính: BOOL CEmpApp::InitInstance( ) { CFrameWnd *main = new CFrameWnd; Double-click hoaëc goõ Enter treân doøng troáng cuûa StringTable: m_pMainWnd = main; // frame window as the main window main->Create ( AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW, LoadCursor(IDC_MAINFRAME), NULL, LoadIcon(IDR_MAINFRAME) ), "Emp.Example 28" ); main->ShowWindow(SW_SHOW); // Show the frame window return TRUE; } 124Laäp trình Windows vôùi MFC - Microsoft Visual C++ 6.0 - Leâ Ngoïc Thaïnh - lntmail@yahoo.com Khung cöûa soå giao dieän chính 123
  2. - ID = Soá hieäu haèng chuoãi. int CEmpFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) - Caption = Noäi dung haèng chuoãi. Goõ phím Enter ñeå keát thuùc. { Cuoái cuøng, löu vaø ñoùng maøn hình khai baùo StringTable. if (CFrameWnd::OnCreate( lpCreateStruct ) == -1) return -1; Φ Söû duïng haèng chuoãi trong StringTable: Coù theå söû duïng haèng chuoãi trong // The IDs of all statusbar’panes StringTable laøm giaù trò cho bieán chuoãi trong chöông trình. Ñoái vôùi bieán UINT ID_array[3] = { 1, 1, ID_SEPARATOR }; chuoãi ñöôïc quaûn lyù bôûi ñoái töôïng chuoãi CString, xöû lyù naøy ñöôïc thöïc hieän // Thanh statusbar chính m_status.Create( this ); thoâng qua haønh vi sau: m_status.SetIndicators( ID_array, 3 ); BOOL CString::LoadString ( m_status.SetPaneText( 0, "Mr.Emp" ); UINT nID // Soá hieäu haèng chuoãi trong resource m_status.SetPaneText( 1, "Hello world!" ); ); // Set the size of each pane on statusbar Sau ñaây laø moät ví duï khôûi taïo giaù trò chuoãi myString töø string resource: m_status.SetPaneInfo( 0, 1000, 0, 40 ); CString myString; m_status.SetPaneInfo( 1, 1001, 0, 70 ); myString.LoadString (ID_GAME_OPTION ); m_status.SetPaneInfo( 2, ID_SEPARATOR, 0, 300 ); return 0; Φ Duøng haèng chuoãi trong Stringtable laøm tieâu ñeà frame window: } Haèng chuoãi coù soá hieäu truøng vôùi giaù trò soá hieäu laøm tham soá nIDResource Thöïc haønh 4: Vieát öùng duïng nhö VD30 vôùi thanh coâng cuï coù 4 nuùt choïn cho haønh vi khôûi taïo thoâng soá LoadFrame cuûa ñoái töôïng frame window seõ töông öùng 4 muïc choïn trong heä thoáng menu. ñöôïc söû duïng laøm tieâu ñeà cuûa frame window naøy. Taïo döï aùn VD31 nhö VD30. Môû döï aùn VD29. Taïo môùi toolbar resource coù soá hieäu IDR_MAINFRAME vôùi caùc nuùt Taïo môùi haèng chuoãi “Emp.Example 29” trong StringTable vôùi soá hieäu choïn töông öùng caùc muïc menu. laø IDR_MAINFRAME. Boå sung ñoái töôïng thuoäc tính m_toolbar thuoäc lôùp CToolBar cho lôùp Thöïc hieän chaïy thöû öùng duïng vaø quan saùt tieâu ñeà cöûa frame window. CEmpFrame. Haønh vi OnCreate cuûa CEmpFrame thöïc hieän khôûi taïo Thöïc haønh 3: Thöïc hieän öùng duïng nhö VD29; thanh statusbar vôùi ba muïc thoâng soá cho caùc ñoái töôïng m_status vaø m_toolbar, sau ñoù keát ñoái töôïng (pane): muïc thöù nhaát chöùa noäi dung "Mr.Emp", muïc thöù hai chöùa noäi dung m_toolbar vaøo frame window "Hello world!", muïc thöù ba hieån thò thoâng tin hoaït ñoäng cuûa öùng duïng. int CEmpFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) HD: CFrameWnd khoâng coù saün statusbar. Duøng CEmpFrame keá thöøa { CFrameWnd vaø boå sung ñoái töôïng thuoäc tính naøy. Haønh vi OnCreate cuûa // Caùc caøi ñaët nhö VD30 ... CEmpFrame thöïc hieän khôûi taïo thoâng soá cho ñoái töôïng statusbar. Duøng m_toolbar.CreateEx ( this, CEmpFrame khai baùo ñoái töôïng cöûa soá chính cuûa öùng duïng. TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP Taïo döï aùn VD30 nhö VD29. | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY ); Boå sung lôùp CEmpFrame keá thöøa CFrameWnd. Xem (5.4.1). m_toolbar.LoadToolBar ( IDR_MAINFRAME ); Boå sung ñoái töôïng thuoäc tính protected m_status thuoäc lôùp CStatusBar m_toolbar.EnableDocking ( CBRS_ALIGN_ANY ); this->EnableDocking ( CBRS_ALIGN_ANY ); cho lôùp CEmpFrame: this->DockControlBar( &m_toolbar, AFX_IDW_DOCKBAR_TOP ); CStatusBar m_status; return 0; Boå sung haønh vi OnCreate (xöû lyù WM_CREATE) cho CEmpFrame vaø } thöïc hieän caøi ñaët nhö sau: 126Laäp trình Windows vôùi MFC - Microsoft Visual C++ 6.0 - Leâ Ngoïc Thaïnh - lntmail@yahoo.com Khung cöûa soå giao dieän chính 125
  3. Haønh vi InitInstance cuûa CEmpApp söû duïng lôùp CEmpFrame khai baùo - Haønh vi OnPaint thöïc hieän veõ chöõ chaïy: ñoái töôïng cöûa soå chính cuûa öùng duïng: void CEmpView::OnPaint() BOOL CEmpApp::InitInstance() { { static char mess[] = "Chao cac ban ! "; CEmpFrame *main = new CEmpFrame; char ch; m_pMainWnd = main; UINT i; CPaintDC dc(this); // device context for painting main->LoadFrame(IDR_MAINFRAME); ch = mess[0]; main->ShowWindow(SW_SHOW); for (i=0; i < strlen(mess)-1; i++) return TRUE; mess[i] = mess[i+1]; } mess[i] = ch; Thöïc haønh 5: Thöïc hieän öùng duïng töông töï VD31. Trong frame window, dc.TextOut(10, 10, mess, 15); caøi ñaët cöûa soå view chöùa doøng chöõ chaïy kieåu baûng chöõ ñieän töû. } Taïo döï aùn VD32 töông töï VD31. Duøng lôùp CEmpView khai baùo ñoái töôïng view trong CEmpFrame: Boå sung lôùp CEmpView keá thöøa töø CWnd. CEmpView ñaûm nhaän vieäc - Boå sung thuoäc tính protected m_view thuoäc lôùp CEmpView vaøo lôùp hieån thò noäi dung chöõ chaïy. Caùc caøi ñaët caàn thieát nhö sau: CEmpFrame. - Haønh vi OnCreate thöïc hieän caøi ñaët timer: - Haønh vi OnCreate cuûa CEmpFrame thöïc hieän khôûi taïo thoâng soá phuø int CEmpView::OnCreate(LPCREATESTRUCT lpCreateStruct) hôïp cho ñoái töôïng m_view; duøng soá hieäu cho m_view laø { AFX_IDW_PANE_FIRST (view maëc nhieân cuûa frame) if (CWnd::OnCreate( lpCreateStruct) == -1 ) return -1; int CEmpFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) SetTimer( ID_TIMER, 300, NULL ); // Interval = 300ms { return 0; ... // Nhö caøi ñaët cuûa VD31 } m_view.Create ( NULL, NULL, AFX_WS_DEFAULT_VIEW, - Haønh vi OnDestroy huûy boû timer: CRect(0,0,0,0), this, AFX_IDW_PANE_FIRST); return 0; void CEmpView::OnDestroy() } { - Haønh vi PreCreateWindow thöïc hieän huûy thoâng soá aán ñònh daïng KillTimer( ID_TIMER ); "chìm xuoáng" cho vuøng client (chöùa view – to get a nice look): CWnd::OnDestroy(); } BOOL CEmpFrame::PreCreateWindow(CREATESTRUCT& cs) - Haønh vi OnTimer kích hoaït OnPaint: { if (!CFrameWnd::PreCreateWindow(cs)) void CEmpView::OnTimer(UINT nIDEvent) return FALSE; { cs.dwExStyle &= ~WS_EX_CLIENTEDGE; if (nIDEvent == ID_TIMER) { return TRUE; Invalidate(); // Generates a WM_PAINT } } CWnd::OnTimer(nIDEvent); Duøng CEmpFrame laøm cöûa soå chính cuûa öùng duïng (nhö VD31). } 128Laäp trình Windows vôùi MFC - Microsoft Visual C++ 6.0 - Leâ Ngoïc Thaïnh - lntmail@yahoo.com Khung cöûa soå giao dieän chính 127
  4. Thöïc haønh 6: Thöïc hieän öùng duïng nhö VD32. Khi choïn muïc Start cuûa BOOL CEmpFrame::OnCmdMsg ( menu thì maøn hình view thöïc hieän chöõ chaïy, ñoàng thôøi noäi dung muïc UINT nID, int nCode, void *pExtra, chuyeån thaønh Stop. Neáu ngöôøi duøng choïn laïi muïc naøy (Stop), hoaït ñoäng AFX_CMDHANDLERINFO *pHandlerInfo ) { chaïy chöõ döøng laïi vaø noäi dung muïc choïn chuyeån thaønh Start. // Dispatch command messages to m_view Taïo döï aùn VD33 töông töï VD32. Boå sung thuoäc tính m_isRun kieåu BOOL cho lôùp CEmpView. m_isRun if (m_view.OnCmdMsg(nID, nCode, pExtra, pHandlerInfo)) seõ laøm côø hieäu cho chöõ chaïy. Moät soá chænh söûa sau cuûa CEmpView: return TRUE; // message was processed by m_view - Khôûi ñaàu aán ñònh khoâng chaïy chöõ: return CFrameWnd::OnCmdMsg ( nID, nCode, pExtra, pHandlerInfo ); int CEmpView::OnCreate(LPCREATESTRUCT lpCreateStruct) } { if (CWnd::OnCreate(lpCreateStruct) == -1) 10.5.3 Duøng MFC wizard taïo öùng duïng vôùi giao dieän chính framewindow: return -1; Ñeå ngöôøi duøng coù ngay moät döï aùn côõ VD32 maø khoâng phaûi maát coâng thöïc isRun = FALSE; // no animation hieän caùc coâng vieäc nhö treân, MFC wizard cung caáp chöùc naêng hoã trôï taïo SetTimer( ID_TIMER, 300, NULL ); nhanh döï aùn vôùi cöûa soå chính laø moät frame window. Caùch söû duïng chöùc naêng return 0; hoã trôï naøy nhö sau: } Choïn menu File / New. - Haønh vi OnTimer() döïa treân m_isRun ñeå haønh ñoäng: void CEmpView::OnTimer(UINT nIDEvent) { if (nIDEvent == ID_TIMER) { if ( isRun ) Invalidate(); // animation allowed ? } CWnd::OnTimer(nIDEvent); } - Boå sung haønh vi traû lôøi WM_COMMAND phaùt sinh bôûi muïc choïn ID_GAME_START (Start/Stop) treân menu. Ñoàng thôøi ñieàu chænh noäi dung muïc thoâng baùo cuûa menu cho phuø hôïp: void CEmpView::OnGameStart() { isRun = !isRun; CMenu *theMenu = GetParent()->GetMenu(); theMenu->ModifyMenu(ID_GAME_START, MF_BYCOMMAND, ID_GAME_START, (isRun)? "&Stop" : "&Start" ); } Boå sung haønh vi OnCmdMsg cho CEmpFrame ñeå chuyeån caùc message Ñieàn caùc thoâng tin trong hoäp hoäi thoaïi New, Sau ñoù choïn OK. WM_COMMAND cho m_view: m_view trong lôùp CEmpFrame chæ laø cöûa soå con, khoâng tröïc tieáp nhaän WM_COMMAND töø menu cöûa soå cha. 130Laäp trình Windows vôùi MFC - Microsoft Visual C++ 6.0 - Leâ Ngoïc Thaïnh - lntmail@yahoo.com Khung cöûa soå giao dieän chính 129
  5. AÁn ñònh nhö treân. Choïn Next. Choïn Next. Choïn StatusBar vaø ToolBar. Sau ñoù choïn Next AÁn ñònh nhö treân. Choïn Next. 132Laäp trình Windows vôùi MFC - Microsoft Visual C++ 6.0 - Leâ Ngoïc Thaïnh - lntmail@yahoo.com Khung cöûa soå giao dieän chính 131
  6. Choïn cô cheá lieân keát vôùi thö vieän MFC. Sau ñoù choïn Next. Cuoái cuøng, aán ñònh teân taäp tin chöùa khai baùo caùc lôùp. Choïn Finish. THÖÏC HAØNH: 1. Töông töï VD33. Khi ngöôøi duøng choïn muïc Option thì hieån thò dialog vôùi hai muïc nhaäp: noäi dung chuoãi chaïy vaø toác ñoä chaïy chöõ. Neáu ngöôøi duøng click choïn OK thì thoâng tin nhaäp trong dialog seõ ñöôïc aùp duïng cho doøng chöõ chaïy trong view. 2. Töông töï VD33. Thay hoäp hieån thò caâu thoâng baùo "Mr.Emp" baèng moät chieác ñoàng hoà coù daïng hh:mm:ss chaïy theo thôøi gian löu trong maùy. HD: Caøi timer cho CEmpFrame. Söû duïng CTime cuûa MFC (xem VD34). 3. Caøi ñaët muïc progressbar treân thanh statusbar cuûa öùng duïng. 4. Vieát öùng duïng vôùi dialog giao dieän chính coù thanh traïng thaùi. 5. Vieát öùng duïng vôùi dialog giao dieän chính coù thanh coâng cuï vaø thanh traïng thaùi. 6. Quan saùt troø chôi line. Phaân tích vaø thöïc hieän öùng duïng naøy trong VC. Khung cöûa soå giao dieän chính 133
  7. CHÖÔNG 11: virtual BOOL OnNewDocument( ); Haønh vi ñöôïc thöïc hieän moãi khi ñoái töôïng CDocument ñöôïc taïo môùi; keá thöøa ñeå caøi ñaët khôûi taïo rieâng. Caùc KIEÁN TRUÙC Document & View virtual BOOL OnOpenDocument ( LPCTSTR lpszPathFileName // Ñöôøng daãn vaø teân taäp tin ); Haønh vi ñöôïc thöïc hieän khi ñoái töôïng CDocument chuaån bò nhaän noäi MFC hoã trôï maïnh meõ caùc döï aùn söû duïng döõ lieäu, bao goàm döõ lieäu daïng dung töø taäp tin; keá thöøa ñeå caøi ñaët xöû lyù rieâng veà vieäc ñoïc taäp tin. vaên baûn (text), daïng vaên baûn keøm hình aûnh vaø ñònh daïng (löu döôùi daïng vaên virtual BOOL OnSaveDocument ( baûn – rich text format vaø löu döôùi daïng maõ nhò phaân – compound file), daïng LPCTSTR lpszPathName // Ñöôøng daãn vaø teân taäp tin löu tröõ treân caùc heä quaûn trò cô sôû döõ lieäu vaø truy xuaát thoâng qua ODBC, ADO. ); Haønh vi ñöôïc thöïc hieän khi noäi dung cuûa document saép ñöôïc löu vaøo ÖÙng duïng söû duïng döõ lieäu coù theå deã daøng phaùt trieån treân VC nhôø MFC taäp tin. Vieäc keá thöøa haønh vi naøy nhaèm thöïc hieän xöû lyù löu tröõ theo cung caáp boä khung chuaån cho caùc döï aùn thao taùc döõ lieäu. Boä khung naøy bao caùch rieâng cuûa öùng duïng. goàm ba thaønh phaàn: Document-View-Frame (DVF). Trong ñoù: BOOL IsModified( ); Traû veà tình traïng caäp nhaät döõ lieäu trong document Document: Quaûn lyù toaøn boä noäi dung döõ lieäu cuûa öùng duïng ñöôïc ; =TRUE (coù chænh söûa) hoaëc =FALSE (khoâng coù chænh söûa). löu tröõ trong boä nhôù. View: Thöïc hieän chöùc naêng hieån thò vaø quaûn lyù moät phaàn 11.2 CView: döõ lieäu cuûa document. CView, lôùp keá thöøa töø lôùp CWnd, giuùp quaûn lyù thaønh phaàn view cuûa öùng Frame Window: Chöùa view, ñieàu phoái command message töø ngöôøi duïng. Trong boä ba DVF, view laø thaønh phaàn giao dieän quan troïng cho pheùp duøng ñeán caùc view moät caùch thích hôïp. ngöôøi duøng thao taùc döõ lieäu cuûa öùng duïng moät caùch deã daøng vaø hieäu quaû. Boä khung naøy ñöôïc thöïc hieän thoâng qua caùc lôùp lieân quan sau ñaây. CView( ); Taïo laäp ñoái töôïng view. virtual void OnInitialUpdate( ); Haønh vi ñöôïc thöïc hieän khi ñoái töôïng 11.1 CDocument: view ñöôïc keát vaøo danh saùch caùc ñoái töôïng view cuûa document. Vieäc CDocument laø lôùp ñoái tuôïng quaûn lyù moät noäi dung döõ lieäu (Document). keá thöøa nhaèm caøi ñaët caùc aán ñònh khôûi taïo thoâng soá cho view. CDocument( ); Taïo laäp ñoái töôïng roãng. virtual void OnActivateView ( void AddView ( BOOL bActivate, // =TRUE: kích hoaït ; vaø ngöôïc laïi CView* pView // Con troû ñoái töôïng view CView* pActivateView, // Ñoái töôïng view ñöôïc kích hoaït ); Boå sung view vaøo danh saùch caùc view cuûa document. CView* pDeactiveView // Ñoái töôïng view bò ngöøng hoaït ñoäng void RemoveView ( ); Haønh vi ñöôïc thöïc hieän moãi khi ñoái töôïng view ñöôïc kích hoaït hoaëc CView* pView // Con troû ñoái töôïng view thoâi kích hoaït. ); Loaïi boû moät view ra khoûi danh saùch caùc view cuûa document. virtual void OnActivateFrame ( void UpdateAllViews ( UINT nState, // Traïng thaùi kích hoaït CView* pSender, // Ñoái töôïng view mieãn caäp nhaät CFrameWnd* pFrameWnd // Con troû ñoái töôïng frame chöùa view LPARAM lHint = 0L, // Soá hieäu caäp nhaät ); Haønh vi ñöôïc thöïc hieän moãi khi ñoái töôïng frame chöùa view ñöôïc kích CObject* pHint = NULL // Caáu truùc chöùa thoâng tin caäp nhaät hoaït. ); Thoâng baùo caùc view trong danh saùch view cuûa document caäp nhaät laïi Traïng thaùi kích hoaït cuûa frame chöùa view coù theå laø: noäi dung hieån thò. WA_INACTIVE : Frame chöùa view ngöøng hoaït ñoäng. const CString& GetTitle( ); Traû veà noäi dung tieâu ñeà cuûa döõ lieäu. WA_ACTIVE : Frame chöùa view ñöôïc kích hoaït. virtual void DeleteContents( ); Xoùa roãng noäi dung document. 134 Laäp trình Windows vôùi MFC - Microsoft Visual C++ 6.0 - Leâ Ngoïc Thaïnh - lntmail@yahoo.com Caùc kieán truùc Document & View 135
  8. CDocument* GetDocument( ); Traû veà con troû ñoái töôïng CDocument virtual BOOL GetDocString ( ñang söû duïng view. CString& rString, // Bieán chuoãi chöùa keát quaû virtual void OnUpdate ( enum DocStringIndex index // Chæ soá muïc thoâng tin caàn laáy. CView* pSender, // Ñoái töôïng view laøm thay ñoåi döõ lieäu ); LPARAM lHint, // Töông töï UpdateAllViews() Chæ soá muïc thoâng tin caàn laáy coù theå laø: CObject* pHint - CDocTemplate::windowTitle : // cuûa CDocument Tieâu ñeà - CDocTemplate::docName : ); Haønh vi ñöôïc thöïc hieän khi noäi dung döõ lieäu trong document lieân Teân document. - CDocTemplate::fileNewName : Teân maëc nhieân duøng cho taäp tin quan ñeán view ñöôïc caäp nhaät. BOOL DoPreparePrinting( CPrintInfo* pInfo ); Môû hoäp in aán. döõ lieäu ñöôïc taïo môùi. Caû CDocument vaø CView trong boä DVF ñeàu coù theå ñoïc, ghi döõ lieäu treân 11.3 CFrameWnd: ñoái töôïng löu tröõ döõ lieäu thoâng qua haønh vi keá thöøa ñöôïc: Serialize. CFrameWnd laø lôùp ñoái töôïng quaûn lyù khung cöûa soå giao dieän chính cuûa virtual void Serialize( CArchive& ar ); öùng duïng (chöông 10). Tham gia vaøo boä ba DVF cuûa öùng duïng söû duïng döõ throw( CMemoryException ); // Duøng khi ar lieân quan boä nhôù trong. lieäu, lôùp ñoái töôïng CFrameWnd coù caùc hoaït ñoäng xöû lyù boå sung nhö sau: throw( CArchiveException ); // Duøng khi ar laø Archive treân ñóa. Khi frame ñöôïc kích hoaït, noù goïi haønh vi OnActivateView cuûa view. throw( CFileException ); // Duøng khi ar laø File. Neáu frame ñöôïc khôûi taïo vôùi thoâng soá daïng FWS_ADDTOTITLE thì tieâu ñeà cuûa döõ lieäu (document) hieån thò trong view thuoäc farme seõ ñöôïc 11.5 HOÃ TRÔÏ TÖØ PHÍA ÑOÁI TÖÔÏNG QUAÛN LYÙ ÖÙNG DUÏNG: ñöa leân tieâu ñeà cuûa frame. Lôùp CWinApp coù caùc haønh vi lieân quan vieäc khôûi taïo öùng duïng söû duïng döõ Frame thöïc hieän ñieàu phoái command message cho view. lieäu vaø thao taùc döõ lieäu döïa treân boä khung DVF nhö sau: void AddDocTemplate ( 11.4 CDocTemplate: CDocTemplate* pTemplate // Con troû ñoái töôïng quaûn lyù boä DVF CDocTemplate laø lôùp ñoái töôïng quaûn lyù boä ba DVF cuûa MFC. Boä ba naøy ); Ñöa moät boä ba DVF vaøo danh saùch döõ lieäu quaûn lyù bôûi öùng duïng. bao goàm CDocument – CView – CFrameWnd. BOOL ProcessShellCommand ( CCommandLineInfo& rCmdInfo ); CDocTemplate ( Thöïc hieän taùc vuï xöû lyù döõ lieäu theo yeâu caàu cuûa system shell. ÖÙng UINT nIDResource, // Soá hieäu caùc resource lieân quan: duïng chæ cho pheùp xöû lyù döõ lieäu (taäp tin) phuø hôïp vôùi chöùc naêng cuûa CRuntimeClass* pDocClass, // menu, icon, phím taét, stringTable caùc boä DVF trong danh saùch döõ lieäu quaûn lyù bôûi öùng duïng. CRuntimeClass* pFrameClass, rCmdInfo : Chöùa caùc thoâng soá doøng leänh (neáu coù) bao goàm teân döõ CRuntimeClass* pViewClass lieäu, leänh thao taùc (edit, open, ...) treân döõ lieäu do shell chuyeån ñeán. ); Taïo laäp vaø khôûi taïo thoâng soá cho ñoái töôïng CDocTemplate. void ParseCommandLine ( CCommandLineInfo& rCmdInfo ); - pDocClass: Con troû ñoái töôïng CRuntimeClass quaûn lyù thoâng tin cuûa Chuaån bò thoâng soá caàn thieát trong rCmdInfo ñeå chuyeån cho haønh vi lôùp document taïi thôøi ñieåm thöïc thi chöông trình. ProcessShellCommand. Caùc thoâng soá naøy töông öùng vôùi noäi dung tham - pFrameClass: Con troû ñoái töôïng CRuntimeClass quaûn lyù thoâng tin soá doøng leänh cuûa öùng duïng. cuûa lôùp frame window taïi thôøi ñieåm thöïc thi chöông trình. afx_msg void OnFileNew(); Haønh vi traû lôøi cho WM_COMMAND - pViewClass: Con troû ñoái töôïng CRuntimeClass quaûn lyù thoâng tin ñöôïc phaùt ra bôûi muïc menu coù soá hieäu ID_FILE_NEW. cuûa lôùp view taïi thôøi ñieåm thöïc thi chöông trình. afx_msg void OnFileOpen(); Haønh vi traû lôøi cho WM_COMMAND Con troû chöùa thoâng tin thi haønh cuûa moät lôùp nhaän ñöôïc töø macro sau: ñöôïc phaùt ra bôûi muïc menu coù soá hieäu ID_FILE_OPEN. CRuntimeClass* RUNTIME_CLASS ( Teân_Lôùp ) 136 Laäp trình Windows vôùi MFC - Microsoft Visual C++ 6.0 - Leâ Ngoïc Thaïnh - lntmail@yahoo.com Caùc kieán truùc Document & View 137
  9. afx_msg void OnFilePrintSetup(); Haønh vi xöû lyù WM_COMMAND Ñoái töôïng view: ñöôïc phaùt ra bôûi muïc menu coù soá hieäu ID_FILE_PRINT_SETUP. 11.6 TRÌNH TÖÏ TAÏO LAÄP CAÙC ÑOÁI TÖÔÏNG THAM GIA BOÄ DVF: Ñoái töôïng document: Nhaèm hoã trôï ngöôøi duøng thöïc hieän caùc döï aùn lieân quan ñeán vieäc söû duïng döõ lieäu, MFC cung caáp caùc boä DVF phoå bieán vaø caøi ñaët caùc boä naøy trong phaàn hoã trôï MFC Wizard. Sau ñaây laø moät soá boä DVF ñaëc tröng cuûa MFC. 11.7 TEXT DOCUMENT APPICATION: Choïn File / New: Ñoái töôïng Frame window: AÁn ñònh nhö treân. Choïn OK. 138 Laäp trình Windows vôùi MFC - Microsoft Visual C++ 6.0 - Leâ Ngoïc Thaïnh - lntmail@yahoo.com Caùc kieán truùc Document & View 139
  10. Choïn None (döõ lieäu chæ chöùa vaên baûn). Choïn Next. AÁn ñònh nhö treân. Choïn Next. Choïn None (khoâng söû duïng cô sôû döõ lieäu). Choïn Next. AÁn ñònh caùc muïc caàn caàn thieát: 140 Laäp trình Windows vôùi MFC - Microsoft Visual C++ 6.0 - Leâ Ngoïc Thaïnh - lntmail@yahoo.com Caùc kieán truùc Document & View 141
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2