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.
Trang 1
Trang 2
Trang 3
Trang 4
Trang 5
Trang 6
Trang 7
Trang 8
Trang 9
Trang 10
Tải về để xem bản đầy đủ
Tóm tắt nội dung tài liệu: 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:
- giao_trinh_lap_trinh_windows_phan_1.pdf