Giáo trình Lập trình Windows (Phần 1)

Do While 0 <>GetMessage (message, 0, 0,0)

TranslateMessage message

DispatchMessage message

Loop

Trong đó message là chỉ lệnh mà hệ điều hành cung cấp, thông qua cán (handle)

của cửa sổ. Đƣơng nhiên, nếu chỉ lệnh có giá trị WM_QUIT thì hàm WinProc trong

cửa sổ chấm dứt vòng lặp. Còn nếu chỉ lệnh message khác giá trị trên, thì 2 dòng

lệnh trên sẽ thực hiện.

Cụ thể:

TranslateMessage message -> Dịch chỉ lệnh thành dạng dữ liệu khác đặt kết quả này

vào hàng đợi của ứng dụng.

DispatchMessage message ->Nhận chỉ lệnh từ hàm GetMessage và gửi cho hệ

thống. Hệ thống sẽ đƣa chỉ lệnh cho ứng dụng.

Windows có hàng ngàn chỉ lệnh khác nhau đó là các hằng dạng WM_*.

Một hàm WinProc luôn nhận vào trong nó các biến theo khuôn mẫu sau để xử lý:

Function WinProc(hwnd as Long, wc as WNDCLASSEX, message as MSG, wParam

as Long, lparam as Long)

Nếu hàm WinProc không xử lý các chỉ lệnh, nó phải đƣa trả chỉ lệnh cho hệ điều

hành xử lý thông qua hàm DefWindowProc. Hàm DefWindowProc gởi lại chỉ lệnh

WM_CLOSE cho WinProc. Hàm WinProc sẽ lại gởi trả WM_CLOSE cho

DefWindowProc một lần nữa nhƣ mô tả ở trên.

Giáo trình Lập trình Windows (Phần 1) trang 1

Trang 1

Giáo trình Lập trình Windows (Phần 1) trang 2

Trang 2

Giáo trình Lập trình Windows (Phần 1) trang 3

Trang 3

Giáo trình Lập trình Windows (Phần 1) trang 4

Trang 4

Giáo trình Lập trình Windows (Phần 1) trang 5

Trang 5

Giáo trình Lập trình Windows (Phần 1) trang 6

Trang 6

Giáo trình Lập trình Windows (Phần 1) trang 7

Trang 7

Giáo trình Lập trình Windows (Phần 1) trang 8

Trang 8

Giáo trình Lập trình Windows (Phần 1) trang 9

Trang 9

Giáo trình Lập trình Windows (Phần 1) trang 10

Trang 10

Tải về để xem bản đầy đủ

pdf 110 trang duykhanh 10180
Bạn đang xem 10 trang mẫu của tài liệu "Giáo trình Lập trình Windows (Phần 1)", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Giáo trình Lập trình Windows (Phần 1)

Giáo trình Lập trình Windows (Phần 1)
1 – Fixed Single: có khung 
Stretch Quy định hình ảnh có tự co/giãn cho vừa với khung ảnh hay không. Nếu 
 nhận giá trị True: hình ảnh tự co giãn sao cho vừa vặn trong đối tƣợng, 
 nếu nhận giá trị False: hình ảnh không co giãn 
3.8.2. Điều khiển hộp hình 
 Điều khiển hộp hình PictureBox có biểu tƣợng trong hộp công cụ là . Điều 
khiển hộp hình đƣợc sử dụng để hiển thị đồ hoạ, làm đối tƣợng chứa các đối tƣợng 
khác, và hiển thị đầu ra của các phƣơng thức đồ hoạ cũng nhƣ văn bản của phƣơng 
thức Print. 
 Điều khiển hộp hình cũng tƣơng tự nhƣ điều khiển ảnh Image, chúng đều đƣợc sử 
dụng để hiển thị hình ảnh và cùng hỗ trợ các định dạng ảnh nhƣ nhau. Tuy nhiên, 
90 
điều khiển hộp hình có nhiều chức năng mà điều khiển ảnh không có ví dụ nhƣ chức 
năng làm đối tƣợng chứa cho các đối tƣợng khác và hỗ trợ các phƣơng thức đồ hoạ. 
 Điều khiển hộp hình có thể hiển thị các file ảnh có định dạng nhƣ BMP, WMF, 
GIF, JPEG, ICO. 
 Khi điều khiển hộp hình đã đƣợc đặt lên Form ta có thể nạp hình ảnh vào nó lúc 
thiết kế bằng cách chọn thuộc tính Picture từ cửa sổ Properties của điều khiển hoặc 
khi thi hành ứng dụng bằng cách sử dụng thuộc tính Picture và hàm LoadPicture. 
Ví dụ: 
 Picture1.Picture = LoadPicture("c:\windows\setup.bmp") 
 Để xoá hình ảnh khỏi điều khiển ta có thể sử dụng một trong hai lệnh sau: 
 Picture1.Picture = LoadPicture 
Hoặc 
 Set Picture1.Picture = Nothing 
 Ngầm định hình ảnh đƣợc nạp vào hộp hình với kích thƣớc nguyên bản của 
chúng, điều đó có nghĩa là nếu hình ảnh có kích thƣớc lớn hơn kích thƣớc của điều 
khiển thì hình ảnh sẽ bị cắt bớt đi ta chỉ nhìn thấy đƣợc một phần của nó và điều 
khiển không tạo ra các thanh cuộn. Để điều khiển tự động thay đổi kích thƣớc sao 
cho vừa với kích thƣớc của bức ảnh ta thiết lập giá trị True cho thuộc tính AutoSize. 
 Giống nhƣ Form, điều khiển hộp hình có thể đƣợc sử dụng để nhận đầu ra của các 
phƣơng thức đồ hoạ nhƣ Circle, Line, và Point v.vVí dụ ta có thể dùng phƣơng 
thức Circle để vẽ một vòng tròn trong hộp hình nhƣ sau: 
 Private Sub Form_Click() 
 Picture1.AutoRedraw = True 
 Picture1.Circle (1200, 1000), 750 
 End Sub 
Chạy chƣơng trình và nhấp chuột vào Form, chúng ta sẽ thấy nhƣ hình dƣới đây: 
91 
 Để đầu ra của các phƣơng thức đƣợc vẽ vào điều khiển và tự động vẽ lại khi điều 
khiển thay đổi kích thƣớc hoặc hiển thị lại khi bị một đối tƣợng khác che khuất ta 
thiết lập giá trị True cho thuộc tính AutoRedraw. 
 Ta cũng có thể đƣa văn bản ra điều khiển hộp hình bằng cách sử dụng phƣơng 
thức Print và thiết lập giá trị True cho thuộc tính AutoRedraw. 
Ví dụ: 
 Picture1.Print "Trƣờng Đại học SPKT Nam Định" 
 Khi sử dụng phƣơng thức Print ta cũng có thể thay đổi kiểu font, cỡ chữ hoặc sử 
dụng các thuộc tính CurrentX, CurrentY, Height, và Width để căn lề cho văn bản 
trong hộp hình. 
3.9. Các điều khiển DriveListBox, DirListBox và FileListBox 
 DriveListBox là một điều khiển có dạng giống một ComboBox và nội dung của 
DriveListBox là các kí tự ổ đĩa và nhãn của nó. DirListBox là một danh sách đặc 
biệt hiển thị cây thƣ mục. Điều khiển FileListBox là một điều khiển hộp danh sách 
với mục đích là hiển thị tất cả các tệp tin trong thƣ mục đã cho, chọn lọc chúng theo 
tên, phần mở rộng và thuộc tính. 
 Các điều khiển này thƣờng đƣợc thiết kế trên cùng một Form, khi ngƣời sử dụng 
chọn một ổ đĩa trong DriveListBox thì điều khiển DirListBox đƣợc cập nhật để hiển 
thị cây thƣ mục của ổ đĩa đó, khi ngƣời sử dụng chọn một thƣ mục (đƣờng dẫn) 
trong điều khiển DirListBox điều khiển FileListBox sẽ hiển thị các tệp tin của thƣ 
mục đó. Tuy nhiên, các thao tác này không thực hiện một cách tự động mà ta phải 
viết mã để thực hiện chúng. Ta có thể sử dụng một số thuộc tính sau của các điều 
khiển: 
Drive: Là thuộc tính của điều khiển DriveListBox, nó trả về tên ổ đĩa đƣợc chọn 
trong điều khiển DriveListBox lúc chƣơng trình đang chạy. 
Path: Là thuộc tính của điều khiển DirListBox, nó dùng để thiết lập hoặc trả về 
đƣờng dẫn đến thƣ mục đƣợc chọn trong DirListBox. Path cũng là một thuộc tính 
của FileListBox, nó dùng để thiết lập hoặc trả về đƣờng dẫn đến thƣ mục chứa tệp 
tin đƣợc chọn trong FileListBox. 
Pattern: Là thuộc tính của FileListBox dùng để lọc loại tệp tin sẽ đƣợc hiển thị 
trong FileListBox. 
Filename: Là thuộc tính của FileListBox, nó trả về tên tệp tin đƣợc chọn trong 
FileListBox. 
Ví dụ: Dùng các điều khiển DriveListBox, DirListBox, FileListBox và điều khiển 
Image để lập chƣơng trình hiển thị file ảnh định dạng *.jpg và *.gif, theo form mẫu 
sau: 
92 
Bƣớc 1. Thiết kế form: đƣa các điều khiển lên form, xác lập vị trí, kích thƣớc cho 
các điều khiển cho phù hợp. 
Bƣớc 2. Thiết lập giá trị một số thuộc tính cho các điều khiển theo bảng: 
 Thuộc 
TT Điều khiển Giá trị Ghi chú 
 tính 
 Name Form1 
 1 Form 
 Caption Xem ảnh 
 2 DriveListBox Name O_dia 
 3 DirListBox Name Thu_muc 
 4 FileListBox Name Tep 
 5 Image Name Hinh 
Bƣớc 3. Mở cửa sổ Code của Form1 và gõ vào các dòng lệnh: 
 Private Sub O_dia_Change() 
 Thu_muc.Path = Left(O_dia.Drive, 1) & ":\" 
 End Sub 
 „--------------------------------------------------------------------------- 
 Private Sub Thu_muc_Change() 
 Tep.Path = Thu_muc.Path 
 Tep.Pattern = "*.jpg;*.gif" 
 End Sub 
 „--------------------------------------------------------------------------- 
 Private Sub Tep_Click() 
 FileName = Tep.Path 
 If Right$(FileName, 1) "\" Then FileName = FileName & "\" 
 FileName = FileName & Tep.FileName 
 Hinh.Picture = LoadPicture(FileName) 
93 
 End Sub 
Bƣớc 4. Chạy chƣơng trình (F5). 
3.10. Điều khiển Timer 
 Điều khiển Timer có biểu tƣợng trong hộp công cụ là . Điều khiển Timer cho 
phép ta theo dõi thời gian. Điều khiển Timer nhƣ một chiếc đồng hồ kích hoạt một 
sự kiện của chƣơng trình sau các khoảng thời gian đều đặn mà ta chỉ ra. Sự kiện khi 
Timer kích hoạt đƣợc gọi là sự kiện Timer, ta có thể viết mã trong sự kiện này để 
thực hiện một công việc nào đó. 
 Điều khiển Timer có hai thuộc tính quan trọng đó là Interval và Enabled. Thuộc 
tính Interval là khoảng thời gian đƣợc tính bằng mili giây giữa hai sự kiện Timer. 
Giá trị của Interval có thể từ 0 đến 64.767 nghĩa là khoảng thời gian dài nhất giữa 
hai sự kiện Timer không lâu hơn 64.8 giây. Khi mới đƣợc đặt lên form thì thuộc tính 
Interval có giá trị bằng 0, ta có thể gán cho nó một giá trị phù hợp tại cửa sổ 
Properties hoặc trong thủ tục Form_Load của chƣơng trình nhƣ sau: 
Private Sub Form_Load() 
 Timer1.Interval = 1000 'Một giây sự kiện Timer đƣợc thực hiện một lần. 
End Sub 
 Thuộc tính Enabled cho phép ta khởi động hoặc dừng sự hoạt động của Timer. 
Ví dụ: 
 Sử dụng các điều khiển: Timer, Line, Shape viết chƣơng trình mô tả đèn giao 
thông tại ngã tƣ, nhƣ hình sau: 
94 
Bƣớc 1. Thiết kế form: Đƣa các điều khiển Line, Shape lên form để vẽ ngã tƣ, hộp 
đèn và 2 bộ 3 đèn ở hai góc ngã tƣ là đèn xanh, vàng, đỏ. 
Bƣớc 2. Gán thuộc name của các điều khiển Shape dùng để vẽ 2 bộ 3 đèn là: Xanh1, 
Vang1, Do1 và Xanh2, Vang2, Do2; thuộc tính FillStyle của các điều khiển này là 
0-Solid 
Bƣớc 3. Mở cửa sổ lệnh (Code) và gõ vào các dòng lệnh sau: 
Dim t As Byte, d As Boolean 
Private Sub Form_Load() 
 t = 0 
 d = True 
 Timer1.Interval = 10000 
End Sub 
„--------------------------------------------------------------------------- 
Private Sub Timer1_Timer() 
 If t = 0 Then 
 xanh1.FillStyle = 0 
 do2.FillStyle = 0 
 xanh2.FillStyle = 1 
 do1.FillStyle = 1 
 vang1.FillStyle = 1 
 vang2.FillStyle = 1 
 t = 2 
 Timer1.Interval = 10000 
 Else 
 If t = 2 Then 
 xanh1.FillStyle = 1 
 do2.FillStyle = 0 
 xanh2.FillStyle = 1 
 do1.FillStyle = 1 
 vang1.FillStyle = 0 
 vang2.FillStyle = 1 
 t = 4 
 Timer1.Interval = 1000 
 Else 
 If t = 4 Then 
 xanh1.FillStyle = 1 
 do2.FillStyle = 1 
95 
 xanh2.FillStyle = 0 
 do1.FillStyle = 0 
 vang1.FillStyle = 1 
 vang2.FillStyle = 1 
 t = 6 
 Timer1.Interval = 10000 
 Else 
 xanh1.FillStyle = 1 
 do2.FillStyle = 1 
 xanh2.FillStyle = 1 
 do1.FillStyle = 0 
 vang1.FillStyle = 1 
 vang2.FillStyle = 0 
 t = 0 
 Timer1.Interval = 1000 
 End If 
 End If 
 End If 
End Sub 
3.11. Xử lý chuột 
 Một số sự kiện xảy ra do những tác động của ngƣời sử dụng đối với chuột. Những 
sự kiện đó là: 
 Sự kiện Giải thích 
 MouseDown Xảy ra khi ngƣời sử dụng nhấn một nút chuột bất kỳ. 
 MouseUp Xảy ra khi ngƣời sử dụng thả một nút chuột bất kỳ. 
 MouseMove Xảy ra khi con trỏ chuột di chuyển đến một điểm mới trên mà 
 hình 
 Các Tham số truyền vào các sự kiện gồm: 
 Tham số Giải thích 
 Button Cho biết nút chuột nào đƣợc nhấn 
 Shift Cho biết phím SHIFT, CTRL hay ALT đƣợc nhấn 
 X,Y Vị trí con trỏ chuột, với hệ toạ độ của đối tƣợng bắt sự kiện. 
 Ta có thể dùng thuộc tính MousePointer và MouseIcon để hiện thị một biểu tƣợng 
con trỏ màn hình hay con trỏ chuột. Thuộc tính MousePointer cho phép chọn một 
96 
trong mƣời sáu kiểu con trỏ. Giá trị mặc định của thuộc tính MousePointer là 0-
Default và hiển thị theo kiểu Windows quy định. 
 Hằng Giá Diễn giải 
 trị 
 ccDefault 0 (Default) Shape determined by the object. 
 ccArrow 1 Arrow. 
 ccCross 2 Cross (cross-hair pointer). 
 ccIbeam 3 I Beam. 
 ccIcon 4 Icon (small square within a square). 
 ccSize 5 Size (four-pointed arrow pointing north, south, 
 east, and west). 
 ccSizeNESW 6 Size NE SW (double arrow pointing northeast 
 and southwest). 
 ccSizeNS 7 Size N S (double arrow pointing north and south). 
 ccSizeNWSE 8 Size NW, SE. 
 ccSizeEW 9 Size E W (double arrow pointing east and west). 
 ccUpArrow 10 Up Arrow. 
 ccHourglass 11 Hourglass (wait). 
 ccNoDrop 12 No Drop. 
 ccArrowHourglass 13 Arrow and hourglass. 
 ccArrowQuestion 14 Arrow and question mark. 
 ccSizeAll 15 Size all. 
3.12. Xử lý bàn phím 
 Sự kiện chuột và bàn phím có vai trò chủ yếu trong hoạt động tƣơng tác giữa 
ngƣời sử dụng và chƣơng trình. Ta có thể kiểm soát phím nhấn theo 2 mức: điều 
khiển hoặc biểu mẫu. Mức điều khiển cho phép lập trình với điều khiển, mức biểu 
mẫu cho phép ta lập trình với ứng dụng. 
 Sự kiện bàn phím Xảy ra 
 KeyPress Khi một phím có mã ASCII đƣợc nhấn 
 KeyDown Khi một phím bất kỳ đƣợc nhấn 
 KeyUp Khi một phím bất kỳ đƣợc thả. 
 Chỉ có điều khiển đang focus mới bắt sự kiện bàn phím. Đối với biểu mẫu, nó chỉ 
bắt đƣợc khi nó đƣợc kích hoạt và mọi điều khiển trên biểu mẫu đều không có focus. 
97 
Điều này chỉ xảy ra với biểu mẫu trống hoặc biểu mẫu có điều khiển bị cấm. Tuy 
nhiên, nếu quy định thuộc tính KeyPreview của biểu mẫu thành True, biểu mẫu sẽ 
nhận mọi sự kiện bàn phím của mọi điều khiển trên nó trƣớc khi các điều khiển này 
nhận đƣợc. Cách này hữu dụng khi ta muốn thi hành cùng một hoạt động khi một 
phím bất kỳ đƣợc nhấn, bất kể điều khiển nào đang forcus. 
 KeyDown và KeyUp có thể phát hiện những tình huống mà KeyPress không thể 
phát hiện: 
- Tổ hợp phím SHIFT, CTRL và ALT 
- Phím định hƣớng (← → ↑ ↓) lƣu ý rằng một số điều khiển (nút lệnh, nút tuỳ chọn, 
và hộp đánh dấu) không bắt sự kiện phím định hƣớng. Thay vào đó, các phím này 
gây ra sự dịch chuyển của một điều khiển khác. 
- PageUp và PageDown 
- Phân biệt đƣợc phím số ở bàn phím phải với phím số ở bàn phím trái 
- Đáp ứng khi thả phím 
- Phím chức năng không trùng với menu. 
 Sự kiện bàn phím không loại trừ nhau. Khi ngƣời sử dụng nhấn một phím, cả 
KeyDown và KeyPress cùng phát. Khi ngƣời sử dụng nhấn một trong những phím 
mà KeyPress không phát hiện đƣợc, chỉ có KeyDown và xảy ra, đó là KeyUp. 
 Trƣớc khi dùng KeyUp, KeyDown phải đảm bảo rằng KeyPress không làm đƣợc. 
Sự kiện này phát hiện các phím có mã ASCII chuẩn: Chữ cái, chữ số, dấu ngắt câu, 
Enter, Tab và Backspace. Nói chung, viết chƣơng trình cho sự kiện KeyPress thì dễ 
hơn. 
3.13. Câu hỏi trắc nghiệm 
1) Chọn đúng nút lệnh đƣợc ngƣời sử dụng nhấn biết hàm Msgbox trả về giá trị 6 
 a. Ok b. Cancel 
 c. Retry d. Yes 
2) Chọn đúng điều khiển để hiển thị một danh sách thƣ mục lƣu trên máy 
 a. DirListBox 
 b. DriveListBox 
 c. FileListBox 
 d. ComboBox 
3) Chọn đúng thuộc tính để lấy tên tập tin đƣợc chọn trong điều khiển FileListBox 
khi chạy chƣơng trình 
 a. Path 
 b. FileName 
 c. Drive 
98 
 d. Pattern 
4) Chọn đúng sự kiện xảy ra khi ngƣời sử dụng sửa đổi chuỗi ký tự trong 
ComboBox hoặc trong TextBox 
 a. Click 
 b. Change 
 c. Keypress 
 d. Cả 3 sự kiện trên 
5) Chọn đúng thuộc tính để thiết lập tiêu đề cho form 
 a. Appearence 
 b. Caption 
 c. BorderStyle 
 d. Backcolor 
6) Chọn đúng thuộc tính để qui định TextBox có nhìn thấy hay không khi chạy 
chƣơng trình 
 a. Visible 
 b. Text 
 c. Multiline 
 d. Enable 
7) Chọn đúng thuộc tính để lấy số phần tử trong Listbox 
 a. ListCount 
 b. ListIndex 
 c. Text 
 d. List 
8) Chọn đúng thuộc tính để lấy nội dung văn bản trong TextBox 
 a. Alignment 
 b. Seltext 
 c. Multiline 
 d. Text 
9) Chọn đúng sự kiện xảy ra khi ngƣời sử dụng nhấn phím bất kỳ trên bàn phím khi 
chƣơng trình đang thực hiện 
 a. Change 
 b. Click 
 c. KeyDown 
 d. Keypress 
10) Chọn đúng thuộc tính để qui định văn bản trong TextBox có thể hiển thị trên 
nhiều dòng 
 a. Alignment 
99 
 b. Name 
 c. Multiline 
 d. Forecolor 
11) Thuộc tính nào dùng để qui định vị trí cho các điều khiển 
 a. Top, Width 
 b. Height, Left 
 c. Width, Height 
 d. Top, Left 
12) Chọn đúng sự kiện xảy ra khi ngƣời sử dụng kích đúp chuột khi đối tƣợng đang 
trong tầm ngắm 
 a. Change 
 b. Click 
 c. DblClick 
 d. Keypress 
13) Chọn đúng phƣơng thức để xoá tất cả các phần tử khỏi ListBox lúc chạy chƣơng 
trình 
 a. Add 
 b. Remove 
 c. Clear 
 d. RemoveItem 
14) Chọn đúng thuộc tính để lấy giá trị tƣơng ứng với vị trí của thanh cuốn ngang - 
HScrollBar 
 a. SmallChange 
 b. LargeChange 
 c. Max 
 d. Value 
15) Chọn đúng thuộc tính qui định hình ảnh trong điều khiển Image tự co giãn để 
vừa với kích thƣớc của điều 
 a. Stretch 
 b. AutoSize 
 c. Picture 
 d. BorderStyle 
3.14. Bài tập 
Bài tập 1: Lập chƣơng trình tạo form và viết mã cho các nút lệnh dùng để sao chép, 
cắt, dán các đoạn văn bản đƣợc chọn giữa hai khối văn bản đƣợc gõ vào 2 Textbox 
nhƣ sau: 
100 
Bài tập 2: Lập chƣơng trình sử dụng các điều khiển thông dụng để vẽ hình theo các 
tuỳ chọn và tô màu cho hình theo mẫu. 
Bài tập 3: Lập chƣơng trình sử dụng các điều khiển thông dụng cho phép thực hiện 
2 phép toán tìm ƣớc số chung lớn nhất và bội số chung nhỏ nhất của hai số nguyên 
dƣơng theo form mẫu: 
Bài tập 4: Lập trình chọn file ảnh từ hộp thoại Open, hiển thị ảnh dùng điều khiển 
Picture. Thiết lập thuộc tính để hình ảnh tự co giãn cho vừa với kích thƣớc của điều 
khiển Picture. 
101 
Bài tập 5: Lập chƣơng trình sử dụng các điều khiển : Listbox, Commandbutton, 
Label thiết kế fỏm và viết mã cho các nút lệnh để bổ sung và loại bỏ các phần tử 
giữa hai danh sách theo mẫu : 
 Bài tập 6: Lập trình vẽ hình, phối màu và tô màu cho hình theo mẫu : 
102 

File đính kèm:

  • pdfgiao_trinh_lap_trinh_windows_phan_1.pdf