Tài liệu Lập trình Windows với MFC Visual C++ 6.0 pdf

133 1.5K 41
Tài liệu Lập trình Windows với MFC Visual C++ 6.0 pdf

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

lntmail@yahoo.com : 1.1 Chương trình ( Program ) 1.2 Ứng dụng ( Application ) 1.3 Tiến trình ( Process ) 1.4 Tiểu trình (Thread ) 1.5 Thông điệp ( Message ) 1.5.1 Nguồn gốc của message 1.5.2 Các loại message 1.5.3 Số hiệu message (Message Indentifier – MessageID) 1.5.4 Đặc tả message 1.6 Cửa sổ giao diện (window) của ứng dụng 1.7 Message queue 1.8 Kiến trúc xử lý của ứng dụng trong Windows 1.9 Resource của ứng dụng : 2.1 Thư viện MFC (Microsoft Foundation Class) 2.2 Tiếp an MFC 2.3 Tạo ứng dụng windows với MFC như thế nào ? 2.4 Lớp quản lý tiểu trình CwinThread 2.5 Lớp quản lý tiểu trình giao diện chính CwinApp 2.6 Thực hiện ứng dụng đơn giản 2.7 Thực hiện ứng dụng giao tác đơn giản 2.8 Tạo mới Icon Resource cho ứng dụng 2.9 Lưu trữ chương trình nguồn 2.10 Lớp Cstring của MFC : 3.1 Các công cụ giao diện đồ họa 3.2 Device Context 3.3 Tọa độ trên giao diện đồ họa 3.4 Các lớp MFC hỗ trợ GDI 3.4.1 Các lớp đối tượng điểm, hình chữ nhật Trang 1 1 1 1 1 2 2 2 3 3 3 5 7 8 10 10 10 10 11 12 14 20 25 27 27 29 29 29 29 30 30 3.4.2 Lớp Cpen 3.4.3 Lớp CBrush 3.4.4 Lớp CFont 3.4.5 Lớp CBitmap 3.4.6 Lớp CPalette 3.4.7 Lớp CRgn 3.5 Lớp CDC 3.6 Lớp CImageList : 4.1 Cửa sổ giao diện 4.2 Lớp CWnd 4.3 Sử dụng đối tượng CWnd 4.3.1 Sử dụng CWnd làm giao diện chính của ứng dụng 4.3.2 Ứng dụng chỉ chạy một bản (instance) tại mỗi thời điểm : 5.1 Lớp xử lý message CCmdTarget: 5.2 Khai báo mục xử lý message trong MessageMap 5.3 Các lớp kế thừa CCmdTarget 5.4 MessageMap của lớp kế thừa CWnd trong ứng dụng 5.4.1 Cửa sổ của ứng dụng có chức năng hoạt động 5.4.2 WM_PAINT và hành vi OnPaint của CWnd : 6.1 DC và BITMAP 6.2 Ứng dụng với cửa sổ chính hiển thò ảnh 6.3 Sao chép ảnh từø DC đến DC, phóng to & thu nhỏ ảnh 6.4 DC trong bộ nhớ ( DC ảo) – vùng vẽ đệm lý tưởng 6.5 Ảnh chuyển động trong vùng client 6.6 CImageList – công cụ quản lý bộ ảnh cùng cỡ 6.7 CRgn – Cửa sổ có hình dạng tùy ý : 7.1 Đònh nghóa 7.2 Menu resoure 31 31 32 32 33 34 35 38 40 40 40 49 49 50 51 51 52 55 55 55 58 60 60 60 63 64 65 66 67 69 69 69 7.3 Sử dụng menu resource 7.4 Mục xử lý command message từ mục chọn của menu 7.5 Phím tắt (hot key ) cho mục chọn trên menu 7.6 Lớp quản lý menu – CMenu 7.7 Xử lý điều khiển mục chọn của menu : 8.1 CStatic 8.2 CEdit 8.3 CButton 8.4 ClistBox 8.5 CComboBox 8.6 CSpinButtonCtrl 8.7 CProgressCtrl 8.8 CscrollBar 8.9 CSliderBar : 9.1 Hộp hội thoại (Dialog) 9.2 Lớp CDialog 9.3 Tạo và sử dụng dialog trong chương trình 9.3.1 Tạo dialog resource 9.3.2 Khai báo lớp kế thừa CDialog sử dụng dialog resource 9.3.3 Sử dụng dialog trong chương trình 9.4 Liên kết giữa dialog và các thành phần khác 9.5 Sử dụng dialog làm giao diện chính của ứng dụng 9.5.1 Thực hiện ứng dụng với giao diện chính là dialog 9.5.2 Dùng MFC wizard tạo ứng dụng với giao diện dialog 9.6 Khai báo biến cho control trên dialog 9.7 Khai thác các tiện ích hỗ trợ : 10.1 Khung cửa sổ giao diện (Frame Window) 10.2 Thanh trạng thái (statusbar) & lớp CStatusbar 10.3 Thanh công cụ (toolbar) & lớp CToolBar 71 72 73 75 77 78 78 80 84 85 88 91 93 94 96 97 97 97 99 99 103 104 104 106 106 107 109 112 117 117 117 119 10.3.1 Thiết kế ToolBar resource 10.3.2 Dùng toolbar resource cho CToolBar của FrameWnd 10.4 Lớp CFrameWnd 10.5 Sử dụng frame window làm giao diện chính 10.5.1 Thực hiện ứng dụng với giao diện frame window 10.5.2 String Table và CFrameWnd 10.5.3 Dùng MFC wizard tạo ứng dụng giao diện framewindow : 11.1 CDocument 11.2 CView 11.3 CFrameWnd 11.4 CDoctemplate 11.5 Hỗ trợ từ phía đối tượng quản lý ứng dụng 11.6 Trình tự tạo lập các đối tượng tham gia bộ DVF 11.7 Text Document Appication 11.8 Rich Text Format (rtf) Document Appication 11.9 HTML Document View Appication 11.10 Một số lớp view đặc biệt 11.10.1 CListView 11.10.2 CTreeView 11.10.3 CSplitterWnd 11.10.4 Sử dụng splitterwnd trong frame window 11.10.5 Các ví dụ thực hành : 12.1 Tập tin INI 12.2 System Registry 12.3 Vùng Status Area trên Taskbar 12.4 Ứng dụng ScreenSaver 12.4.1 Đặc điểm 12.4.2 Tham số dòng lệnh 12.4.3 Đặc điểm giao tác với người dùng 12.4.4 Thực hiện ứng dụng ScreenSaver đơn giản 12.5 Ứng dụng sử dụng nhiều tiểu trình 12.5.1 Tiểu trình xử lý nội 120 121 121 123 123 124 130 134 134 135 136 136 137 138 139 143 146 149 149 150 152 154 155 158 158 160 162 167 168 168 170 171 175 175 12.5.2 Tiểu trình giao diện 12.5.3 Các hàm hỗ trợ 12.6 Lập trình Multimedia với MCI 12.7 Ấn đònh một số tính năng của Windows 12.8 Bẫy (hook) message (Windows Hook) 12.8.1 Các kiểu hook (Hook Type) 12.8.2 Danh sách hook (Hook Chain) 12.8.3 Thủ tục hook (Hook Procedure) 12.8.4 Các dòch vụ liên quan hook 12.8.5 Ứng dụng hook messages của keyboard 12.9 Cài đặt chế độ thực hiện ứng dụng tự động : 13.1 Giao thức truyền thông TCP/IP 13.1.1 Giới thiệu 13.1.2 Kiến trúc của giao thức TCP/IP trên mô hình DARPA 13.1.3 Đòa chỉ IP 13.1.4 Subnet 13.1.5 Subnet Mask 13.1.6 Host domain name 13.1.7 IP Routing 13.2 Lập trình TCP/IP với Winsock 13.2.1 Port 13.2.2 Socket 13.2.3 Một số cấu trúc dữ liệu của Winsock API 13.2.4 Một số dòch vụ của Winsock API 13.3 MFC với lập trình Winsock 13.3.1 Khởi động Winsock 13.3.2 Lớp CAsyncSocket 13.4 Lập trình Winsock cho giao thức UDP 13.5 Lập trình Winsock cho giao thức TCP 13.6 TCP với SMTP (Simple Mail Transfer Protocol) 13.6.1 Qui ước giữa ứng dụng gửi mail và nhận mail 13.6.2 Thiết kế ứng dụng gửi mail 13.7 TCP với Pop3 (Post Office Protocol – Version 3) 13.7.1 Qui ước giữa ứng dụng mail client và mail server 177 179 179 181 182 183 183 183 184 185 186 187 187 187 187 189 190 191 192 194 197 197 198 198 199 200 200 200 204 207 215 215 217 219 219 13.7.2 Thiết kế ứng dụng nhận mail 13.8 TCP với HTTP và FTP 13.8.1 Lớp CInternetSession 13.8.2 Lớp CInternetFile 13.8.3 Lớp CFtpConnection 13.8.4 Lớp CFtpFindFile 13.8.5 Lớp CHttpConnection 13.8.6 Lớp CHttpFile 13.8.7 Thực hiện ứng dụng FTP client đơn giản 13.8.8 Thực hiện ứng dụng HTTP client đơn giản : A.1 Lập trình hướng đối tượng (OOP) A.2 Các khái niệm A.2.1 Lớp (Class) A.2.2 Đối tượng (Object) A.2.3 Thuộc tính (Attribute) A.2.4 Hành vi (Method) A.2.5 Chương trình (Program) A.3 Đặc điểm lập trình hướng đối tượng A.4 Phân loại thuộc tính và hành vi A.5 Các hành vi đặc biệt A.6 Khai báo lớp, đối tượng trong C++ A.6.1 Khai báo lớp A.6.2 Khai báo đối tượng A.6.3 Sử dụng đối tượng trong chương trình A.7 Kế thừa trong C++ A.7.1 Kế thừa hành vi tạo lập A.7.2 Kế thừa hành vi hủy bỏ A.7.3 Thực hiện hành vi lớp cơ sở A.8 Khai báo hành vi toán tử số học A.9 Con trỏ this A.10 Hành vi virtual A.11 Thuộc tính và hành vi tónh 220 223 223 224 225 227 228 229 231 232 234 234 234 234 234 234 235 235 235 236 236 236 236 238 238 239 239 240 240 241 243 243 244 x}(|y Ngôn ngữ lập trình C++ được biết đến như là một trong những ngôn ngữ lập trình mạnh nhất nhờ khả năng của nó trong việc triển khai phần mềm ở các mức độ khác nhau. Từ mức hệ thống đến mức ứng dụng, từ lập trình cấu trúc đến lập trình hướng đối tượng, từ lập trình dựa trên thuật giải đến lập trình trí tuệ nhân tạo, và từ lập trình cơ sở dữ liệu đến lập trình cơ sở tri thức…, bất cứ đâu, khi mà người lập trình muốn thể hiện ý tưởng khoa học và nghệ thuật của mình trên máy tính thì C++ là một điều nghó đến trước tiên. Nhưng dù ý tưởng có bay bổng thế nào đi nữa thì cũng không thể bỏ qua vấn đề cài đặt mà môi trường cho ứng dụng là điều phải quan tâm. Với xu hướng sử dụng hệ điều hành Microsoft Windows như hiện nay, chúng ta buộc phải nghó đến việc cài đặt ứng dụng của mình trong môi trường này và khai thác nó sao cho ứng dụng hoạt động hiệu quả nhất. Microsoft Visual C++, sản phẩm của Microsoft, với khả năng biên dòch ưu việt và lối khai thác hệ thống rộng mở nhờ tập hợp lớp thư viện MFC cho C++ có đầy đủ các tiện ích giúp chúng ta vét được mọi ngõ ngách của Windows hầu phục vụ cho ứng dụng của mình. Từ những nhận đònh nói trên, cuốn sách này được thực hiện để cùng các bạn bắt đầu làm quen lập trình trong Windows áp dụng kỹ thuật lập trình hướng đối tượng với C++, nhằm khai thác hiệu quả thư viện MFC và từng bước du nhập vào thế giới tuyệt vời này thông qua các ứng dụng được sắp xếp theo các cấp độ tiến triển phù hợp. Trong lần xuất bản đầu tiên, cuốn sách này chắc không tránh khỏi thiếu sót. Chúng tôi rất mong tiếp thu ý kiến đóng góp và trao đổi cùng bạn đọc. Cuối cùng, chúng tôi xin chân thành cảm ơn bạn bè, đồng nghiệp đã cung cấp những nhận xét và kiến thức q báu để thực hiện cuốn sách này. Xin cảm ơn các bạn học viên-sinh viên, những người đã cùng làm việc với chúng tôi qua nội dung này và đã có những ý kiến khách quan giúp chỉnh sửa cuốn sách kòp thời. Thành phố Hồ Chí Minh, ngày 19.11.2002 Tác giả [1] , Windows 95 - Win32 Programming API-BIBLE , Waite Group Press 1996. [2] , Programming Windows 95 with MFC , Microsoft Press. [3] , Professional Visual C++ ISAPI Programming , Wrox Press. [4] , Microsoft Developer Network - MSDN , Microsoft Corporation Software. [5] , Visual C++ Windows Shell Programming , Wrox Press. xw(vy : - Microsoft Visual C++ 6.0 hoặc Microsoft Visual C++ .NET. - MSDN ( Microsoft Developer Network ), bản tháng 10/2003. : Source Code của các ví dụ minh họa trong cuốn sách này và của một số chương trình trò chơi mà chúng tôi mong muốn chia xẻ cùng bạn đọc được lưu trong đóa mềm đính kèm, và có thể download từ đòa chỉ: http://thanh.andisw.com/?id=16&id2=85 : Source Code đặc sắc của nhiều tác giả trên thế giới có thể download: - http://msdn.microsoft.com - http://www.codeguru.com - http://www.codeproject.com - http://www.softechsoftware.it - http://www.flipcode.com - http://nps.vnet.ee : - Tác giả: Lê Ngọc Thạnh - Cơ quan: Khoa Tin Học Quản Lý, Trường ĐHKT TP.HCM Đòa chỉ : 279 Nguyễn Tri Phương Q10, TP.HCM. - Đòa chỉ e-mail: lntmail@yahoo.com emp@ueh.edu.vn Một số khái niệm lập trình trong môi trường Windows 1 : M     1.1 : Chng trình máy tính là tp hp các ch th ụiu khin hot ụng ca máy, ục b trí theo mt trình t logic nhm phi hp thc hin mt cơng vic xác ụnh. Các ch th ục th hin di dng mã ngun (source code) hay mã máy (machine code). Chng trình mã máy có th thc hin ục trên máy có b lnh tng thích, vi chng trình mã ngun thì phi s dng mt ng dng chun dng ụ chuyn sang mã máy trc khi thc hin. Vic chuyn các ch th dng mã ngun sang ch th mã máy ụ thc hin ục tin hành bng mt trong hai c ch sau: ̇ Thơng dch : Mi ch th mã ngun ục chuyn sang ch th mã máy tng ng và ục thc hin ngay, sau ụó tip tc vi ch th k tip. ̇ Biên dch : Tt c các ch th mã ngun ục chuyn sang các ch th mã máy tng ng. Tp hp các ch th mã máy này gi là chng trình mã máy. Chng trình mã máy ục lu li trong tp tin chng trình và v sau ta có th thc hin chúng mt cách ục lp trên máy. 1.2   : Khi mt chng trình ục cài ụt trên máy tính ụ s dng, ta gi ụó là ng dng, ví d nh ng dng NotePad, ng dng Microsoft Word, Trong mơi trng windows, mi ng dng có th ục thi hành nhiu ln thành nhiu bn khác nhau. Mi bn ụang thc hin ca mt ng dng gi là th hin (instance) ca ng dng ụó. 1.3  : Tin trình là khái nim ch mt instance ụang hot ụng ca ng dng. Khi ta double-click trên biu tng NotePad ụ chy ng dng này, ta có mt tin trình ca ng dng NotePad. 1.4  : Tiu trình là mt nhánh x lý ục lp trong tin trình. Khi mt ng dng ục thc hin ta có thêm mt tin trình. Do bn cht chng trình làm nên ng dng ụó bao gm chng trình chính ( hay ) và các chng trình con mà tin trình ng vi nó có th tách thành các nhánh x lý: mt nhánh x lý chính (primary thread), các nhánh x lý ph (other threads). Các nhánh x lý này gi là các tiu trình. Có hai loi tiu trình: 2 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh - lntmail@yahoo.com ̇ Tiu trình giao din (user-interface thread): Có nhim v x lý các u cu ca ngi dùng trong q trình giao tác vi h. ̇ Tiu trình x lý ni (worker thread) : Có nhim v thc hin các x lý tính tốn bên trong, khơng trc tip nhn u cu ca ngi dùng. Q Thc ra, có th xem tiu trình giao din nh là mt tiu trình x lý ni nhng có tính nng giao tác vi ngi s dng. 1.5  : Thơng ụip (message) là giá tr phn ánh mt ni dung giao tip hay u cu x lý gia h thng (windows) và ng dng, gia các ng dng vi nhau hoc gia các thành phn trong cùng mt ng dng. 1.5.1   : C windows và ng dng ụu có th phát sinh message. ̇ Windows phát sinh message khi cn thơng tin cho ng dng các hot ụng nhp-xut (hot ụng gõ phím, di chuyn hay click chut, . ca ngi dùng), các thay ụi ca h thng (font ch, ch ụ phân gii màn hình, màu sc, ) hoc nhng bin ụi khác liên quan ụn ng dng. ̇ ng dng phát sinh message khi x lý ụiu khin các thành phn bên trong ng dng phi hp th c hin chc nng giao tip vi ngi dùng, hoc khi ng dng thc hin giao tip vi windows hay vi các ng dng khác ụang thc hin trong cùng h thng. 1.5.2  : ̇ Message ục ụnh ngha bi h thng : Là các message do h ụiu hành windows to ra nhm phc v hot ụng ụiu khin tồn b h thng, x lý thơng tin vào-ra hoc các thơng tin khác cho ng dng. Khi có nhu cu, ng dng có th s dng nhng message này ụ phát ụng mt chc nng ụiu khin nào ụó ca windows. ̇ Message ục ụnh ngha bi ngi dùng : Là các message do ngi vit ng dng ụnh ngha nhm to kênh liên lc ục thù gia các thành phn trong ng dng, gia ng dng vi windows hoc vi các ng dng khác ụang thc hin trong cùng h thng. Một số khái niệm lập trình trong môi trường Windows 3 1.5.3 S  : Có rt nhiu message khác nhau ục s dng trong mơi trng windows. ng vi mi message xác ụnh, windows s dng mt giá tr ngun khơng âm ụ ục t, giá tr này gi là s hiu message. Các message do windows ụnh ngha có s hiu ục khai báo sn và duy nht vi các hng s xác ụnh và tên gi gi nh ca chúng có dng WM_ xxx . Các messges do ngi dùng ụnh ngha cng phi ụng ký s hiu. S hiu ụng ký khơng ục trùng lp và có giá tr nh nht bng WM_USER (mt hng s do windows ụnh ngha). S hiu message là c s ụ phân bit các message ln nhau. 1.5.4 Ð   : Ð ụi tng nhn message có thêm thơng tin v hồn cnh phát sinh và ý ngha c th ca message, windows cho phép message ục nhn thơng qua mt cu trúc cha s hiu message và các thơng s kèm theo. Cu trúc này ục khai báo thành kiu MSG vi ni dung nh sau: typedef struct { HWND hwnd ; // Giá tr có kích thc 4 bytes (long) UINT message ; // S hiu ca message WPARAM wParam ; // Giá tr khơng âm có kích thc 2 bytes LPARAM lParam ; // Giá tr khơng âm có kích thc 4 bytes DWORD time ; // Thi ụim sinh ra messsge POINT pt ; // Ta ụ cursor khi message ục gi. } ; Trng hwnd (window handle) ca cu trúc cha th (handle) qun lý ca s giao din liên quan ụn message. wParam và lParam là hai tham s gi kèm theo message làm nhim v cha thơng tin b sung. Hai tham s này ục dùng khi message có nhiu ý ngha thc t khác nhau. H Windows s dng giá tr có kích thc 4 bytes ụ qun lý các ụi tng ca nó. Giá tr này gi là th qun lý ụi tng (object handle). ng vi mi loi ụi tng c th, windows s dng mt kiu handle riêng. HWND là kiu handle dùng qun lý ụi tng ca s giao din trong windows. 1.6 C       : Ca s giao din là thành phn quan trng trong vic to ra mơi trng giao din ụ ha ca các ng dng trong windows. Cùng vi s phát trin ca h ụiu hành windows, hình nh ca s giao din cng thay ụi theo vi chiu hng sinh ụng hn v hình thc và phong phú hn v chc nng. Ðiu ụó khơng ch góp phn tng tính thm m mà 4 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh - lntmail@yahoo.com còn to s gn gi hn gia giao din ca ng dng trong windows vi ngi dùng. Dng thơng thng ca mt ca s giao din trong windows: ̇ System Menu Box : Cha biu tng ca ng dng, là nút m hp menu h thng vi các mc di chuyn, thay ụi kích thc hoc ụóng ca s. ̇ Caption bar : Thanh tiêu ụ ca ng dng. ̇ Menu bar : H thng menu vi các mc la chn x lý. ̇ Minimize / Maximize Box : Nút ụiu khin thu nh / phóng to ca s. ̇ Restore Box : Nút khơi phc kích thc trc ụó ca ca s. ̇ Border : Ðng vin bao quanh ca s. ̇ Client area : Vùng làm vic ca ca s, dùng ụ hin th thơng tin. ̇ Scroll bar : Thanh cun ni dung vùng làm vic ca ca s. ̇ Window Procedure : Ngồi giao din ụ ha, ca s ca windows có kh nng tip nhn và x lý message. Kh nng này ục thc hin thơng qua hàm x lý message mà ta ụã gn cho ca s. Hàm x lý này có khai báo nh sau: LRESULT CALLBACK ( HWND hwnd , // Tham s cha Handle ca ca s liên quan UINT uMsg , // Tham s cha s hiu message WPARAM wParam , // Tham s b sung th nht kiu WORD LPARAM lParam // Tham s b sung th hai kiu LONG ) ; Hàm tr v mt giá tr có kích thc là 32 bits. Khi mt u cu x lý ục chuyn ụn ca s di dng message, hàm WindowProc gn vi ca s s cn c trên s hiu message (uMsg) ụ chn x lý phù hp. Theo ngun tc, nu message ục x lý hồn tt thì hàm tr v giá tr 0, ngc li (message khơng thuc Một số khái niệm lập trình trong môi trường Windows 5 kh nng x lý ca ca s) hàm phi chuyn message cho windows x lý thơng qua li gi hàm x lý message mc nhiên ca windows. Hàm x lý này có tên gi là DefWindowProc vi khai báo nh sau: LRESULT ( // Default Window Procedure HWND hWnd , // Vi các tham s có ý ngha nh trên UINT Msg , WPARAM wParam , LPARAM lParam ) ; Khi ụó, kt qu tr v ca DefWindowProc ục dùng làm kt qu ca hàm WindowProc . Qui tc nói trên cn phi ục ụm bo, nu khơng, ng dng có th làm ri lon hot ụng ca h ụiu hành windows. 1.7 : Message queue là danh sách th t các message do windows to ra và ục dùng ụ cha các message ụang ch ục x lý. Message queue hot ụng theo ngun tc FIFO (First-In, First-Out: vào trc, ra trc). Có hai loi message queue trong windows: ̇ Message queue ca h thng (system queue) : Ðc windows dùng riêng cho vic lu tr các messge ục t thơng tin nhp-xut liên quan ụn thit b phn cng trong q trình h thng giao tác vi ngi dùng. ̇ Message queue ca ng dng (application queue) : Ðc windows to ra và cp cho các th hin ca ng dng. Windows t ụng ụiu phi các message t system queue sang application queue mt cách phù hp, nh ụó mi ng dng có th tip nhn và thc hin các u cu x lý ca ngi dùng thơng qua h thng. C ch này ngn các ng dng trong windows quyn truy cp trc tip các thit b phn cng ca máy tính. Q Vic truy cp message queue ca ng dng ục thc hin vi s h tr ca các hàm liên quan do windows cung cp nh sau: ̇ Ch và ly mt message t message queue ca ng dng : BOOL ( LPMSG lpMsg , // Con tr ụn bin MSG nhn thơng tin HWND hWnd , // Handle ca ca s liên quan UINT wMsgFilterMin , // S hiu message nh nht nhn ục UINT wMsgFilterMax // S hiu message ln nht nhn ục ); Hàm t ụng ch ụn khi phát hin có message cn x lý trong message queue. Khi ụó, message vào trc nht s ục ly ra khi hàng ch và thơng tin ca nó ục ụin vào bin kiu MSG ch bi 6 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh - lntmail@yahoo.com con tr tham s plMSG . Khi ụã ly ục mt message, hàm kt thúc và tr v mt giá tr ngun. Nu message nhn ục là message kt thúc ng dng (s hiu WM_QUIT) thì hàm tr v giá tr 0. Ngc li, hàm tr v giá tr khác 0. ̇ Kim tra và ly mt message trong message queue ca ng dng : BOOL ( LPMSG lpMsg ; // . Nh HWND hWnd ; UINT wMsgFilterMin ; UINT wMsgFilterMax ; UINT wRemoveMsg ; // Có thc hin xóa message khơng ? // PM_NOREMOVE: khơng xóa ); Hàm tr v giá tr 0 nu message queue rng. Ngc li, hàm tr v mt giá tr khác khơng và thơng tin v message ục ụin vào bin kiu MSG ục ch bi tham s kiu con tr lpMSG . ̇ Din dch message ca bàn phím sang mã phím ASCII : BOOL ( CONST MSG * lpMsg ; // con tr ụn bin cha message ); Tham s lpMsg là con tr ch ụn bin kiu MSG cha ni dung ục t message ục ly t message queue và cn din dch. Hàm tr v giá tr khác 0 nu message nhn ục tng ng vi mt thao tác trên bàn phím (nhn phím: WM_KEYDOWN, WM_SYSKEYDOWN; thơi nhn phím: WM_KEYUP, WM_SYSKEYUP) hoc mt message có ý ngha tng ụng mà vic din dch sang mã phím ASCII là thành cơng. Khi ụó hàm t ụng to message WM_CHAR cho phím din dch ục. Trong các trng hp khác, hàm tr v giá tr 0. Một số khái niệm lập trình trong môi trường Windows 7 ̇ Ðiu phi message ụn ca s giao din chính: Ca s giao din chính ca ng dng có th tip nhn và x lý message thơng qua hàm ca nó (1.6). Nh vy, ta có th ụiu phi message ly t message queue ca ng dng ụn cho ca s chính x lý. Vic ụiu phi ục thc hin thơng qua hàm sau: LRESULT ( CONST MSG * lpmsg ; // Con tr ụn bin cha message ); Tham s lpMSG ch ụn bin kiu MSG cha thơng tin ục t message ục ụiu phi. Hàm ụiu phi s ch ụn khi hàm x lý message WindowProc ca ca s chính x lý xong messge, và ly giá tr kt thúc ca hàm này làm giá tr tr v ca chính nó. H Q trình tip nhn và ụiu phi x lý message t message queue ca ng dng ục tin hành liên tc cho ụn khi nhn ục message kt thúc ng dng (WM_QUIT). Q trình này có tên gi là vòng lp nhn và ụiu phi message (MessageLoop). Ðon chng trình nhn và ụiu phi message trong ng dng ục cài ụt nh sau: MSG ; // bin cha ni dung ục t message nhn ục while( GetMessage( &msg, NULL, 0, 0 ) != 0 ) { // Nu message nhn ục khơng phi là WM_QUIT TranslateMessage(&msg); // Din dch nu là phím DispatchMessage(&msg); // Ðiu phi cho ca s chính. } 1.8      : Khi ng dng ục thc hin, windows to thêm mt tin trình cho th hin mi ca ng dng, ụng thi xây dng mt message queue dùng riêng cho th hin này. Tiu trình chính ca tin trình ục to ra có nhim v thc hin MessageLoop trên message queue dành cho ng dng, ụng thi khi to các giao din và tiu trình h tr (nu cn). Q Các cách x lý ca tiu trình chính khi nm quyn ụ iu khin ng dng: ̇ Khơng thc hin x lý nào c: ng dng kt thúc. ̇ Thc hin MessageLoop nhng khơng to ca s giao din chính: ng dng ch nhn message nhng ngi dùng khơng giao tác ục. ̇ Khi to mt ca s vi hàm x lý message WindowProc và chn ca s này làm ca s giao din chính: Hàm WindowProc ca ca s s tip nhn và x lý message ục ụiu phi t MessageLoop ca tiu trình chính. Ngi dùng có th giao tác và kt thúc ng dng ục. ̇ Nh mc th ba, ụng thi to ra các tiu trình phc v: ng dng có kh nng tip nhn và thc hin ụng thi nhiu u cu x lý. 8 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh - lntmail@yahoo.com      1.9    Ði vi mt chng trình trong windows, ngồi phn mã lnh ca các hàm x lý, resource là mt thành phn khơng kém phn quan trng cha các ni dung h tr cho vic trang trí hoc phc v cho mt mc ụích ục bit ca ng dng. Các ni dung ph bin trong resource nh sau: ̇ nh nh ục t v trí làm vic ca thit b liên quan nh mouse, pen, trackball. Khi ngi dùng tác ụng lên nhng thit b này thì windows s dng cursor ụ phn ánh hin tng ụó. ̇ : Tp nh ụim (pixels) ca mt nh. Các nh ụim này b trí theo các dòng và phi hp làm nên hình nh ca ụi tng. ̇ : Thơng tin mơ t khung giao din vi các ụi tng nhp liu bên trong, là c s ụ to ra các hp hi thoi trong ng dng. ̇ : nh nh ục dùng ụ ục t chc nng ca mt ụi tng, ng dng hay mt ni dung d liu. ̇ (Hypertext Markup Language): Ngơn ng dùng to ra nhng tài liu dng vn bn vi nhng ký pháp và k thut ụnh dng mà trình duyt tng ng có th th hin mt cách xúc tích. Một số khái niệm lập trình trong môi trường Windows 9 ̇ : Mt danh sách các la chn x lý mà ngi dùng có th chn nhm thc hin mt x lý xác ụnh ̇ : Bng cha các chui ục ụánh du phân bit bi các s hiu và ục s dng nh các thơng báo trong chng trình. Vic s dng String Table giúp ng dng d dàng thay ụi ngơn ng giao din ca nó mà khơng cn phi có s chnh sa trên phn mã lnh. ̇ : Tp các nh con xác ụnh các nút ục cài ụt trên thanh cơng c ca ca s hay hp hi thoi trong ng dng. Mi nút này là mt mc chn (có th thay th mc chn ca menu) giúp to ra các message lnh (WM_COMMAND) vi s hiu phân bit ụ có th n ụnh x lý cn thit. ̇ : Phn khai báo các thơng tin liên quan ụn ng dng, tác gi. ̇ : Cha thơng tin v b font ch ục lu trong tp tin . ̇ : Bao gm các ni dung khơng thuc các loi ni dung resource chun nói trên. Ngi dùng có th tùy ý cài vào resource ca ng dng, ụng thi phi t cài ụt x lý thích hp cho các resource này trong chng trình. [...]... nh h ng biên d ch và các ch th s d ng th vi n MFC c n cho d án: 14 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh - lntmail@yahoo.com Thư viện MFC của Microsoft & ứng dụng cơ bản trong windows 15 #if !defined( _DU_AN_0_ ) #define _DU_AN_0_ // _DU_AN_0_ giúp trình d ch khơng th c hi n l p ch th resource và i t ng l p trình t ng ng c a MFC trong d án Th c hi n nh sau: ): - Right-click... t o i t ng ti u trình chính c a ng d ng ? ̇ Làm th nào t o i t ng giao di n c a ng d ng ? ̇ Qu n lý t ng tác gi a i t ng ng d ng và i t ng giao di n ? B ng vi c xem xét các l p MFC liên quan s giúp l n l t lý gi i các câu h i c t ra Ti p theo, chúng ta tìm hi u xem nh ng l p nào c a MFC giúp khai báo i t ng ti u trình trong ng d ng 10 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh... biên d ch ch ng trình : Biên d ch ch ng trình v i thơng tin debug : Phiên b n em giao, khơng ch a thơng tin debug Ch n m c / : Sau ó ch n Ð ng ký các h tr c a ng ký này là c s 16 : Lo i n i dung t p tin (.rc) : B sung t p tin vào d án : Tên t p tin, trùng v i tên c a d án MFC cho thao tác trên resource: Vi c t o quan h gi a các n i dung c a Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc... 18 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh - lntmail@yahoo.com : Lo i n i dung t p tin (.cpp) : B sung t p tin vào d án : Tên t p tin (MAIN) Sau ó ch n , nh p n i dung t p tin: Trong màn hình so n th o c a #include "stdafx.h" // T p tin ch a ng ký th vi n c a MFC CWinApp ; // Ð i t ng qu n lý ti u trình chính Sau khi nh p xong, ch n m c / l u t p tin ̇ Biên d ch ch ng trình: ... resource c a d án , sau ó ch n m c Ch n hành vi Trong ph n so n th o n i dung c a hành vi , ta cài t o n ch ng trình x lý sau: l p BOOL CEmpApp:: { 24 thu c () Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh - lntmail@yahoo.com Thư viện MFC của Microsoft & ứng dụng cơ bản trong windows 25 ̇ Ch n m c ̇ Th c hi n n nh thơng s c a icon thơng qua h p h i tho i sau: - ID ̇ Ch n m c Ta nh... // ph n sau 22 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh - lntmail@yahoo.com , sau ó ch Ch n Trong h p h i tho i Thơng tin c a d án và ph n m r ̇ K th a hành vi Dùng hành vi này cài t x n , Ch n k t thúc c l u trong t p tin có cùng tên v i tên ng là c a l p CWinApp cho l p lý b sung nh u c u c a ng d ng: Thư viện MFC của Microsoft & ứng dụng cơ bản trong windows 23 Trong... t, i u ch nh và ph i h p chúng h p lý có c ng d ng k t qu mong mu n L p trình windows v i MFC và MicroSoft Visual C++ 6.0 (VC) t c hi u qu cao b i khơng ch khai thác c phiên b n m i nh t c a MFC mà còn nh n c nhi u ti n nghi l p trình mà VC cung c p Ðây là con ng ng n và n gi n, c bi t v i ng i t h c, vi t ng d ng windows 2.2 : MFC là th vi n kh ng l v i kho ng 200 l p i t ng mà vi c hi u rõ và v n... do windows g i n c a s khi m t phím ký t c gõ ( ̇ afx_msg void // Ch a giá tr phím c nh n kèm UINT nFlags, CPoint point // V trí double-click chu t ); Hành vi x lý WM_LBUTTONDBLCLK, message do windows g i n c a s khi ng i dùng double-click vào nút chu t trái Tham s nFlag có th là k t h p c a các giá tr sau: MK_CONTROL : Phím CTRL c nh n kèm theo 46 Lập trình Windows với MFC - Microsoft Visual C++ 6.0. .. CCmdUI* Hành vi tượng này được dùng để cấm hoặc cho phép hoạt động đối với đối tượng phát sinh WM_COMMAND Xử lý của hành vi này có thể là: Xử lý Message 53 Các mục xử lý message do Classwizard quản lý đặt giữa //{{ và //}} 54 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh - lntmail@yahoo.com 5.3 : Các lớp đối tượng của MFC kế thừa từ CCmdTarget có chức năng xử lý message là CWnd, CWinApp,... p c a MFC, l p i t ng qu n lý ti u trình c t o ra trong ti n trình c a m t ng d ng ang c th c hi n Ti u trình c qu n lý có th là là ti u trình giao di n ho c ti u trình x lý n i Các d ch v c b n ph c v cho qu n lý ti u trình do CWinThread cung c p thơng qua các thu c tính và hành vi c a nó ̇ DWORD : Thu c tính l u s hi u c a ti u trình : L u con tr i t ng c a s giao di n ̇ CWnd* chính c a ti u trình . 32 32 33 34 35 38 40 40 40 49 49 50 51 51 52 55 55 55 58 60 60 60 63 64 65 66 67 69 69 69 7.3 Sử dụng menu resource. 80 84 85 88 91 93 94 96 97 97 97 99 99 103 104 104 1 06 1 06 107 109 112 117 117 117 119 10. 3.1 Thiết kế ToolBar resource 10. 3.2

Ngày đăng: 21/01/2014, 22:20

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan