Thông tin tài liệu:
Trong các bài trước, thông qua các đối tượng GDI, chúng ta đã làm quen cách chương trình Windows tạo những kết xuất đồ họa không sử dụng đến những dữ liệu do người sử dụng đưa vào. Những tiện ích có sẵn đối với những kết xuất đồ họa như thế được xem như là ở cấp cao (high-level): nhiều hình ảnh đồ họa tinh vi cầu kỳ có thể được tạo ra một cách dễ dàng.
Nội dung trích xuất từ tài liệu:
Nhập liệu từ bàn phímIczelion’s Tutorial Win32 ASM Tutorial 6 : Keyboard Input Nhập liệu từ bàn phím Trong các bài trước, thông qua các đối tượng GDI, chúng ta đã làm quen cáchchương trình Windows tạo những kết xuất đồ họa không sử dụng đến những dữ liệu dongười sử dụng đưa vào. Những tiện ích có sẵn đối với những kết xuất đồ họa như thếđược xem như là ở cấp cao (high-level): nhiều hình ảnh đồ họa tinh vi cầu kỳ có thể đượctạo ra một cách dễ dàng. Nếu không có GDI, thử hỏi bạn sẽ bỏ bao nhiêu công sức để điđến kết quả như trên. Trong bài này, tôi và bạn sẽ cùng tìm hiểu về vấn đề nhập liệu từ những thiết bịWindows cụ thể là bàn phím (keyboard), xem các chương trình Windows giải quyết thếnào vấn đề nhập liệu. Ngược lại đối với kết xuất cấp cao của GDI, dạng nhập liệu thôngqua keyboard, mouse được xem như là ở cấp thấp (low-level), nghĩa là nhập liệu từ bànphím (người sử dụng ấn một phím trên bàn phím) sẽ đến dưới dạng những loạt thông điệpriêng rẽ của từng phím gõ (keystroke) với 2 hoặc 3 thông điệp được phát sinh từ mộtphím được ấn xuống.Nền tảng cơ sở về bàn phím HĐH tiếp nhận và xử lý thông tin nhận được từ bàn phím, qua hình thức các thôngđiệp và gởi cho ứng dụng. Trong ứng dụng Windows các thông điệp sẽ được hệ điều hànhchuyển cho hàm xử lý cửa sổ WndProc của ứng dụng.Windows cung cấp 8 loại thông điệp khác nhau để phân biệt các tình huống của các phímđược gõ. Tuy nhiên không phải lúc nào chúng ta cũng phải xử lý toàn bộ các thông điệp đó,thông thường thì chỉ cần xử lý một nửa các thông điệp được phát sinh từ bàn phím, và cácthông điệp còn lại sẽ được Windows xử lý mặc định.Ví dụ, trong Windows có thể bỏ qua khi nhấn phím Ctrl, Alt, Shift cùng với các phím khác,nếu không muốn chặn để xử lý riêng cho ứng dụng. Trong trường hợp nếu chúng ta muốnchặn để xử lý riêng cho mình, chẳng hạn tạo phím nóng (hotkey) phải chú ý tránh dùng trùnghợp với các phím nóng mà Windows cung cấp. Vì khi đó theo quyền ưu tiên, ứng dụng củachúng ta sẽ xử lý thông điệp đó và sẽ làm cho hệ thống không hoạt động như bình thường.Thành phần giao tiếp chung như hộp thoại (dialog) cũng có nhiều giao tiếp với bàn phím,nhưng chúng ta không cần quan tâm đến việc giao tiếp với bàn phím khi hộp thoại được kíchhoạt. Xử lý bàn phím trong hộp thoại thường được giao cho Windows xử lý. Các điều khiểnđược dùng trong hộp thoại như hộp nhập liệu (edit box), hộp lựa chọn (check box), hay cácnút nhấn (button)...điều có khả năng tự xử lý phím gõ vào và chỉ trả lại thông báo của cácphím gõ cho cửa sổ cha (parent window). Tuy vậy, với một số các điều khiển nhất định theoứng dụng ta có thể phải xử lý các thông điệp để tăng cường thêm sức mạnh của thành phầnđiều khiển này.Tóm lại trong các ứng dụng được cấu thành từ các thành phần điều khiển cơ bản này thìchúng ta không quan tâm đến việc xử lý các thông điệp từ bàn phím.Người dịch: Benina (REA TEAM) Trang 1Tổng hợp và hiệu chỉnh: NhatPhuongLe (VNCERT TEAM)Iczelion’s Tutorial Win32 ASM Tutorial 6 : Keyboard InputInput Focus Windows đưa ra khái niệm focus (sự quan tâm) cho các ứng dụng được chạy đồngthời tại một thời điểm. Vì chỉ có một bàn phím, nên Windows phải quản lý và phân phối cácthông điệp được gõ vào cho các ứng dụng. Thông thường, có các trường hợp trên Windowslà : một trong số các ứng dụng đang chạy được active (kích hoạt) hay không có ứng dụng nàochạy. Khi có một chương trình ứng dụng được kích hoạt thì Windows xem như ứng dụng đónhận được sự quan tâm.Trong một ứng dụng có nhiều các cửa sổ, mỗi thời điểm chỉ một cửasổ nhận được sự quan tâm. Theo cơ chế này, Windows cung cấp một dạng gọi là hàng đợithông điệp. Mỗi thông điệp sẽ được đưa vào hàng đợi xử lý thông điệp và được Windowsphân phối đến các ứng dụng tương ứng.Hàm DispatchMessage trong vòng lặp xử lý thông điệp sẽ chịu trách nhiệm chuyển thôngđiệp đến thủ tục xử lý cửa sổ WndProc của các cửa sổ tương ứng.Một cửa sổ có thể xác định được trạng thái quan tâm của mình bằng cách chặn các thông điệpWM_SETFOCUS, WM_KILLFOCUS trong hàm xử lý WndProc. Thông điệpWM_SETFOCUS sẽ cho cửa sổ biết được thời điểm nhận được quan tâm của Windows vàngược lại WM_KILLFOCUS sẽ thông báo cho cửa sổ biết được đã mất sự quan tâm từWindows. Phần sau sẽ giới thiệu kỹ hơn về xử lý thông điệp.Cơ chế hàng đợi và quản lý hàng đợi Trong Windows khi người dùng nhấn và nhả phím trên bàn phím, thì thông qua trìnhđiều khiển thiết bị bàn phím (keyboard driver) sẽ diễn dịch mã quét (scan code) của phầncứng sang hình thức thông điệp. Trước hết Windows sẽ tạm thời lưu trữ thông điệp này vàohàng đợi thông điệp của hệ thống (system message queue). Hàng đợi thông điệp hệ thống củaWindows là một hàng đợi duy nhất và quản lý các thao tác tiền xử lý thông tin nhập từ bànphím và chuột. Windows ...