Tải bản đầy đủ (.pdf) (23 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (923.37 KB, 23 trang )

NGƠN NG

L P TRÌNH

L P TRÌNH C TRÊN WINDOWS

Chương 1
T NG QUAN L P TRÌNH C TRÊN WINDOWS
1.1. M

ð U

ð l p trình trên Microsoft Windows®, chúng ta c n n m ñư c các ñ c ñi m cơ b n nh t
c a h ñi u hành này. Chương này s gi i thi u khái quát các ñ c ñi m h ñi u hành Microsoft
Windows, các v n đ liên quan đ n l p trình b ng ngơn ng C, đ ng th i đưa ra m t chương
trình m u làm sư n cho các chương trình đư c vi t sau này.
Trong ph n đ u, chúng ta tìm hi u sơ lư c l ch s phát tri n c a h ñi u hành Microsoft
Windows® và 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 và yêu c u căn b n c a vi c l p trình C trên
Windows. Ngồi ra, ph n này cũng gi i thi u các cơ ch và các cơng c mà h đi u hành cung
c p cho ngư i l p trình hay ngư i phát tri n các ng d ng trên Windows.

ch
2

4.

vn

Cu i chương là ph n xây d ng m t chương trình ñơn gi n nh t trên Windows. Chương
trình này ñư c xem như là khuôn m u c a m t chương trình ng d ng đi n hình, và h u h t các


đo n chương trình đư c vi t minh h a trong sách ñ u l y chương trình này làm khung sư n đ
phát tri n cho phù h p v i t ng yêu c u. Thêm vào đó, m t s ki u d li u m i ñư c ñ nh nghĩa
trên Windows và nh ng qui ư c v cách ñ t tên bi n cũng ñư c gi i thi u trong ph n này.

Te

Ph n chi ti t và chuyên sâu hơn c a vi c l p trình b ng ngôn ng C trên môi trư ng
Windows s ñư c trình bày trong các 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 đi u hành Windows là Microsoft Windows® 1.0. ðây là h đi 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) thì m i có bư c c i ti n đáng k , đó là s m r ng
giao ti p gi a bàn phím và thi t b chu t và giao di n đ h a (GUI-Graphic User Interface) như
trình đơn (menu) và h p tho i (dialog). Trong phiên b n này Windows ch yêu c u b vi x lý
Intel 8086 hay 8088 ch y real-mode ñ truy xu t 1 megabyte b nh .
Tháng 5 năm 1990, Microsoft công b phiên b n ti p theo là Windows 3.0. S thay ñ i
l n trong phiên b n này là Windows 3.0 h tr protected-mode 16 bit c a các b vi x lý 286,
386, và 486 c a Intel. S thay ñ i này cho phép các ng d ng trên Windows truy xu t 16
megabyte b nh . Ti p bư c v i s phát tri n là phiên b n Windows 3.1 ra ñ i năm 1992,
Microsoft đưa cơng ngh Font TrueType, âm nh c (multimedia), liên k t và nhúng ñ i tư ng
(OLE- Object Linking and Embedding), và ñưa ra các h p tho i chung đã đư c chu n hóa.

Trang 2


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
đi u hành Windows v i ng d ng cơng ngh m i (1993). H ñi u hành này l y tên là
Windows® NT® (Windows New Technology), đây là 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 và Pentium. Trong h đi u hành này thì các ng
d ng ph i truy xu t b nh v i ñ a ch là 32-bit và các t p l nh hay ch th 32-bit. Ngoài ra
Windows NT cũng ñư c thi t k ñ ch y các b vi x lý (CPU) khác ngồi Intel và có th ch y
trên các máy tr m (workstation).
H ñi u hành Windows 95 đư c cơng b năm 1995 cũng là m t h ñi u hành 32-bit cho
Intel 386 tr v sau. Tuy thi u tính b o m t như Windows NT và vi c thích nghi v i máy tr m
công ngh RISC, nhưng bù l i h ñi u hành này yêu c u ph n c ng không cao.
Song song v i s phát tri n ph n m m thì cơng ngh ph n c ng cũng phát tri n không
kém. ð t n d ng s c m nh c a ph n c ng thì các th h Windows ti p theo ngày càng hoàn
thi n hơn. Như Windows 98 phát tri n t Window 95 và có nhi u c i thi n như hi u năng làm
vi c, h tr các thi t b ph n c ng t t hơn, và cu i cùng là vi c tích h p ch t ch v i Internet và
Word Wide Web.

vn

Windows 2000 là h ñi u hành ñư c xem là n đ nh và t t c a dịng Windows, phiên b n
này tăng cư ng các tính năng b o m t thích h p trong m i trư ng m ng và giao di n ñ p.

4.

1.2.2. ð c ñi m chung c a h ñi u hành Microsoft Windows

Te


ch
2

Windows là 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 là
h đi u hành tr c quan (Visual interface). GUI s d ng ñ h a d a trên màn hình nh nh phân
(Bitmapped video display). Do đó t n d ng đư c tài nguyên th c c a màn hình, và cung c p m t
mơi trư ng giàu tính tr c quan và sinh đ ng.
Windows khơng đơn đi u như MS-DOS (hay m t s h ñi u hành giao di n console) mà
màn hình đư c s d ng ch ñ th hi n chu i ký t , do 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, màn 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
các nút nh n (button) các hôp ch n (combo box)…thi t b bây gi ñư c nh p, có th là bàn phím
và thi t b chu t (mouse device). Thi t b chu t là m t thi t b ñ nh v trên màn 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 các ñ i tư ng ñ h a liên quan ñ n t a ñ trên màn hình.
ð giao ti p trong mơi trư ng đ h a, Windows đưa ra m t s các thành ph n g i là các
ñi u khi n chung (common control), các ñi u khi n chung là các ñ i tư ng ñư c ñưa vào trong
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 ra m t ng d ng trên Windows không ph i là q ph c t p vì 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 trên màn hình g i là
m t c a s . Trên cùng c a m i c a s là thanh tiêu ñ (title bar). Các ch c năng c a chương
trình thì đư c li t kê trong 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 hơn là các thanh công c (toolbar). Các thanh công c này ch a các ch c năng ñư c
s d ng thư ng xuyên trong th c ñơn ñ gi m th i gian cho ngư i dùng ph i m th c ñơn và
Trang 3


NGƠN NG


L P TRÌNH

L P TRÌNH C TRÊN WINDOWS

ch n. Thông thư ng khi c n l y thông tin hay cung c p thông tin cho ngư i dùng thì m t ng
d ng s đưa ra m t h p tho i, trong h p tho i này s ch a các ñi u khi n chung ñ giao ti p v i
ngư i dùng. Windows cũng ra t o m t s các h p tho i chu n như Open Files, và m t s h p
tho i tương t như nhau.
Windows là 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 cùng m t lúc, và cũng có th ñ ng th i chuy n qua l i gi a các ng d ng và th c thi
chúng. Trong các phiên b n c a Windows® 98 và NT® tr v sau, các 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à v i t c ñ x lý nhanh t o c m
giác nh ng chương trình ng d ng này ch y đ ng th i v i nhau.
Trong Windows, chương trình ng d ng khi th c thi ñư c chia s nh ng th t c mà
Windows cung c p s n, các t p tin cung c p nh ng th t c trên ñư c g i là thư vi n liên k t
ñ ng (Dynamic Link Libraries - DLL). Windows có cơ ch liên k t nh ng chương trình ng
d ng v i các th t c ñư c cung c p trong thư vi n liên k t ñ ng.

ch
2

4.

vn

Kh năng tương thích c a Windows cũng 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 như màn hình và
máy in. Mà thay vào đó, h đi u hành cung c p m t ngơn ng l p trình đ h a (g i là 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 màn hình nào
hay b t kì máy in, mi n là đã cài ñ t trình ñi u khi 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 trên khái ni m liên k t ñ ng là thành ph n quan tr ng c a
Windows, nó đư c xem như là h t nhân c a h đi u hành, vì b n thân c a Windows là các 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 và hi n th văn b n hay ñ h a trên màn hình. Nh ng hàm này đư c
cài ñ t trong thư vi n liên k t ñ ng hay cịn g i là DLL. ðó là các t p tin có d ng ph n m r ng
là *.DLL hay *.EXE, h u h t ñư c ch a trong thư m c \Windows\System,
\Windows\system32 c a Windows® 98 và các thư m c \WinNT\System, \WinNT\System32
c a Windows® NT®.
Trong các phiên b n sau này, h th ng liên k t ñ ng ñư c t o ra r t nhi u, tuy nhiên, h u
h t các hàm ñư c g i trong thư vi n này phân thành 3 ñơn v sau: Kernel, User, và GDI.
Kernel cung c p các hàm và th t c mà m t h t nhân h ñi u hành truy n th ng qu n lý,
như qu n lý b nh , xu t nh p t p tin và tác v . Thư vi n này ñư c cài ñ t trong t p tin
KRNL386.EXE 16 bit và 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 trong t p tin USER.EXE 16 bit và 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 và ñ ho trên các thi t b xu t ph n c ng như màn hình
và máy in.

Trang 4


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 này dùng ñ t o m t c a s cho ng d ng. Khi s d ng các
hàm mà Windows cung c p cho thì các ng d ng ph i khai báo trong các t p tin tiêu ñ .h hay
.hpp (header file).
Trong m t chương trình Windows, có s khác bi t khi ta g i m t hàm c a thư vi n C và
m t hàm c a Windows hay thư vi n liên k t ñ ng cung c p. ðó là khi biên d ch mã máy, các
hàm thư vi n C s ñư c liên k t thành mã chương trình. Trong khi các hàm Windows s đư c
g i khi 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 các
l i g i này thì 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à nó c n dùng. Khi đó, m t chương trình Windows ñư c n p vào b nh s t o con
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 này chưa ñư c
n p vào b nh trư c đó thì bây gi s đư c n p.

1.3. L P TRÌNH TRÊN MICROSOFT WINDOWS
1.3.1. ð c ñi m chung

4.

vn

Windows là h ñi u hành ñ h a tr c quan, do dó các 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
2

Theo như nh ng m c đích ti p c n c a các nhà l p trình thì các ng d ng trên 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 thì m t ngư i dùng làm vi c ñư c v i m t ng d ng c a Windows thì có th làm vi c
ñư c v i nh ng ng d ng khác. Nhưng trong th c t ñ s d ng m t ng d ng cho ñ t hi u qu
cao trong Windows thì c n ph i có m t s hu n luy n tr giúp hay t i thi u thì ph i cho bi t
chương trình ng d ng làm vi c như th nào.
ða s các ng d ng trong Windows đ u có chung m t giao di n tương tác v i ngư i
dùng gi ng nhau. Ví d như các ng d ng trong Windows đa s đ u có thanh th c ñơn ch a các
m c như : File, Edit, Tool, Help… Và trong h p tho i thì thư ng ch a các ph n t ñi u khi n
chung như : Edit Control, Button Control, Checkbox….

1.3.2. S khác bi t v i l p trình trên MS-DOS
Khi m i bư c vào l p trình trên Windows ña s ngư i h c r t l l m, nh t là nh ng
ngư i ñã t ng làm vi c v i MS-DOS. Do MS-DOS là h ñi u hành ñơn nhi m và giao ti p qua
giao di n console. Nên khi 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
cù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 trên 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 các s c m nh tài nguyên c a Windows s làm cho nh ng ng d ng càng m nh m , ña d ng,
thân thi n, và d s d ng.

1.3.3. M t s yêu c u đ i v i ngư i l p trình
Trang 5


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 trên Windows là ph i bi t l p trình C, sách này
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 trên Windows mà chưa
qua m t l p hu n luy n C nào. 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 trên n n Windows ngoài yê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ó căn b n v Windows, t i thi u thì cũng đã dùng qua m t s ng d ng
trong Windows. Th t s u c u này khơng q khó khăn ñ i v i ngư i h c vì hi n t i h u như
Windows quá 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 khi ngư i l p trình trên Windows cũng c n có khi u th m
m , vì cách trình bày các hình nh, các đi u khi n trên các h p tho i t t thì s làm cho ng d ng
càng ti n l i, rõ ràng, và 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
2

4.

vn

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 các tài nguyên trong h th ng. Nh ng hàm này ñư c g i là giao di n l p trình ng d ng
API (Application Programming Interface). Nh ng hàm trên ñư c ch a trong các thư vi n liên
k t ñ ng DLL c a h th ng. Nh có c u trúc đ ng này m i ng d ng đ u có th truy c p đ n các

hàm đó. Khi biên d ch chương trình, đ n đo n mã g i hàm API thì chương trình d ch khơng thêm
mã hàm này vào mã th c thi mà ch thêm tên DLL ch a hàm và tên c a chính hàm đó. Do đó mã
các hàm API th c t khơng đư c s d ng khi xây d ng chương trình, và nó ch đư c thêm vào
khi 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 năng duy trì s đ c l p thi t b đ h a, và các hàm này
g i là giao di n thi t b ñ h a GDI (Graphics Device Interface). Do s ñ c l p thi t b nên các
hàm GDI cho phép các ng d ng có th làm vi c t t v i nhi u ki u thi t b ñ h a khác nhau.

1.3.5. Cơ ch thơng đi p
Khơng gi ng như các ng d ng ch y trên MS-DOS, các ng d ng Win32® thì x lý theo
các s ki n (event - driven), theo cơ ch này các ng d ng khi ñư c vi t s liên t c ch cho h
ñi u hành truy n các d li u nh p vào. H th ng s ñ m nhi m vi c truy n t t c các d li u
nh p c a ng d ng vào các c a s khác nhau c a ng d ng đó. M i m t c a s s có riêng m t
hàm g i là hàm x lý c a s thư ng ñư c ñ t tên là WndProc, h th ng s g i hàm này khi có
b t c d li u nh p nào ñư c truy n ñ n c a s , hàm này s x lý các d li u nh p đó và tr
quy n ñi u khi n v cho h th ng.
H th ng truy n các 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 là thơng đi p (message). Thơng đi p này ñư c phát sinh t ng d ng và h th ng. H th ng
s phát sinh m t thông ñi p khi có m t s ki n nh p vào (input even), ví d như khi ngư i dùng
nh n m t phím, di chuy n thi t b chu t, hay kích vào các đi u khi n (control) như thanh
cu n,… Ngoài ra h th ng cũng phát sinh ra thơng đi p đ ph n ng l i m t s thay ñ i c a h
th ng do m t ng d ng mang ñ n, ñi u này x y ra khi 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 6



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 ra thơng đi p khi c n yêu c u các c a s c a nó th c hi n
m t nhi m v nào đó hay dùng đ thơng tin gi a các c a s .
H th ng g i thơng đi 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 đi p, và hai tham s cịn l i ñư c g i là tham s c a thơng đi 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 này ñ xác ñ nh c n ph i g i thơng đi p đ n th t c x lý c a c a s .
ð nh danh thơng đi p là 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 đi p thì nó s dùng đ nh danh này đ bi t hình th c c n th c hi n. Ví d , khi
m t thơng đi p đư c truy n đ n th t c c a s có đ nh danh là WM_PAINT thì có ý nghĩa r ng
c a s vùng làm vi c thay ñ i và c n ph i v l i vùng này.
Tham s thông ñi p lưu giá tr hay v trí c a d li u, ñư c dùng b i th t c c a s khi x
lý thơng đi p. Tham s này ph thu c vào lo i thơng đi p đư c truy n đ n, nó có th là s
nguyên, m t t p các bit dùng làm c hi u, hay m t con tr ñ n m t c u trúc d li u nào đó,…

vn

Khi m t thơng đi p khơng c n dùng đ n tham s thì h th ng s thi t l p các tham s này
có giá tr NULL. M t th t c c a s ph i ki m tra xem v i lo i thơng đi p nào c n dùng tham s
ñ quy t ñ nh cách s d ng các tham s này.

4.

Có hai lo i thơng đi p :


ch
2

Thơng đi p đư c đ nh nghĩa b i h th ng (system-defined messages) :

Te

D ng thơng đi p này đư c h th ng ñ nh nghĩa cho các c a s , các ñi u khi n, và các tài
nguyên khác trong h th ng. Thư ng ñư c b t ñ u v i các ti n t sau : WM_xxx, LB_xxx,
CB_xxx,…
Thông ñi p ñư c ñ nh nghĩa b i ng d ng (application-defined message) :
M t ng d ng có th t o riêng các thơng đi p đ s d ng b i nh ng c a s c a nó hay
truy n thơng tin gi a các c a s trong ng d ng.
N u m t ng d ng đ nh nghĩa các thơng đi p riêng thì th t c c a s nh n đư c thơng
đi p này ph i cung c p các hàm x lý tương ng.
ð i v i thơng đi p h th ng, thì đư 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 đi p có giá tr trong kho ng này.
Thơng ñi p ñư c ng d ng ñ nh nghĩa có giá tr đ nh danh t 0x0400 đ n 0x7FFF.
L trình c a thơng đi p t lúc g i đi đ n lúc x lý có hai d ng sau:
Thơng đi p đư c g i vào hàng ñ i thông ñi p ñ ch x lý (queue message): bao g m
các ki u thơng đi p đư c phát sinh t bàn phím, chu t như thơng ñi p : WM_MOUSEMOVE,
WM_LBUTTONDOWN, WM_KEYDOWN, và WM_CHAR.

Trang 7


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 các thơng đi p th i gian, thơng đi p v , và thơng đi p thốt như WM_TIMER,
WM_PAINT, và WM_QUIT.
X lý thơng đi p : M t ng d ng ph i xóa và x lý nh ng thơng đi 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 thì s d ng m t vịng l p thơng đi p
(message loop) trong hàm WinMain ñ nh n thông ñi p t hàng ñ i và 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 thì m i m t ti u trình có t o c a s thì s có
m t vịng l p thơng đi p ñ x lý thông ñi p c a nh ng c a s trong 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 cơ b n t o nên m t ng d ng
1.4.1.1. C a s

vn

Trong m t ng d ng ñ h a 32-bit, c a s (window) là m t vùng hình ch nh t trên màn
hình, nơi mà ng d ng có th hi n th thơng tin ra và 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 là t o m t c a s .

ch
2

4.

M t c a s s chia s màn hình v i các c a s khác trong cùng m t ng d ng hay các

ng d ng khác. Ch m t c a s trong m t th i đ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 các thi t b nh p li u khác ñ tương tác
v i c a s và ng d ng.

Te

T t c các c a s ñ u ñư c t o t m t c u trúc ñư c cung c p s n g i là l p c a s
(window class). C u trúc này là m t t p mơ t các thu c tính mà h th ng dùng như khn m u
đ t o nên các c a s . M i m t c a s ph i là thành viên c a m t l p c a s . T t c các l p c a
s này ñ u ñư c x lý riêng bi t.
1.4.1.2. H p tho i và các ñi u khi n
H p tho i (Dialog) dùng ñ tương tác v i ngư i dùng trong m t chương trình ng d ng.
M t h p tho i thư ng ch a nhi u các ñ u khi n như ô nh p văn b n (edit text), nút b m (button),
ghi chú (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 trong hai tr ng thái (TRUE hay FALSE), Radio Button cũng gi ng như
Check Box nhưng m t nhóm các Radio Button ph i ñư c ch n lo i tr nhau.
Chú thích (static): dùng đ ch a các ghi chú trong h p tho i, ngồi ra n i dung
có th thay đ i trong q 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ê trong danh sách,
n u h p ch a nhi u dịng và h p khơng hi n th h t các m u thơng tin thì ph i kèm theo m t
thanh 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ì thư ng
kèm theo thanh cu n.

Trang 8


NGƠN NG


L P TRÌNH

L P TRÌNH C TRÊN WINDOWS

Thanh cu n (scroll bar): ngoài vi c dùng kèm v i list box hay edit box thì thanh
cu n cịn có th s d ng ñ c l p nh m t o các thư c ño…
Th c ñơn (menu): là m t danh sách ch a các thao tác v i m t đ nh danh mà
ngư i dùng có th ch n. H u h t các ng d ng có c a s thì khơng th thi u th c đơn.
Thanh cơng c (toolbar): đây là m t d ng menu nhưng ch ch a các thao tác c n
thi t dư i d ng các bi u tư ng đ c trưng.
Ngồi ra cịn r t nhi u các đi u khi n mà các cơng c l p trình cung c p cho ngư i l p
trình hay t h t o ra d a trên nh ng thành ph n ñư c cung c p s n.
1.4.1.3.

ng d ng đi n hình trên Windows

1.4.1.4. Các ki u t p tin ñ xây d ng m t ng d ng trên Windows
Chương trình ngu n
Tương t như các chương trình C chu n, bao g m các t p tin tiêu ñ (header) ch a trong
t p tin *.h, *.hpp. Còn mã ngu n (source code) ch a trong t p tin *.c hay *.cpp.

vn

T p tin đ nh nghĩa

ch
2

4.


T p tin này có ph n m r ng là *.def, dùng ñ nh nghĩa các ñi u khi n do chương trình
t o ra khi vi t ng d ng t o DLL, ngoài ra cịn dùng đ khai báo vùng nh heap khi ch y chương
trình. Lúc trư c do v n đ tương thích v i Windows 3.1 nên t p tin này thư ng đư c dùng, cịn
ngày nay chúng ít đư c dùng ñ n.

Te

Các file ch a tài nguyên c a ng d ng
• Các file *.ico là các bi u tư ng (icon) đư c dùng trong chương trình. Thơng
thư ng các cơng c l p trình trên Windows ñ u có các tool ñ t o các nh này.
• Con tr chu t c a ng d ng có th đư c v l i dư i d ng các bi u tư ng và lưu
trên ñĩ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 là ph n khai báo các tài nguyên như th c ñơn, h p tho i,
và các ñ nh danh ch ñ n các 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 trên Windows thư ng ñư c ñ nh nghĩa nh toán t typedef trong t p tin
windows.h hay các t p tin khác. Thông thư ng các t p tin ñ nh nghĩa này do Microsoft vi t ra
ho c các cơng ty vi t trình biên d ch C t o ra, nh t thi t nó ph i tương thích v i h đi u hành
Windows 98, hay NT d a trên 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 như UINT là m t d li u thư ng ñư c
dùng mà ñơn gi n là ki u unsigned int, trong Windows 9x ki u này có kích thư c là 32-bit. ð i
v i ki u chu i thì có ki u PSTR ki u này là m t con tr ñ n m t chu i tương t như char*.

Trang 9


NGƠN NG

L P TRÌNH


L P TRÌNH C TRÊN WINDOWS

Tuy nhiên, cũng có m t s ki u đư c khái báo tên thi u rõ ràng như WPARAM và
LPARAM. Tên này đư c đ t vì có ngu n ng c l ch s sâu xa. Khi cịn h đi u hành Windows
16-bit thì tham s th 3 c a hàm WndProc ñư c khai báo là ki u WORD, v i kích thư c 16-bit
, cịn tham s th 4 có ki u LONG là 32-bit. ðây là lý do ngư i ta thêm ti n t "W", "L" vào t
"PARAM". Tuy nhiên, trong phiên b n Windows 32-bit, thì WPARAM đư c đ nh nghĩa như là
UINT và LPARAM thì đư c đ nh nghĩa như m t ki u LONG, do đó c hai tham s này ñ u có
giá tr là 32-bit. ði u này là m t s nh m l n vì WORD v n là giá tr 16-bit trong Window 98.
Trong th t c x lý c a s WndProc giá tr tr v là ki u LRESULT. Ki u này ñơn gi n
đư c đ nh nghĩa như là ki u LONG.
Ngồi ra, có m t ki u thư ng xuyên dùng là ki u HANDLE là m t s nguyên 32-bit
ñư c s d ng như m t ki u ñ nh danh. Có nhi u ki u đ nh danh nhưng nh t thi t t t c ph i có
cùng 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.

4.

ch
2

Te

DWORD

vn

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 con 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 như LPSTR nhưng có th chuy n sang d ng Unicode
và DBCS.
Trang 10



NGƠN NG

L P TRÌNH
LPCTSTR

L P TRÌNH C TRÊN WINDOWS
Gi ng như LPCTSTR nhưng có th chuy n sang d ng
Unicode và DBCS.
B ng 1.1 Mô t các 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 là WinMain và x lý
c a s WinProc. Do đó hai hàm này là quan tr ng và không th thi u trong các ng d ng
Windows.
Hàm WinMain th c hi n các ch c năng 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 ra 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 đi p.

vn








Te

1.4.3. Hàm WinMain

ch
2

4.

Hàm x lý WinProc có ch c năng x lý t t c các thơng đi p có liên quan đ n c a s .

Hàm chính c a m t ng d ng ch y trên Windows là hàm WinMain, ñư c khai báo như
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);

vn

wndclass.lpszMenuName = NULL; // Khơng có menu

4.

wndclass.lpszClassName = szAppName; // tên ng d ng

ch
2

/* ðă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ý các thơng ñi p*/
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg);

DispatchMessage (&msg);

vn

}

4.

return msg.wParam;

ch
2

}
ð 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 là 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à l p c a s , l p này 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 trong b ng sau :
Ý nghĩa

ghi chú

style

Ki u l p

K t h p nhi u ki u giá tr khác nhau
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 con 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
này ñư c khai báo trong t p tin tài
nguyên.

lpszClassName

Tên l p

Te

ch
2

4.

vn

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 khi ñ 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 ra nhi u c a s
d a trên m t l p. Khi t o ra m t c a s c a hàm CreateWindow, ta ch ñ nh các đ c tính riêng
c a c a s này, và phân bi t nó v i các c a s khác t o ra cùng 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

vn

int nWidth, // ð r ng ban ñ u

4.


int nHeight, // ð cao ban ñ u

ch
2

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 khi g i hàm CreateWindow, m t c a s ñư c t o ra bên trong Windows, đi u này
có ý nghĩa là Windows ñã cáp phát m t vùng nh ñ lưu gi t t c các thông tin v c a s ñã
ñư c ch ñ nh trong hàm CreateWindow. Nh ng thơng s này s đư c Windows tìm l i khi 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 này c a s chưa xu t hi n trên
màn hình Windows, đ xu t hi n c n ph i g i hàm ShowWindow.
Hàm ShowWindow có khai báo như 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 ra tồn b màn hình.
SW_MINIMIZE : thu nh thành bi u tư ng trên màn 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 hơn m t hàm x lý c a s . M t hàm x lý
c a s luôn 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 năng giao ti p v i bên ngoài, t c là v i Windows, toàn b các
thơng đi p g i đ n c a s ñi u ñư c x lý qua hàm này.

vn

Hàm này thư ng ñư c khai báo như sau :

4.

LRESULT CALLBACK WndProc ( HWND, UINT, WPARAM, LPARAM );


Te

ch
2

Trong đó tham s ñ u tiên là ñ nh danh c a c a s , tham s th 2 là ñ nh danh thơng
đi p, và cu i cùng là 2 tham s WPARAM và LPARAM b sung thông tin kèm theo thơng
đi 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ý các thơng đi 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ã khi t o c a s */
return 0;
case WM_PAINT:
/*Vi t đo n mã khi 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;

vn

case WM_SIZE:

4.

/*Vi t đo n mã khi kích thư c c a s thay ñ i*/

ch
2

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úng ta ch ch n ñ x lý các thơng đi p c n thi t có liên quan ñ n ch c
năng c a ng d ng. Các thơng đi p khác thì giao cho hàm x lý m c ñ nh làm vi c (hàm
DefWindowProc).

1.4.5. X lý thơng đi p
Sau khi c a s đư c hi n th trên màn hình, thì chương trình ph i đ c cá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 duy trì m t hàng đ i thơng đi 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 trên nó. Khi m t s ki n nh p thông tin xu t hi n, Windows s d ch s
ki n này thành d ng thơng đi p và đưa nó vào hàng đ i thơng đi p c a ng d ng tương ng.
M t ng d ng nh n các thơng đi 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 ,0) )
{
TranslateMessage (&msg);

DispatchMessage (&msg);
}

Trong đó msg là m t bi n c u trúc ki u MSG ñư c ñ nh nghĩa trong t p tin tiêu ñ
WINUSER.H.

vn

typedef struct tagMSG

4.

{

ch
2

HWND hwnd;

WPARAM wParam;

Te

UINT message;

LPARAM lParam;
DWORD time;
POINT pt;
} MSG, *PMSG;
Ki u d li u POINT là m t ki u c u trúc khác, ñư c ñ nh nghĩa trong t p tin tiêu đ

WINDEF.H, và 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 các trư ng trong 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 đi p, ví d như thơng ñi p phát sinh khi b m nút
chu t trái là WM_LBUTTONDOWN có giá tr 0x0201.
wParam : Tham s 32-bit ch a các thông tin ph thu c vào t ng thơng đi p c
th .
lParam : Tham s 32-bit ph thu c vào thơng đi p.
time : Th i gian đ t thơng đi p trong hàng đ i.
pt : T a ñ c a chu t khi ñ t thơng đi p vào hàng đ i
Hàm GetMessage s tr v 0 n u msg ch a thơng đi p có đ nh danh WM_QUIT
(0x0012), khi đó vịng l p thơng đi p ngưng và ng d ng k t thúc. Ngư c l i thì hàm s tr v
m t giá tr khác 0 v i các thông ñi p khác.

1.4.6. Xây d ng m t ng d ng ñ u tiên


ch
2

4.

vn

M t ng d ng thư ng có giao di n n n t ng là m t khung c a s , ñ t o ñư c c a s này
chúng ta th c hi n b ng cách khai báo m t l p c a s và ñăng ký l p c a s đó. ð c a s tương
tác đư c thì chúng ta ph i vi t hàm x lý c a s WndProc khi đó t t c các thơng đi p liên quan
ñ n c a s s ñư c truy n vào cho hàm này. ðo n chương trình sau là khung sư n cho các
chương trình vi t trên Windows, bao g m 2 hàm chính là :






Te

WinMain : hàm chính c a chương trình th c hi n các ch c năng :
Khai báo l p c a s .
ðăng ký l p c a s v a khai báo.
T o và hi n th l p c a s trên.
Vịng l p nh n thơng đi p.

WndProc : Hàm x lý thơng đi p g i ñ n c a s .
/* HELLOWORLD.C */


#include <windows.h>
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 =

4.


wndclass.lpszMenuName = NULL;

vn

( HBRUSH ) GetStockObject ( WHITE_BRUSH );

ch
2

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) ;

vn

}

ch
2

} // End WinMain

4.


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);
}

4.

vn

B ng dư i ñây li t kê ý nghĩa c a các hàm ñư c s d ng trong 2 hàm WinMain và
WndProc c a chương trình HELLOWORLD.C.
Ý nghĩa

ch
2

Tên hàm

N p m t bi u tư ng đ s d ng trong chương

LoadIcon
LoadCursor

Te


trình.

Nap m t con tr chu t cho chương trình.

GetStockObject

Nh n m t ñ i tư ng ñ h a, trong trư ng h p c a
chương trình thì 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 trong

MessageBox

Hi n th m t thơng đi p.

CreateWindow

T o m t c a s d a trên m t l p c a s .

ShowWindow

Hi n th c a s lên màn hình.

UpdateWindow


Yêu c u c a s v l i chính b n thân nó.

GetMesssage

Nh n m t thơng ñi 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 đi 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 năng 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 đi p thốt vào hàng đ i thơng đi p.

DefWindowProc

Th c hi n vi c x lý m c ñ nh các thông ñi p.

B ng 1.3 Mô t các hàm đư c s d ng trong chương trình minh h a

1.4.7. M t s qui ư c ñ t tên bi n

Te

ch
2

4.

vn

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 các 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 khi làm khó
ngay c ngư i vi t ra các mã ngu n đó. Vì v y các l p trình viên thư ng qui ư c sao cho m t tên
bi n v a g i ñư c ch c năng c a nó v a xác đ nh đư c ki u lo i. Có r t nhi u phong cách đ đ t
tên, trong s đó thì có phong cách đ t tên theo cú pháp Hungary (Hungarian Notation) là ñư c
dùng nhi u nh t. Qui ư c r t ñơn gi n là b t đ u tên bi n thì vi t ch thư ng và các ch ñ u th
hi n ki u d li u c a bi n, và ñư c g i là các ti n t . Ví d như bi n szCmdLine là m t bi n lưu
chu i nh p t dòng l nh, sz là th hi n cho bi n ki u chu i k t thúc ký t 0, ngoài ra ta hay th y
hInstance và hPrevInstance, trong đó 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 là ch i.
Cú pháp Hungary này giúp cho ngư i l p trình r t nhi u trong khâu ki m tra l i c a
chương trình, vì khi 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 trong tên c a hai bi n.
B ng mô t m t s ti n t khi ñ t tên bi n c a các 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 0

h

handle

p

pointer

Lpsz

con tr dài chu i ký t k t thúc kí t 0

ch
2

4.

vn

B ng 1.4 Mơ t ki u đ t tên bi n

Te


NGƠN NG

Trang 24



×