1. Trang chủ
  2. » Công Nghệ Thông Tin

Tổng quan lập trình C trên Windows_01

23 357 0
Tài liệu đã được kiểm tra trùng lặp

Đ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

Thông tin cơ bản

Định dạng
Số trang 23
Dung lượng 0,9 MB

Nội dung

NGƠN NG L P TRÌNH L P TRÌNH C TRÊN WINDOWS Chương T NG QUAN L P TRÌNH C TRÊN WINDOWS 1.1 M ð U ð l p trình Microsoft Windows®, c n n m đư c ñ c ñi m b n nh t c a h ñi u hành Chương s gi i thi u khái quát ñ c ñi m h ñi u hành Microsoft Windows, v n đ liên quan đ n l p trình b ng ngơn ng C, đ ng th i đưa m t chương trình m u làm sư n cho chương trình đư c vi t sau Trong ph n đ u, tìm hi u sơ lư c l ch s phát tri n c a h u hành Microsoft Windows® nh ng đ c ñi m n n t ng c a Windows Ph n ti p theo s trình bày nh ng khái ni m yêu c u b n c a vi c l p trình C Windows Ngoài ra, ph n gi i thi u ch cơng c mà h u hành cung c p cho ngư i l p trình hay ngư i phát tri n ng d ng Windows ch Cu i chương ph n xây d ng m t chương trình ñơn gi n nh t Windows Chương trình ñư c xem khuôn m u c a m t chương trình ng d ng n hình, h u h t đo n chương trình ñư c vi t minh h a sách ñ u l y chương trình làm khung sư n ñ phát tri n cho phù h p v i t ng u c u Thêm vào đó, m t s ki u d li u m i ñư c ñ nh nghĩa Windows nh ng qui c v cách ñ t tên bi n ñư c gi i thi u ph n Te Ph n chi ti t chuyên sâu c a vi c l p trình b ng ngơn ng C mơi trư ng Windows s đư c trình bày chương ti p theo 1.2 H ðI U HÀNH MICROSOFT WINDOWS 1.2.1 Gi i thi u Gi a th p niên 80, công ty ph n m m máy tính Microsoft cơng b phiên b n đ u tiên c a dịng h u hành Windows Microsoft Windows® 1.0 ðây h u hành dùng giao di n ñ h a khác v i giao di n ký t (text hay console) c a MS-DOS Tuy nhiên ph i ñ n phiên b n th hai (Windows 2.0 - tháng 11 năm 1987) m i có bư c c i ti n đáng k , s m r ng giao ti p gi a bàn phím thi t b chu t giao di n ñ h a (GUI-Graphic User Interface) trình đơn (menu) h p tho i (dialog) Trong phiên b n Windows ch yêu c u b vi x lý Intel 8086 hay 8088 ch y real-mode ñ truy xu t megabyte b nh Tháng năm 1990, Microsoft công b phiên b n ti p theo Windows 3.0 S thay ñ i l n phiên b n Windows 3.0 h tr protected-mode 16 bit c a b vi x lý 286, 386, 486 c a Intel S thay ñ i cho phép ng d ng Windows truy xu t 16 megabyte b nh Ti p bư c v i s phát tri n phiên b n Windows 3.1 ñ i năm 1992, Microsoft đưa cơng ngh Font TrueType, âm nh c (multimedia), liên k t nhúng ñ i tư ng (OLE- Object Linking and Embedding), ñưa h p tho i chung ñã ñư c chu n hóa Trang NGƠN NG L P TRÌNH L P TRÌNH C TRÊN WINDOWS Trong s phát tri n m nh m c a nh ng th p niên 90, Microsoft cơng b ti p dịng h u hành Windows v i ng d ng công ngh m i (1993) H ñi u hành l y tên Windows® NT® (Windows New Technology), phiên b n h ñi u hành ñ u tiên c a Windows h tr 32 bit cho b x lý 386, 486 Pentium Trong h u hành ng d ng ph i truy xu t b nh v i ñ a ch 32-bit t p l nh hay ch th 32-bit Ngoài Windows NT ñư c thi t k ñ ch y b vi x lý (CPU) khác Intel có th ch y máy tr m (workstation) H u hành Windows 95 đư c cơng b năm 1995 m t h ñi u hành 32-bit cho Intel 386 tr v sau Tuy thi u tính b o m t Windows NT vi c thích nghi v i máy tr m cơng ngh RISC, bù l i h ñi u hành yêu c u ph n c ng không cao Song song v i s phát tri n ph n m m cơng ngh ph n c ng phát tri n không ð t n d ng s c m nh c a ph n c ng th h Windows ti p theo ngày hoàn thi n Như Windows 98 phát tri n t Window 95 có nhi u c i thi n hi u làm vi c, h tr thi t b ph n c ng t t hơn, cu i vi c tích h p ch t ch v i Internet Word Wide Web Windows 2000 h ñi u hành ñư c xem n ñ nh t t c a dòng Windows, phiên b n tăng cư ng tính b o m t thích h p m i trư ng m ng giao di n ñ p 1.2.2 ð c ñi m chung c a h ñi u hành Microsoft Windows Te ch Windows m t h ñi u hành s d ng giao ti p ngư i dùng ñ h a (GUI), hay cịn g i h u hành tr c quan (Visual interface) GUI s d ng ñ h a d a hình nh nh phân (Bitmapped video display) Do t n d ng đư c tài nguyên th c c a hình, cung c p m t mơi trư ng giàu tính tr c quan sinh đ ng Windows khơng đơn ñi u MS-DOS (hay m t s h ñi u hành giao di n console) mà hình đư c s d ng ch ñ th hi n chu i ký t , ngư i dùng gõ t bàn phím (keyboard) hay đ xu t thơng tin d ng văn b n Trong giao di n ngư i dùng đ h a, hình giao ti p v i ngư i s d ng ña d ng hơn, ngư i dùng có th nh p d li u thông qua chu t b ng cách nh n vào nút nh n (button) hôp ch n (combo box)…thi t b bây gi đư c nh p, có th bàn phím thi t b chu t (mouse device) Thi t b chu t m t thi t b đ nh v hình, s d ng thi t b chu t ngư i dùng có th nh p d li u m t cách tr c quan b ng cách kích ho t m t nút l nh, hay làm vi c v i ñ i tư ng ñ h a liên quan ñ n t a ñ hình ð giao ti p mơi trư ng đ h a, Windows ñưa m t s thành ph n g i ñi u n chung (common control), ñi u n chung ñ i tư ng ñư c ñưa vào h p tho i ñ giao ti p v i ngư i dùng Bao g m : h p văn b n (text box), nút nh n (button), nút ch n (check box), h p danh sách (list box), h p ch n (combo box)… Th t m t ng d ng Windows không ph i ph c t p chúng có hình th c chung Chương trình ng d ng thu ng chi m m t ph m vi hình ch nh t hình g i m t c a s Trên c a m i c a s tiêu ñ (title bar) Các ch c c a chương trình đư c li t kê th c ñơn l a ch n c a chương trình (menu) , hay xu t hi n dư i d ng tr c quan công c (toolbar) Các công c ch a ch c ñư c s d ng thư ng xuyên th c ñơn ñ gi m th i gian cho ngư i dùng ph i m th c ñơn Trang NGƠN NG L P TRÌNH L P TRÌNH C TRÊN WINDOWS ch n Thông thư ng c n l y thông tin hay cung c p thông tin cho ngư i dùng m t ng d ng s ñưa m t h p tho i, h p tho i s ch a ñi u n chung ñ giao ti p v i ngư i dùng Windows t o m t s h p tho i chu n Open Files, m t s h p tho i tương t Windows m t h ñi u hành ña nhi m, tùy thu c vào b nh mà ta có th ch y nhi u ng d ng m t lúc, có th ñ ng th i chuy n qua l i gi a ng d ng th c thi chúng Trong phiên b n c a Windows® 98 NT® tr v sau, chương trình ng d ng t b n thân chúng chia thành nhi u ti u trình (thread) đ x lý v i t c ñ x lý nhanh t o c m giác nh ng chương trình ng d ng ch y ñ ng th i v i Trong Windows, chương trình ng d ng th c thi đư c chia s nh ng th t c mà Windows cung c p s n, t p tin cung c p nh ng th t c ñư c g i thư vi n liên k t ñ ng (Dynamic Link Libraries - DLL) Windows có ch liên k t nh ng chương trình ng d ng v i th t c ñư c cung c p thư vi n liên k t ñ ng ch Kh tương thích c a Windows r t cao Các chương trình ng d ng ñư c vi t cho Windows không truy xu t tr c ti p ph n c ng c a nh ng thi t b đ ho hình máy in Mà thay vào đó, h u hành cung c p m t ngôn ng l p trình đ h a (g i Giao ti p thi t b ñ ho - Graphic Device Interface - GDI) cho phép hi n th nh ng ñ i tư ng ñ h a m t cách d dàng Nh v y m t ng d ng vi t cho Windows s ch y v i b t c thi t b hình hay b t kì máy in, mi n cài đ t trình ñi u n thi t b h tr cho Windows Chương trình ng d ng khơng quan tâm đ n ki u thi t b k t n i v i h th ng Te Như gi i thi u ph n khái ni m liên k t ñ ng thành ph n quan tr ng c a Windows, đư c xem h t nhân c a h u hành, b n thân c a Windows t p thư vi n liên k t ñ ng Windows cung c p r t nhi u hàm cho nh ng chương trình ng d ng ñ cài ñ t giao di n ngư i dùng hi n th văn b n hay đ h a hình Nh ng hàm ñư c cài ñ t thư vi n liên k t đ ng hay cịn g i DLL ðó t p tin có d ng ph n m r ng *.DLL hay *.EXE, h u h t ñư c ch a thư m c \Windows\System, \Windows\system32 c a Windows® 98 thư m c \WinNT\System, \WinNT\System32 c a Windows® NT® Trong phiên b n sau này, h th ng liên k t ñ ng ñư c t o r t nhi u, nhiên, h u h t hàm ñư c g i thư vi n phân thành ñơn v sau: Kernel, User, GDI Kernel cung c p hàm th t c mà m t h t nhân h ñi u hành truy n th ng qu n lý, qu n lý b nh , xu t nh p t p tin tác v Thư vi n ñư c cài ñ t t p tin KRNL386.EXE 16 bit KERNEL32.DLL 32 bit User qu n lý giao di n ngư i dùng, cài ñ t t t c khung c a s m c lu n lý Thư vi n User ñư c cài ñ t t p tin USER.EXE 16 bit USER32.DLL 32 bit GDI cung c p toàn b giao di n thi t b đ ho (Graphics Device Interface), cho phép chương trình ng d ng hi n th văn b n ñ ho thi t b xu t ph n c ng hình máy in Trang NGƠN NG L P TRÌNH L P TRÌNH C TRÊN WINDOWS Trong Windows 98, thư vi n liên k t ñ ng ch a kho ng vài ngàn hàm, m i hàm có tên đ c t , ví d CreateWindow, hàm dùng ñ t o m t c a s cho ng d ng Khi s d ng hàm mà Windows cung c p cho ng d ng ph i khai báo t p tin tiêu ñ h hay hpp (header file) Trong m t chương trình Windows, có s khác bi t ta g i m t hàm c a thư vi n C m t hàm c a Windows hay thư vi n liên k t ñ ng cung c p ðó biên d ch mã máy, hàm thư vi n C s ñư c liên k t thành mã chương trình Trong hàm Windows s đư c g i chương trình c n dùng đ n ch khơng liên k t vào chương trình ð th c hi n đư c l i g i m t chương trình Windows *.EXE ln ch a m t tham chi u ñ n thư vi n liên k t ñ ng khác mà c n dùng Khi đó, m t chương trình Windows đư c n p vào b nh s t o tr tham chi u ñ n nh ng hàm thư vi n DLL mà chương trình dùng, n u thư vi n chưa đư c n p vào b nh trư c bây gi s ñư c n p 1.3 L P TRÌNH TRÊN MICROSOFT WINDOWS 1.3.1 ð c m chung Windows h ñi u hành ñ h a tr c quan, dó tài nguyên c a h th ng cung c p r t ña d ng địi h i ngư i l p trình ph i nghiên c u r t nhi u ñ phát hay h t s c m nh c a h ñi u hành Te ch Theo nh ng m c đích ti p c n c a nhà l p trình ng d ng Windows ph i h t s c thân thi n v i ngư i dùng thông qua giao di n đ h a s n có c a Windows V lý thuy t m t ngư i dùng làm vi c ñư c v i m t ng d ng c a Windows có th làm vi c ñư c v i nh ng ng d ng khác Nhưng th c t ñ s d ng m t ng d ng cho ñ t hi u qu cao Windows c n ph i có m t s hu n luy n tr giúp hay t i thi u ph i cho bi t chương trình ng d ng làm vi c th ða s ng d ng Windows ñ u có chung m t giao di n tương tác v i ngư i dùng gi ng Ví d ng d ng Windows ña s ñ u có th c đơn ch a m c : File, Edit, Tool, Help… Và h p tho i thư ng ch a ph n t ñi u n chung : Edit Control, Button Control, Checkbox… 1.3.2 S khác bi t v i l p trình MS-DOS Khi m i bư c vào l p trình Windows đa s ngư i h c r t l l m, nh t nh ng ngư i ñã t ng làm vi c v i MS-DOS Do MS-DOS h ñi u hành ñơn nhi m giao ti p qua giao di n console Nên vi t chương trình khơng ph c t p Cịn đ i v i Windows ngư i l p trình s làm vi c v i b cơng c l p trình đ h a ña d ng v i cách x lý ña nhi m, đa lu ng c a Windows Vì v y vi c l p trình Windows s giúp cho ngư i l p trình đ nhàm chán v i giao di n console c a MS-DOS Vi c c g ng phát huy s c m nh tài nguyên c a Windows s làm cho nh ng ng d ng m nh m , ña d ng, thân thi n, d s d ng 1.3.3 M t s yêu c u ñ i v i ngư i l p trình Trang NGƠN NG L P TRÌNH L P TRÌNH C TRÊN WINDOWS ði u trư c tiên c a ngư i h c l p trình C Windows ph i bi t l p trình C, sách khơng có tham v ng hư ng d n ngư i h c có th thơng th o l p trình C Windows mà chưa qua m t l p hu n luy n C Tuy nhiên, không nh t thi t ph i hồn tồn thơng th o C m i h c đư c l p trình Windows ð có th l p trình n n Windows ngồi u c u v vi c s d ng công c l p trình, ngư i h c cịn c n ph i có b n v Windows, t i thi u dùng qua m t s ng d ng Windows Th t s yêu c u khơng q khó khăn đ i v i ngư i h c hi n t i h u Windows quen thu c v i m i ngư i, nh ng ngư i mà ñã s d ng máy tính Ngồi nh ng u c u trên, đơi ngư i l p trình Windows c n có u th m m , cách trình bày hình nh, u n h p tho i t t s làm cho ng d ng ti n l i, rõ ràng, thân thi n v i ngư i dùng 1.3.4 B công c giao di n l p trình ng d ng API ch H ñi u hành Windows cung c p hàng trăm hàm đ cho nh ng ng d ng có th s d ng truy c p tài nguyên h th ng Nh ng hàm ñư c g i giao di n l p trình ng d ng API (Application Programming Interface) Nh ng hàm ñư c ch a thư vi n liên k t ñ ng DLL c a h th ng Nh có c u trúc đ ng m i ng d ng đ u có th truy c p ñ n hàm ñó Khi biên d ch chương trình, đ n đo n mã g i hàm API chương trình d ch khơng thêm mã hàm vào mã th c thi mà ch thêm tên DLL ch a hàm tên c a hàm Do mã hàm API th c t khơng ñư c s d ng xây d ng chương trình, ch đư c thêm vào chương trình đư c n p vào b nh đ th c thi Te Trong API có m t s hàm có ch c trì s đ c l p thi t b ñ h a, hàm g i giao di n thi t b ñ h a GDI (Graphics Device Interface) Do s ñ c l p thi t b nên hàm GDI cho phép ng d ng có th làm vi c t t v i nhi u ki u thi t b ñ h a khác 1.3.5 Cơ ch thơng p Khơng gi ng ng d ng ch y MS-DOS, ng d ng Win32® x lý theo s ki n (event - driven), theo ch ng d ng ñư c vi t s liên t c ch cho h ñi u hành truy n d li u nh p vào H th ng s ñ m nhi m vi c truy n t t c d li u nh p c a ng d ng vào c a s khác c a ng d ng M i m t c a s s có riêng m t hàm g i hàm x lý c a s thư ng ñư c ñ t tên WndProc, h th ng s g i hàm có b t c d li u nh p ñư c truy n ñ n c a s , hàm s x lý d li u nh p tr quy n u n v cho h th ng H th ng truy n d li u nh p vào th t c x lý c a c a s thông qua m t hình th c g i thơng ñi p (message) Thông ñi p ñư c phát sinh t ng d ng h th ng H th ng s phát sinh m t thơng p có m t s ki n nh p vào (input even), ví d ngư i dùng nh n m t phím, di chuy n thi t b chu t, hay kích vào u n (control) cu n,… Ngoài h th ng phát sinh thơng p đ ph n ng l i m t s thay ñ i c a h th ng m t ng d ng mang ñ n, ñi u x y ng d ng làm c n ki t tài nguyên hay ng d ng t thay đ i kích thư c c a c a s Trang NGÔN NG L P TRÌNH L P TRÌNH C TRÊN WINDOWS M t ng d ng có th phát sinh thơng p c n u c u c a s c a th c hi n m t nhi m v hay dùng đ thông tin gi a c a s H th ng g i thơng p vào th t c x lý c a s v i b n tham s : ñ nh danh c a c a s , đ nh danh c a thơng p, hai tham s cịn l i đư c g i tham s c a thơng p (message parameters) ð nh danh c a c a s xác ñ nh c a s mà thông ñi p ñư c ch ñ nh H th ng s dùng ñ nh danh ñ xác ñ nh c n ph i g i thơng p đ n th t c x lý c a c a s ð nh danh thơng p m t h ng s th hi n m c đích c a thơng ñi p Khi th t c x lý c a s nh n thơng p s dùng ñ nh danh ñ bi t hình th c c n th c hi n Ví d , m t thơng p đư c truy n đ n th t c c a s có đ nh danh WM_PAINT có ý nghĩa r ng c a s vùng làm vi c thay ñ i c n ph i v l i vùng Tham s thơng p lưu giá tr hay v trí c a d li u, ñư c dùng b i th t c c a s x lý thông ñi p Tham s ph thu c vào lo i thơng p đư c truy n đ n, có th s nguyên, m t t p bit dùng làm c hi u, hay m t tr ñ n m t c u trúc d li u đó,… Khi m t thơng p khơng c n dùng đ n tham s h th ng s thi t l p tham s có giá tr NULL M t th t c c a s ph i ki m tra xem v i lo i thơng p c n dùng tham s ñ quy t ñ nh cách s d ng tham s Có hai lo i thơng p : ch Thơng p ñư c ñ nh nghĩa b i h th ng (system-defined messages) : Te D ng thơng p ñư c h th ng ñ nh nghĩa cho c a s , ñi u n, tài nguyên khác h th ng Thư ng ñư c b t ñ u v i ti n t sau : WM_xxx, LB_xxx, CB_xxx,… Thơng p ñư c ñ nh nghĩa b i ng d ng (application-defined message) : M t ng d ng có th t o riêng thơng p đ s d ng b i nh ng c a s c a hay truy n thơng tin gi a c a s ng d ng N u m t ng d ng đ nh nghĩa thơng p riêng th t c c a s nh n ñư c thông ñi p ph i cung c p hàm x lý tương ng ð i v i thơng p h th ng, đư c cung c p giá tr ñ nh danh t 0x0000 ñ n 0x03FF, nh ng ng d ng không ñư c đ nh nghĩa thơng p có giá tr kho ng Thơng p đư c ng d ng đ nh nghĩa có giá tr đ nh danh t 0x0400 đ n 0x7FFF L trình c a thơng p t lúc g i đ n lúc x lý có hai d ng sau: Thơng p đư c g i vào hàng đ i thơng ñi p ñ ch x lý (queue message): bao g m ki u thơng p đư c phát sinh t bàn phím, chu t thơng p : WM_MOUSEMOVE, WM_LBUTTONDOWN, WM_KEYDOWN, WM_CHAR Trang NGÔN NG L P TRÌNH L P TRÌNH C TRÊN WINDOWS Thơng ñi p ñư c g i tr c ti p ñ n th t c x lý không qua hàng ñ i (nonqueue message), bao g m thông ñi p th i gian, thơng p v , thơng p WM_TIMER, WM_PAINT, WM_QUIT X lý thơng p : M t ng d ng ph i xóa x lý nh ng thơng p ñư c g i t i hàng ñ i c a ng d ng ð i v i m t ng d ng đơn ti u trình s d ng m t vịng l p thơng p (message loop) hàm WinMain đ nh n thơng ñi p t hàng ñ i g i t i th t c x lý c a s tương ng V i nh ng ng d ng nhi u ti u trình m i m t ti u trình có t o c a s s có m t vịng l p thơng p đ x lý thơng p c a nh ng c a s ti u trình 1.4 CÁCH VI T M T NG D NG TRÊN MICROSOFT WINDOWS 1.4.1 Các thành ph n b n t o nên m t ng d ng 1.4.1.1 C a s Trong m t ng d ng ñ h a 32-bit, c a s (window) m t vùng hình ch nh t hình, nơi mà ng d ng có th hi n th thông tin nh n thông tin vào t ngư i s d ng Do v y, nhi m v ñ u tiên c a m t ng d ng ñ h a 32-bit t o m t c a s ch M t c a s s chia s hình v i c a s khác m t ng d ng hay ng d ng khác Ch m t c a s m t th i m nh n đư c thơng tin nh p t ngư i dùng Ngư i s d ng có th dùng bàn phím, thi t b chu t hay thi t b nh p li u khác ñ tương tác v i c a s ng d ng Te T t c c a s ñ u ñư c t o t m t c u trúc ñư c cung c p s n g i l p c a s (window class) C u trúc m t t p mô t thu c tính mà h th ng dùng khn m u đ t o nên c a s M i m t c a s ph i thành viên c a m t l p c a s T t c l p c a s ñ u ñư c x lý riêng bi t 1.4.1.2 H p tho i ñi u n H p tho i (Dialog) dùng ñ tương tác v i ngư i dùng m t chương trình ng d ng M t h p tho i thư ng ch a nhi u ñ u n ô nh p văn b n (edit text), nút b m (button), ghi (static control), h p danh sách (list box)… Nút b m (button): g m có Push Button dùng kích ho t m t thao tác, Check Box dùng ñ ch n m t hai tr ng thái (TRUE hay FALSE), Radio Button gi ng Check Box m t nhóm Radio Button ph i đư c ch n lo i tr Chú thích (static): dùng đ ch a ghi h p tho i, ngồi n i dung có th thay đ i trình s d ng h p tho i H p li t kê (list box): Ch n m t hay nhi u d li u ñư c li t kê danh sách, n u h p ch a nhi u dịng h p khơng hi n th h t m u thơng tin ph i kèm theo m t cu n (scroll bar) Ô nh p văn b n (edit text): Dùng nh p văn b n, n u có nhi u dịng thư ng kèm theo cu n Trang NGƠN NG L P TRÌNH L P TRÌNH C TRÊN WINDOWS Thanh cu n (scroll bar): vi c dùng kèm v i list box hay edit box cu n cịn có th s d ng đ c l p nh m t o thư c ño… Th c ñơn (menu): m t danh sách ch a thao tác v i m t ñ nh danh mà ngư i dùng có th ch n H u h t ng d ng có c a s khơng th thi u th c đơn Thanh cơng c (toolbar): m t d ng menu ch ch a thao tác c n thi t dư i d ng bi u tư ng đ c trưng Ngồi cịn r t nhi u u n mà cơng c l p trình cung c p cho ngư i l p trình hay t h t o d a nh ng thành ph n ñư c cung c p s n 1.4.1.3 ng d ng n hình Windows 1.4.1.4 Các ki u t p tin ñ xây d ng m t ng d ng Windows Chương trình ngu n Tương t chương trình C chu n, bao g m t p tin tiêu ñ (header) ch a t p tin *.h, *.hpp Còn mã ngu n (source code) ch a t p tin *.c hay *.cpp T p tin ñ nh nghĩa ch T p tin có ph n m r ng *.def, dùng đ nh nghĩa u n chương trình t o vi t ng d ng t o DLL, ngồi cịn dùng đ khai báo vùng nh heap ch y chương trình Lúc trư c v n đ tương thích v i Windows 3.1 nên t p tin thư ng ñư c dùng, cịn ngày chúng đư c dùng đ n Te Các file ch a tài nguyên c a ng d ng • Các file *.ico bi u tư ng (icon) đư c dùng chương trình Thơng thư ng cơng c l p trình Windows ñ u có tool ñ t o nh • Con tr chu t c a ng d ng có th đư c v l i dư i d ng bi u tư ng lưu ñĩa v i d ng file *.cur • Các file d ng nh bitmap dùng ñ minh h a ñư c lưu d ng file *.bmp • T p tin tài nguyên *.rc ph n khai báo tài nguyên th c ñơn, h p tho i, ñ nh danh ch ñ n t p tin d ng *.ico, *.cur, *.bmp, 1.4.1.5 Các ki u d li u m i Các ki u d li u Windows thư ng ñư c ñ nh nghĩa nh toán t typedef t p tin windows.h hay t p tin khác Thông thư ng t p tin ñ nh nghĩa Microsoft vi t ho c cơng ty vi t trình biên d ch C t o ra, nh t thi t ph i tương thích v i h u hành Windows 98, hay NT d a ki n trúc 32-bit M t vài ki u d li u m i có tên vi t t t r t d hi u UINT m t d li u thư ng ñư c dùng mà ñơn gi n ki u unsigned int, Windows 9x ki u có kích thư c 32-bit ð i v i ki u chu i có ki u PSTR ki u m t tr ñ n m t chu i tương t char* Trang NGƠN NG L P TRÌNH L P TRÌNH C TRÊN WINDOWS Tuy nhiên, có m t s ki u ñư c khái báo tên thi u rõ ràng WPARAM LPARAM Tên ñư c ñ t có ngu n ng c l ch s sâu xa Khi cịn h u hành Windows 16-bit tham s th c a hàm WndProc ñư c khai báo ki u WORD, v i kích thư c 16-bit , cịn tham s th có ki u LONG 32-bit ðây lý ngư i ta thêm ti n t "W", "L" vào t "PARAM" Tuy nhiên, phiên b n Windows 32-bit, WPARAM ñư c ñ nh nghĩa UINT LPARAM đư c đ nh nghĩa m t ki u LONG, c hai tham s đ u có giá tr 32-bit ði u m t s nh m l n WORD v n giá tr 16-bit Window 98 Trong th t c x lý c a s WndProc giá tr tr v ki u LRESULT Ki u ñơn gi n ñư c ñ nh nghĩa ki u LONG Ngồi ra, có m t ki u thư ng xuyên dùng ki u HANDLE m t s nguyên 32-bit ñư c s d ng m t ki u đ nh danh Có nhi u ki u ñ nh danh nh t thi t t t c ph i có kích thư c v i HANDLE B ng sau mô t m t s ki u d li u m i: Ý nghĩa HANDLE S nguyên 32-bit, ñ nh danh HWND S nguyên 32-bit, ñ nh danh BYTE Giá tr 8-bit không d u WORD S nguyên 16-bit không d u ch Te DWORD Ki u S nguyên 32-bit không d u UINT S nguyên không d u 32-bit LONG long 32-bit BOOL Bool LPSTR Con tr chu i LPCSTR H ng tr chu i WPARAM 32-bit LPARAM 32-bit BSTR Giá tr 32-bit tr đ n kí t LPVOID Con tr 32-bit đ n m t ki u khơng xác đ nh LPTSTR Gi ng LPSTR có th chuy n sang d ng Unicode DBCS Trang 10 NGƠN NG L P TRÌNH LPCTSTR L P TRÌNH C TRÊN WINDOWS Gi ng LPCTSTR có th chuy n sang d ng Unicode DBCS B ng 1.1 Mô t ki u d li u m i 1.4.2 Khuôn m u chung t o m t ng d ng M t ng d ng ñơn gi n nh t c a Windows bao g m có hai hàm WinMain x lý c a s WinProc Do hai hàm quan tr ng không th thi u ng d ng Windows Hàm WinMain th c hi n ch c sau : ð nh nghĩa l p c a s ng d ng ðăng ký l p c a s v a ñ nh nghĩa T o th hi n c a s c a l p ñã cho Hi n th c a s Kh i đ ng chu trình x lý thơng p • • • • • Te 1.4.3 Hàm WinMain ch Hàm x lý WinProc có ch c x lý t t c thơng p có liên quan đ n c a s Hàm c a m t ng d ng ch y Windows hàm WinMain, ñư c khai báo sau: int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow); Chúng ta s tìm hi u m t hàm WinMain m u sau ñây int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { static TCHAR szAppName[] = TEXT("HelloWin"); // tên ng d ng HWND hwnd; MSG msg; WNDCLASS wndclass; // bi n ñ ñ nh nghĩa m t c a s Trang 11 L P TRÌNH L P TRÌNH C TRÊN WINDOWS /* ð nh nghĩa ki u c a s */ wndclass.style = SC_HREDRAW | CS_VREDRAW; wndclass.lpfnWndProc = WndProc; // Hàm th t c c a s wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hInstance = hInstance; // ð nh danh ng d ng wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION); wndclass.hCursor = LoadCusor (NULL, IDC_ARROW); wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wndclass.lpszMenuName = NULL; // Khơng có menu wndclass.lpszClassName = szAppName; // tên ng d ng ch /* ðăng ký l p c a s */ if (!RegisterClass(&wndclass)) return 0; /* T o l p c a s */ Te NGÔN NG hwnd = CreateWindow (szAppName, // Tên c a s "Hello Program", // Tiêu ñ WS_OVERLAPPEDWINDOW, // Ki u c a s CW_USEDEFAULT, // T a ñ x CW_USEDEFAULT, // T a ñ y CW_USEDEFAULT, // Chi u r ng CW_USEDEFAULT, // Chi u dài NULL, // C a s cha NULL, // Khơng có menu hInstacne, // ð nh danh ng d ng Trang 12 NGÔN NG L P TRÌNH L P TRÌNH C TRÊN WINDOWS NULL); // Tham s b sung /* Hi n th c a s */ ShowWindow (hwnd, iCmdShow); UpdateWindow (hwnd); /* Chu trình x lý thơng p*/ while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg); DispatchMessage (&msg); } return msg.wParam; ch } ð nh nghĩa m t l p c a s : Te ð u tiên c a viêc xây d ng m t ng d ng Windows ph i ñ nh nghĩa m t l p c a s cho ng d ng Windows cung c p m t c u trúc WNDCLASS g i l p c a s , l p ch a nh ng thu c tính t o thành m t c a s typedef struct _WNDCLASS { UINT style; WNDPROC lpfnWndProc; int cbClsExtra; HINSTANCE hInstance; HICON hIcon; HCURSOR hCursor; HBRUSH hbrBackground; Trang 13 NGÔN NG L P TRÌNH L P TRÌNH C TRÊN WINDOWS LPCSTR lpszMenuName; LPCSTR lpszClassName; } WNDCLASS, *PWNDCLASS; Ý nghĩa thu c tính c a c u trúc WNDCLASS đư c mơ t b ng sau : Ý nghĩa ghi style Ki u l p K t h p nhi u ki u giá tr khác b ng toán t OR lpfnWndProc Con tr ñ n th t c window cbClsExtra S byte ñư c c p phát thêm sau c u trúc window-class M c ñ nh cbWndExtra S byte ñư c c p phát thêm sau m t instance c a window M c ñ nh hInstance ð nh danh ch a th t c c a s c a l p window hIcon ð nh danh c a bi u tư ng Dùng hàm LoadIcon hCursor ð nh danh c a tr chu t Dùng hàm LoadCursor hbrBackground ð nh danh c a ch i tô n n Dùng hàm GetStockObject lpszMenuName Tên th c ñơn Tên th c ñơn g n v i c a s , th c dơn ñư c khai báo t p tin tài nguyên lpszClassName Tên l p Te ch Thu c tính B ng 1.2 Mơ t thu c tính c a l p c a s ðăng ký l p c a s : Sau ñ nh nghĩa m t l p c a s , ph i ñăng ký l p c a s b ng hàm RegisterClass : ATOM RegisterClass( CONST WNDCLASS * lpWndClass ); T oc as : Trang 14 NGƠN NG L P TRÌNH L P TRÌNH C TRÊN WINDOWS L p c a s đ nh nghĩa nh ng đ c tính chung c a c a s , cho phép t o nhi u c a s d a m t l p Khi t o m t c a s c a hàm CreateWindow, ta ch ñ nh ñ c tính riêng c a c a s này, phân bi t v i c a s khác t o m t l p Khai báo hàm t o c a s : HWND CreateWindow( LPCSTR lpClassName, // Tên l p c a s ñã ñăng ký LPCSTR lpwindowName, // Tên c a c a s DWORD dwStyle, // Ki u c a c a s int x, // V trí ngang ban đ u int y, // V trí d c ban đ u int nWidth, // ð r ng ban ñ u int nHeight, // ð cao ban ñ u ch HWND hWndParent, // ð nh danh c a c a s cha MENU hMenu, // ð nh dang c a th c ñơn Te INSTANCE hInstance, // ð nh danh th hi n ng d ng PVOID lpParam // Các tham s ban ñ u ); Hi n th c a s : Sau g i hàm CreateWindow, m t c a s ñư c t o bên Windows, u có ý nghĩa Windows ñã cáp phát m t vùng nh ñ lưu gi t t c thông tin v c a s ñã ñư c ch ñ nh hàm CreateWindow Nh ng thơng s s đư c Windows tìm l i c n thi t d a vào ñ nh danh mà hàm t o c a s tr v Tuy nhiên, lúc c a s chưa xu t hi n hình Windows, đ xu t hi n c n ph i g i hàm ShowWindow Hàm ShowWindow có khai báo sau: BOOL ShowWindow( HWND hWnd, // ð nh danh c a c a s c n th hi n int nCmdShow // Tr ng thái hi n th Trang 15 NGÔN NG L P TRÌNH L P TRÌNH C TRÊN WINDOWS ); M t s tr ng thái c a tham s nCmdShow: • • • • SW_HIDE : n c a s SW_MAXIMIZE : Phóng c a s tồn b hình SW_MINIMIZE : thu nh thành bi u tư ng hình SW_RESTORE : Hi n th dư i d ng chu n 1.4.4 Hàm x lý c a s WndProc M t chương trình Windows có th ch a nhi u m t hàm x lý c a s M t hàm x lý c a s k t h p v i m t l p c a s ñ c thù Hàm x lý c a s thư ng ñư c ñ t tên WndProc Hàm WndProc có ch c giao ti p v i bên ngoài, t c v i Windows, tồn b thơng p g i ñ n c a s ñi u ñư c x lý qua hàm Hàm thư ng ñư c khai báo sau : LRESULT CALLBACK WndProc ( HWND, UINT, WPARAM, LPARAM ); Te ch Trong tham s đ u tiên đ nh danh c a c a s , tham s th đ nh danh thơng p, cu i tham s WPARAM LPARAM b sung thơng tin kèm theo thơng p Chúng ta s tìm hi u m t hàm x lý c a s WndProc sau: LRESULT CALLBACK WndProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; RECT rect; /*X lý thơng p c n thi t v i ng d ng*/ switch (msg) { case WM_CREATE: Trang 16 NGƠN NG L P TRÌNH L P TRÌNH C TRÊN WINDOWS /*Vi t đo n mã t o c a s */ return 0; case WM_PAINT: /*Vi t đo n mã tơ v l i c a s */ hdc = BeginPaint ( hwnd, &ps); GetClientRect (hwnd, &rect); DrawText(hdc, "Hello", -1, &rect, DT_SINGLELINE| DT_CENTER| DT_VCENTER); EndPaint ( hwnd, &ps); return 0; case WM_SIZE: /*Vi t đo n mã kích thư c c a s thay ñ i*/ ch return 0; /*C a s b đóng*/ Te case WM_DESTROY: PostQuitMessage (0); return 0; } return DefWindowProc ( hwnd, msg, wParam, lParam); } Thơng thư ng ch ch n đ x lý thơng p c n thi t có liên quan đ n ch c c a ng d ng Các thơng p khác giao cho hàm x lý m c ñ nh làm vi c (hàm DefWindowProc) 1.4.5 X lý thơng p Sau c a s ñư c hi n th hình, chương trình ph i đ c thông tin nh p c a ngư i dùng t bàn phím hay thi t b chu t Windows s trì m t hàng đ i thơng p cho Trang 17 NGƠN NG L P TRÌNH L P TRÌNH C TRÊN WINDOWS m i chương trình ch y Khi m t s ki n nh p thông tin xu t hi n, Windows s d ch s ki n thành d ng thơng p đưa vào hàng đ i thơng p c a ng d ng tương ng M t ng d ng nh n thơng p t hàng ñ i thông ñi p b ng cách th c thi m t ño n mã sau: while ( GetMessage(&msg, NULL, ,0) ) { TranslateMessage (&msg); DispatchMessage (&msg); } Trong msg m t bi n c u trúc ki u MSG ñư c ñ nh nghĩa t p tin tiêu ñ WINUSER.H typedef struct tagMSG { ch HWND hwnd; WPARAM wParam; Te UINT message; LPARAM lParam; DWORD time; POINT pt; } MSG, *PMSG; Ki u d li u POINT m t ki u c u trúc khác, ñư c ñ nh nghĩa t p tin tiêu đ WINDEF.H, có mơ t : typedef struct tagPOINT { LONG x; LONG y; Trang 18 NGƠN NG L P TRÌNH L P TRÌNH C TRÊN WINDOWS } POINT, *PPOINT; Ý nghĩa c a trư ng c u trúc MSG hwnd : ð nh danh c a c a s mà thông ñi p phát sinh message : ð nh danh c a thơng p, ví d thơng p phát sinh b m nút chu t trái WM_LBUTTONDOWN có giá tr 0x0201 wParam : Tham s 32-bit ch a thông tin ph thu c vào t ng thơng p c th lParam : Tham s 32-bit ph thu c vào thơng p time : Th i gian đ t thơng p hàng ñ i pt : T a ñ c a chu t đ t thơng p vào hàng ñ i Hàm GetMessage s tr v n u msg ch a thơng p có đ nh danh WM_QUIT (0x0012), vịng l p thơng p ngưng ng d ng k t thúc Ngư c l i hàm s tr v m t giá tr khác v i thơng p khác 1.4.6 Xây d ng m t ng d ng ñ u tiên ch M t ng d ng thư ng có giao di n n n t ng m t khung c a s , ñ t o ñư c c a s th c hi n b ng cách khai báo m t l p c a s ñăng ký l p c a s ð c a s tương tác đư c ph i vi t hàm x lý c a s WndProc t t c thơng p liên quan đ n c a s s ñư c truy n vào cho hàm ðo n chương trình sau khung sư n cho chương trình vi t Windows, bao g m hàm : • • • • Te WinMain : hàm c a chương trình th c hi n ch c : Khai báo l p c a s ðăng ký l p c a s v a khai báo T o hi n th l p c a s Vịng l p nh n thơng p WndProc : Hàm x lý thơng p g i đ n c a s /* HELLOWORLD.C */ #include LRESULT CALLBACK WndProc ( HWND, UINT, WPARAM, LPARAM ); int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow ) { static TCHAR szAppName [] = TEXT ("HelloWorld"); HWND hwnd; Trang 19 NGƠN NG L P TRÌNH L P TRÌNH C TRÊN WINDOWS MSG msg; WNDCLASS wndclass; wndclass.style = CS_HREDRAW|CS_VREDRAW; wndclass.lpfnWndProc = WndProc; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hInstance = hInstance; wndclass.hIcon = LoadIcon ( NULL, IDI_APPLICATION ); wndclass.hCursor = LoadCursor ( NULL, IDC_ARROW ); wndclass.hbrBackground = wndclass.lpszMenuName = NULL; ( HBRUSH ) GetStockObject ( WHITE_BRUSH ); ch wndclass.lpszClassName = szAppName; { Te if ( !RegisterClass ( &wndclass ) ) MessageBox(NULL, TEXT (" The program requires Windows"), szAppName, MB_ICONERROR ); return 0; } hwnd = CreateWindow ( szAppName, // Tên l p c a s TEXT (" The Hello World Program"), // Tiêu ñ c a s WS_OVERLAPPEDWINDOW, // Ki u c a s CW_USEDEFAULT, // T a ñ x CW_USEDEFAULT, // T a ñ y CW_USEDEFAULT, // Chi u ngang CW_USEDEFAULT, // Chi u d c Trang 20 NGƠN NG L P TRÌNH L P TRÌNH C TRÊN WINDOWS NULL, // C a s cha NULL, // Th c ñơn hInstance, // ð nh danh NULL ); // Tham s ShowWindow ( hwnd, iCmdShow ); UpdateWindow ( hwnd ); while ( GetMessage ( &msg, NULL, 0, 0) ) { TranslateMessage (&msg); DispatchMessage (&msg) ; } ch } // End WinMain return msg.wParam; { Te LRESULT CALLBACK WndProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) HDC hdc; PAINTSTRUCT ps; RECT rect; switch ( msg ) { case WM_CREATE: return 0; case WM_PAINT: hdc = BeginPaint ( hwnd, &ps); GetClientRect ( hwnd, &rect ); Trang 21 NGƠN NG L P TRÌNH L P TRÌNH C TRÊN WINDOWS DrawText( hdc, TEXT("Hello World"), -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER ); EndPaint ( hwnd, &ps); return 0; case WM_DESTROY: PostQuitMessage (0); return 0; } // End switch return DefWindowProc ( hwnd, msg, wParam, lParam); } B ng dư i ñây li t kê ý nghĩa c a hàm ñư c s d ng hàm WinMain WndProc c a chương trình HELLOWORLD.C Ý nghĩa ch Tên hàm N p m t bi u tư ng ñ s d ng chương LoadIcon LoadCursor Te trình Nap m t tr chu t cho chương trình GetStockObject Nh n m t ñ i tư ng ñ h a, trư ng h p c a chương trình l y m t ch i tơ đ tơ l i n n c a c a s RegisterClass ðăng ký m t l p c a s cho c a s chương trình ng d ng MessageBox Hi n th m t thơng p CreateWindow T o m t c a s d a m t l p c a s ShowWindow Hi n th c a s lên hình UpdateWindow Yêu c u c a s v l i b n thân GetMesssage Nh n m t thơng p t hàng ñ i thông ñi p TranslateMessage D ch thông ñi p bàn phím DispatchMessage G i thơng p đ n hàm x lý c a s Trang 22 NGƠN NG L P TRÌNH L P TRÌNH C TRÊN WINDOWS BeginPaint Kh i t o ch c v c a c a s GetClientRect L y hình ch nh t lưu vùng làm vi c DrawText Hi n th m t chu i văn b n EndPaint K t thúc vi c v c a s PostQuitMessage ðưa thơng p vào hàng đ i thơng p DefWindowProc Th c hi n vi c x lý m c đ nh thơng p B ng 1.3 Mơ t hàm đư c s d ng chương trình minh h a 1.4.7 M t s qui c ñ t tên bi n Te ch Khi vi t m t chương trình ng d ng l n v i nhi u ki u khai báo bi n khác nhau, n u vi c khai báo tên bi n không thích h p s làm cho chương trình ph c t p thêm, đơi làm khó c ngư i vi t mã ngu n Vì v y l p trình viên thư ng qui c cho m t tên bi n v a g i ñư c ch c c a v a xác đ nh đư c ki u lo i Có r t nhi u phong cách đ đ t tên, s có phong cách ñ t tên theo cú pháp Hungary (Hungarian Notation) ñư c dùng nhi u nh t Qui c r t ñơn gi n b t ñ u tên bi n vi t ch thư ng ch ñ u th hi n ki u d li u c a bi n, ñư c g i ti n t Ví d bi n szCmdLine m t bi n lưu chu i nh p t dòng l nh, sz th hi n cho bi n ki u chu i k t thúc ký t 0, ta hay th y hInstance hPrevInstance, h vi t t t cho ki u handle, ki u d li u nguyên thư ng ñư c khai báo d ng ti n t ch i Cú pháp Hungary giúp cho ngư i l p trình r t nhi u khâu ki m tra l i c a chương trình, nhìn vào hai bi n ta có th d dàng nh n bi t ñ ơc s khơng tương thích gi a hai ki u d li u th hi n tên c a hai bi n B ng mô t m t s ti n t ñ t tên bi n c a ki u d li u : Ti n t Ki u d li u c char, WCHAR, TCHAR by BYTE n short i int x,y bi n lưu t a ñ x, y b BOOL Trang 23 L P TRÌNH L P TRÌNH C TRÊN WINDOWS w WORD l long dw DWORD s string sz chu i k t thúc b i kí t h handle p pointer Lpsz tr dài chu i ký t k t thúc kí t ch B ng 1.4 Mơ t ki u đ t tên bi n Te NGÔN NG Trang 24 ... bar) C? ?c ch c c a chương trình đư c li t kê th c ñơn l a ch n c a chương trình (menu) , hay xu t hi n dư i d ng tr c quan c? ?ng c (toolbar) C? ?c công c ch a ch c ñư c s d ng thư ng xuyên th c ñơn... L P TRÌNH L P TRÌNH C TRÊN WINDOWS MSG msg; WNDCLASS wndclass; wndclass.style = CS_HREDRAW|CS_VREDRAW; wndclass.lpfnWndProc = WndProc; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hInstance... thích v i Windows 3.1 nên t p tin thư ng đư c dùng, c? ??n ngày chúng đư c dùng đ n Te C? ?c file ch a tài nguyên c a ng d ng • C? ?c file *.ico bi u tư ng (icon) đư c dùng chương trình Thơng thư ng c? ?ng

Ngày đăng: 02/10/2013, 20:20

TỪ KHÓA LIÊN QUAN

w