Nghiên cứu các phương pháp nhận dạng từ dưới cursor mouse trên Desktop Windows

98 272 0
Nghiên cứu các phương pháp nhận dạng từ dưới cursor mouse trên Desktop Windows

Đ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

http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Báo Cáo Luận Văn Tốt Nghiệp Trang MỤC LỤC KIL OBO OK S CO M LỜI MỞ ĐẦU CHƯƠNG 1: TÌM HIỂU VỀ LẬP TRÌNH WINDOWS I Khái quát lập trình Windows II Thông điệp xử lý thông điệp III Giao diện thiết bò đồ họa GDI IV Cửa sổ Windows V Chương trình Windows tiếp nhận thông điệp chuột CHƯƠNG 2: TÌM HIỂU VỀ HOOK - Chuỗi hook - Thủ tục hook - Các loại hook - Sử dụng hook - Hook Windows 3.x - Giới thiệu số hàm liên quan đến hook CHƯƠNG 3: KỸ THUẬT OVERRIDE HÀM API I Khái quát kỹ thuật override II Lý sử dụng kỹ thuật override lập trình Windows III Cơ chế hoạt động quản lý nhớ Windows 16bits IV Cơ chế hoạt động quản lý nhớ Windows 32bits V Hiện thực kỹ thuật override Windows 16bits VI Một số hàm sử dụng kỹ thuật override CHƯƠNG 4: KẾT XUẤT VĂN BẢN TRONG WINDOWS I Kết xuất văn Windows II Các hàm để kết xuất văn CHƯƠNG 5: PHÂN TÍCH VÀ THIẾT KẾ CHƯƠNG TRÌNH I Phân tích vấn đề II Thiết kế chương trình III Giới thiệu số hàm có liên quan IV Giới thiệu số cấu trúc liệu có liên quan KẾT QUẢ VÀ HƯỚNG PHÁT TRIỂN SVTH : Lương Cao Hoài Tâm 11 15 22 26 27 27 28 30 31 33 36 37 37 38 41 45 50 54 55 55 66 67 68 78 92 97 Lớp TH40 http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Trang KIL OBO OKS CO M Báo Cáo Luận Văn Tốt Nghiệp Đề tài : Nghiên cứu phương pháp nhận dạng từ cursor mouse Desktop Windows Viết chương trình nhận dạng từ SVTH : Lương Cao Hoài Tâm Lớp TH40 http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Báo Cáo Luận Văn Tốt Nghiệp Trang Lời Mở Đầu KIL OBO OKS CO M gày nay, công việc hàng ngày liên quan đến sống diễn máy tính Từ việc soạn thảo văn bản, gởi nhận thông tin đến việc tra cứu, truy cập thông tin từ hệ thống mạng máy tính toàn cầu Internet người sử dụng công việc thường ngày phổ biến Từ đó, phát sinh vấn đề người sử dụng cần tìm hiểu ý nghóa từ, câu cần phải dòch đoạn văn bản, file liệu tiếng Việt ngược lại Đây nhu cầu cần thiết xảy thường xuyên nhiều người, nhận dạng từ đặc biệt nhận dạng từ hình môi trường Windows việc làm cần thiết có ý nghóa thực tế Kết việc nhận dạng từ dùng để xây dựng nên ứng dụng khác chẳng hạn từ điển tra cứu theo kiểu tương tác trực tiếp thuận tiện cho người sử dụng theo cách cho dù ứng dụng cần tra cứu thao tác trực tiếp ứng dụng dùng tức cần click chuột vào không cần phải mở từ điển tra cứu từ theo kiểu cổ điển Vì thế, thời gian làm Luận Án Tốt nghiệp hướng dẫn thầy Lê Tấn Hùng nhóm sinh viên thực đề tài: “ Nhận dạng từ cursor mouse deskop Windows Viết chương trình nhận dạng từ ” Trong giai đoạn đầu Luận Án Tốt Nghiệp nghiên cứu số vấn đề quan trọng có ý nghóa việc thực yêu cầu đặt đề tài Đề tài tập trung nhận dạng từ dạng text desktop môi trường Windows xuất kết Trong thời gian làm Luận Án Tốt Nghiệp nhóm sinh viên tiến hành nghiên cứu chế hoạt động quản lý hệ điều hành Windows Nghiên cứu phương thức lập trình môi trường Windows phương tiện mà Windows hỗ trợ lập trình Tham khảo nghiên cứu kỹ thuật override hàm giao tiếp Windows chế độ 16 bit 32 bit Nghiên cứu cách xử lý thông điệp Windows tìm hiểu cách kết xuất văn bản, chế độ ánh xạ, vấn đề tọa độ cách xử lý văn Trên sở bước đầu xây dựng xong ứng dụng có khả nhận dạng từ Windows 16 bit viết ngôn ngữ Visual C++ version 1.5 hướng phát triển thời gian tới thực Win32 Báo cáo điểm qua nội dung mà nghiên cứu tìm hiểu thời gian qua Sau phần giới thiệu chi tiết chương trình từ khâu phân tích-thiết kế phần chương trình nguồn SVTH : Lương Cao Hoài Tâm Lớp TH40 http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Báo Cáo Luận Văn Tốt Nghiệp Trang KIL OBO OKS CO M cuối nêu vấn đề tồn hướng phát triển tương lai SVTH : Lương Cao Hoài Tâm Lớp TH40 http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Trang KIL OBO OKS CO M Báo Cáo Luận Văn Tốt Nghiệp Chương 1: TÌM HIỂU VỀ LẬP TRÌNH WINDOWS SVTH : Lương Cao Hoài Tâm Lớp TH40 http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Báo Cáo Luận Văn Tốt Nghiệp Trang I - KHÁI QUÁT VỀ LẬP TRÌNH TRONG WINDOWS: KIL OBO OKS CO M - Khái quát lập trình Windows: Môi trường lập trình Windows dựa hàm API (Application Programmer Interface), có chức ngắt bảng vector ngắt DOS, thân thiện chỗ cách gọi hàm API giống hệt cách gọi hàm ngôn ngữ cấp cao, hàm có tên gọi hẳn hoi, tên gọi thường đặt phù hợp với công dụng hàm (mặc dù có dài dòng) từ tạo khả gợi nhớ cao Với Windows, người lập trình lập trình theo kiểu assembly mà lập trình theo kiểu ngôn ngữ cấp cao, hoạt động máy mức thấp từ hàm API trở xuống thuộc phạm vi Windows, Windows không khuyến khích việc ứng dụng can thiệp vào lónh vực Bù lại, hàm API, hỗ trợ hiệu cho người lập trình, giúp khai thác khả thiết bò triệt để, dễ dàng tiện lợi hết Có thể nói Windows mở cho người lập trình không gian rộng lớn để phát triển ứng dụng, hạn chế không gian phát triển hệ thống Điều dẫn đến hệ ứng dụng tạo dễ dàng, quan trọng hệ thống chạy ổn đònh hơn, không bò treo lỗi ứng dụng, xâm nhập, khó khăn người lập trình muốn trực tiếp điều khiển hoạt động máy phát triển lập trình hệ thống - Tìm hiểu hàm Windows API: Windows hệ điều hành đa nhiệm (multitasking) mà qua ứng dụng môi trường Windows giao tiếp với user thông qua hay nhiều giao diện Để truy cập giao diện ứng dụng xây dựng môi trường Windows sử dụng tập hàm gọi giao diện chương trình ứng dụng API (Application Program Interface) Chương trình người sử dụng gọi tới hàm API để truy cập tới tài nguyên Windows GDI phận API, giao diện thiết bò đồ họa GDI (Graphic Device Interface) có nhiệm vụ trì độc lập Windows thiết bò đồ họa hay gọi khả độc lập thiết bò (device independent) tức cho phép Windows làm việc với nhiều kiểu thiết bò đồ họa khác SVTH : Lương Cao Hoài Tâm Lớp TH40 http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Báo Cáo Luận Văn Tốt Nghiệp Trang - Thư viện liên kết động DLL (Dynamic Link Library): Thư viện liên kết động tập tin Windows lưu dạng nhò phân chứa hàm mà ứng dụng Windows sử dụng Nét đặc KIL OBO OKS CO M trưng DLL sử dụng nhiều ứng dụng thời điểm hay nói cách khác thư viện liên kết động lúc gọi nhiều chương trình DLL liệu chia sẻ (shared data) Có loại DLL khác nhau: - Thư viện liên kết động API: thuộc hệ thống Windows, cài hệ điều hành có sẵn Chúng nạp Windows khởi động - Thư viện liên kết động third party: công ty khác tạo môi trường Windows, hỗ trợ thêm công tác lập trình Windows - Thư viện liên kết động tạo Windows sử dụng cấu trúc thư viện liên kết động DLL (Dynamic Link Library) nhằm mục đích không chép khối lượng lớn mã vào chương trình thư viện thông thường Nhờ cấu trúc động DLL nên chương trình truy cập thư viện thời gian thực thi Các hàm API Windows giữ dạng hỗn hợp số DLL Trong trình dòch gặp lệnh gọi hàm API từ chương trình ứng dụng chương trình dòch không thêm mã vào module thực mà thêm lệnh liên kết (chứa tên DLL bên có hàm cần nạp) tên hàm Khi thực thi chương trình hàm API thực nạp vào nhớ để thực Cùng với phát triển Windows sựï phát triển lập trình hướng đối tượng, để hỗ trợ cho việc lập trình hướng đối tượng, Microsoft cung cấp cho người lập trình thư viện lớp để phát triển ứng dụng hướng đối tượng gọi MFC (Microsoft Foundation Classes), nội dung bao gồm thông tin lớp chuẩn hóa lớp application; document; view; OLE; cửa sổ; nút bấm; text; v.v…, lớp thứ liên quan đến (bao gồm liệu chương trình xử lý nó) làm hoàn chỉnh, người lập trình việc lấy sử dụng, thêm bớt tính đặc trưng cho đối tượng Mục tiêu MFC hệ thống hóa hàm API, cung cấp thể thức gọi gọn hàm API, cung cấp “khung làm việc” (framework) cực mạnh để người lập trình không cần SVTH : Lương Cao Hoài Tâm Lớp TH40 http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Báo Cáo Luận Văn Tốt Nghiệp Trang phải quan tâm đến đoạn chương trình thuộc “thủ tục” mà cần quan tâm đến phần cốt lõi để đạt mục đích KIL OBO OKS CO M II - THÔNG ĐIỆP VÀ XỬ LÝ THÔNG ĐIỆP: - Khái niệm: Lập trình môi trường Windows khác với lập trình môi trường khác điểm lập trình Windows luôn gắn liền với thông điệp Mọi hoạt động xảy chương trình Windows thông qua thông điệp Thông điệp hệ thống báo cho ứng dụng biết tác động từ bên vào hệ thống Windows Một cửa sổ gởi thông điệp cho cửa sổ khác cửa sổ đáp ứng lại thông điệp cách gởi thông điệp khác cho cửa sổ khác Trong Windows có loại thông điệp bản: - Những thông điệp tổng quát: có mã nhận diện mang tiền tố WM_ coi phần lớn ứng dụng Windows cung cấp hàm để giải - Những control notification: thông điệp WM_COMMAND chuyển từ cửa sổ tới cửa sổ bố mẹ - Những nút lệnh: thông điệp WM_COMMAND phát từ trình đơn, từ nút điều khiển Đây loại thông điệp yêu cầu ứng dụng phải thực công việc - Gởi thông điệp: Windows cho phép ứng dụng gởi thông điệp cho mình, cho ứng dụng khác cho hệ thống Có hàm Windows API để gởi thông điệp đi: a) Hàm SendMessage: Cú pháp: LRESULT SendMessage(hwnd, uMsg, wParam, lParam) HWND hwnd; // handle cửa sổ nhận (đích) UINT uMsg; // thông điệp để gởi WPARAM wParam; // thông số thông điệp SVTH : Lương Cao Hoài Tâm Lớp TH40 http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Báo Cáo Luận Văn Tốt Nghiệp LPARAM lParam; Trang // thông số thông điệp thứ hai - Hàm SendMessage gởi thông điệp tới hay nhiều cửa sổ Hàm gọi thủ điệp KIL OBO OKS CO M tục cửa sổ cho cửa sổ không trở lúc thủ tục cửa sổ xử lý thông - Giá trò trả về: cho biết kết xử lý thông điệp phụ thuộc vào thông điệp gởi b) Hàm PostMessage: - Cú pháp: BOOL PostMessage(hwnd, uMsg, wParam, lParam) HWND hwnd; // handle của sổ đích UINT uMsg; // thông điệp gởi WPARAM wParam; // thông số thông điệp LPARAM lParam; // thông số thông điệp thứ hai - Hàm PostMessage gởi (đặt) thông điệp vào hàng thông điệp cửa sổ trở mà không đợi cửa sổ tương ứng xử lý thông điệp Những thông điệp hàng thông điệp lấy cách gọi hàm SetMessage hay PeekMessage - Giá trò trả về: trả khác thành công, ngược lại c) Hàm SendDlgItemMessage: - Cú pháp: LRESULT SendDlgItemMessage(hwndDlg,idDlgItem,uMsg,wParam,lParam) HWND hwndDlg; // handle hộp hội thoại int idDlgItem; // mã nhận diện ô điều khiển nhận thông điệp UINT uMsg; // thông điệp gởi WPARAM wParam; // thông số thông điệp LPARAM lParam; // thông số thông điệp thứ hai - Hàm SendDlgItemMessage gởi thông điệp tới điều khiển hộp hội thoại SVTH : Lương Cao Hoài Tâm Lớp TH40 http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Báo Cáo Luận Văn Tốt Nghiệp Trang 10 - Giá trò trả về: cho biết kết xử lý thông điệp phụ thuộc vào thông điệp gởi - Vòng lặp thông điệp: KIL OBO OKS CO M Một thread process đẩy thông điệp khỏi hàng đợi cách dùng vòng lặp thông điệp Vòng loop ứng dụng đặt cuối hàm WinMain() ứng dụng Vòng lặp thông điệp có dạng sau: while GetMessage(&msg,NULL,0,0) { TranslateMessage(&msg); DispatchMessage(&msg); } Sau Sơ đồ dòng thông điệp: Hardware Event Occur System Message Queue System Dispatcher System Dispatcher Thread1 Message Queue Thread1 Hook Thread2 Message Queue Thread2 Hook Thread3 Message Queue Thread3 Hook GetMessage() TranslateMessage() Dispatch Message() GetMessage() TranslateMessage() Dispatch Message() GetMessage() TranslateMessage() Dispatch Message() WndProc() WndProc() WndProc() DefWndProc() DefWndProc() DefWndProc() SVTH : Lương Cao Hoài Tâm Lớp TH40 http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Báo Cáo Luận Văn Tốt Nghiệp Trang 84 - Ghi chú: Hàm WindowFromPoint không lấy handle cửa sổ bò che hay không hoạt dộng được, điểm cửa sổ Một ứng dụng sử dụng hàm ChildWindowFromPoint cho việc tìm kiếm giới hạn KIL OBO OKS CO M Hàm yêu cầu tối thiểu Windows 95, Header khai báo winuser.h, sử dụng thư viện user32.lib – Hàm ChildWindowFromPoint: - Hàm ChildWindowFromPoint xác đònh rõ cửa sổ thuộc cửa sổ cha mẹ chứa điểm cho - Cú pháp: HWND ChildWindowFromPoint ( HWND hWndParent, POINT Point ); // handle cửa sổ cha mẹ // cấu trúc tọa độ điểm - Thông số: hWndParent Handle cửa sổ cha mẹ Point Cấu trúc POINT đònh nghóa tọa độ client điểm kiểm tra - Giá trò trả về: Là handle cửa sổ chứa điểm contains the point trường hợp cửa sổ bò che hay hoạt động hidden or disabled Nếu điểm nằm cửa sổ cha mẹ giá trò trả NULL Nếu điểm cửa sổ cha mẹ không cửa sổ trả handle cửa sổ cha mẹ - Ghi chú: Hệ thống trì danh sách nội, chứa handle cửa sổ tổ chức cửa sổ cha mẹ Thứ tư handle danh sách phụ thuộc vào trật tự Z cửa sổ Nếu có nhiều cửa sổ chứa điểm hệ thống trả handle cửa sổ danh sách mà có chứa điểm Hàm đòi hỏi tối thiểu Windows 95, Header: khai báo winuser.h, sử dụng Import Library user32.lib SVTH : Lương Cao Hoài Tâm Lớp TH40 http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Báo Cáo Luận Văn Tốt Nghiệp Trang 85 – Hàm ChildWindowFromPointEx: - Hàm ChildWindowFromPointEx xác đònh rõ cửa sổ thuộc cửa sổ cha mẹ chứa điểm Hàm phớt lờ cửa sổ không nhìn thấy, KIL OBO OKS CO M hoạt động suốt - Cú pháp: HWND ChildWindowFromPointEx( ); HWND hwndParent, // handle cửa sổ cha mẹ POINT pt, // cấu trúc tọa độ điểm UINT uFlags // cờ bỏ quãng - Thông số: hwndParent Handle cửa sổ cha mẹ pt cấu trúc POINT đònh nghóa tọa độ client điểm kiểm tra uFlags giá cho biết cửa sổ bò bỏ, kết hợp trò sau: Giá trò Ý nghóa CWP_ALL Không bỏ cửa sổ CWP_SKIPINVISIBLE Bỏ cửa sổ không nhìn thấy CWP_SKIPDISABLED Bỏ cửa sổ hoạt động CWP_SKIPTRANSPARENT Bỏ cửa sổ suốt - Giá trò trả về: Là handle cửa sổ chứa điểm bắt gặp tiêu chuẩn (critia) đặc tả uFlags Nếu điểm cửa sổ cha mẹ không cửa sổ bắt gặp tiêu chuẩn giá trò trả handle cửa sổ cha mẹ Nếu điểm nằm cửa sổ cha mẹ hay hàm thất bại giá trò trả NULL - Ghi chú: Hệ thống trì danh sách nội chứa handle cửa sổ tổ chức cửa sổ cha mẹ Thứ tự handle danh sách phụ thuộc vào trật tự Z cửa sổ Nếu có nhiều cửa sổ chứa điểm hệ thống trả handle cửa sổ danh sách chứa SVTH : Lương Cao Hoài Tâm Lớp TH40 http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Báo Cáo Luận Văn Tốt Nghiệp Trang 86 điểm bắt gặp tiêu chuẩn uFlags Hàm đòi hỏi tối thiểu Windows 95, Header: khai báo winuser.h, sử dụng Import Library user32.lib - Hàm GetWindowText: KIL OBO OKS CO M - Hàm GetWindowText chép text tiêu đề cửa sổ đặc tả (nếu có một) vào vùng đệm Nếu cửa sổ đặc tả điều khiển text điều khiển chép Tuy nhiên, GetWindowText lấy text điều khiển ứng dụng khác - Cú pháp: int GetWindowText( HWND hWnd, LPTSTR lpString, int ); // handle cửa sổ hay điều khiển có chứa text // đòa vùng đệm cho text nMaxCount // số cực đại ký tự để chép - Thông số: hWnd Handle cửa sổ hay điều khiển có chứa text lpString Pointer tới vùng đệm nhận text nMaxCount số lượng cực đại ký tự chép tới vùng đệm tính ký tự, NULL Nếu đoạn text vượt giới hạn bò cắt bớt - Giá trò trả về: Nếu thành công trả độ dài ký tự chuỗi chép không tính ký tự rỗng cuối chuỗi Nếu cửa sổ tiêu đề hay đoạn text, hay tiêu đề rỗng hay handle cửa sổ tiêu đề không hợp lệ giá trò trả zero Hàm lấy đoạn text edit control ứng dụng khác - Ghi chú: Nếu cửa sổ đích thuộc sở hữu trình hành, hàm GetWindowText tạo nên thông điệp WM_GETTEXT để gởi tới điều khiển hay cửa sổ đặc tả Nếu cửa sổ đích sở hữu trình khác có đầu đề (caption) hàm GetWindowText lấy phần text caption cửa sổ Nếu cửa sổ caption giá trò trả chuỗi rỗng Hàm đòi SVTH : Lương Cao Hoài Tâm Lớp TH40 http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Báo Cáo Luận Văn Tốt Nghiệp Trang 87 hỏi tối thiểu Windows 95, Header: khai báo winuser.h, sử dụng Import Library user32.lib - Hàm MouseProc: KIL OBO OKS CO M Thủ tục hook MouseProc hàm callback đònh nghóa thư viện hay đònh nghóa ứng dụng sử dụng hàm SetWindowsHookEx Hệ thống gọi hàm ứng dụng gọi hàm GetMessage hay PeekMessage có thông điệp chuột xử lý Kiểu HOOKPROC đònh nghóa pointer trỏ tới hàm callback MouseProc placeholder cho tên hàm đònh nghóa ứng dụng hay tên hàm đònh nghóa thư viện - Cú pháp: LRESULT CALLBACK MouseProc ( Int nCode, // hook code WPARAM wParam, // danh hiệu thông điệp LPARAM lParam // tọa độ chuột ); - Thông số: nCode để code thủ tục hook sử dụng để đònh làm xử lý thông điệp, có giá trò: Giá trò Ý nghóa HC_ACTION wParam lParam chứa thông tin thông điệp chuột HC_NOREMOVE wParam lParam chứa thông tin thông điệp chuột, thông điệp chuột không bò xóa khỏi hàng message - Nếu nCode nhỏ thủ tục hook phải chuyển thông điệp tới hàm CallNextHookEx không cần xử lý thêm nên trả giá trò trả CallNextHookEx wParam chứa danh hiệu thông điệp chuột SVTH : Lương Cao Hoài Tâm Lớp TH40 http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Báo Cáo Luận Văn Tốt Nghiệp lParam Trang 88 pointer trỏ tới cấu trúc MOUSEHOOKSTRUCT - Giá trò trả về: Nếu nCode < trả giá trò CallNextHookEx trả KIL OBO OKS CO M nCode >= thủ tục hook không xử lý thông điệp đề nghò bạn gọi CallNextHookEx trả giá trò trả ngược lại ừng dụng khác đặt hook WM_MOUSE không nhận thông báo hook đối xử xác kết Nếu thủ tục hook xử lý thông điệp trả giá trò khác để ngăn chặn hệ thống chuyển thông điệp tới thủ tục cửa sổ đích - Ghi chú: Một ứng dụng đặt thủ tục hook cách đặc tả kiểu hook WH_MOUSE đòa thủ tục hook gọi tới hàm SetWindowsHookEx Thủ tục hook phải không đặt hàm callback JournalPlayBackProc 10 - Hàm RedrawWindow: Hàm RedrawWindow cập nhật hình chữ nhật hay vùng đưa vào vùng client cửa sổ - Cú pháp: BOOL RedrawWindow( hwnd, lprcUpdate, hrgnUpdate, fuRedraw) HWND hwnd; const RECT FAR* lprcUpdate; HRGN hrgnUpdate; UINT fuRedraw; - Thông số: hwnd Cửa sổ cần vẽ lại Nếu NULL cửa sổ desktop cập nhật lprcUpdate tới cấu trúc RECT chứa tọa độ hình chữ nhật cập nhật Thông số bò phớt lờ hrgnUpdate chứa handle vùng hợp lệ SVTH : Lương Cao Hoài Tâm Lớp TH40 http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Báo Cáo Luận Văn Tốt Nghiệp hrgnUpdate Trang 89 vùng cập nhật Nếu hrgnUpdate lprcUpdate NULL toàn vùng client cửa sổ cập nhật hay nhiều cờ vẽ lại, kết hợp nhiều cờ KIL OBO OKS CO M fuRedraw Các cờ sau sử dụng để làm hiệu lực vùng cửa sổ: RDW_ERASE làm cho cửa sổ nhận thông điệp WM_ERASEBKGND cửa sổ vẽ lại Cờ RDW_INVALIDATE phải xác đònh không cờ RDW_ERASE tác dụng RDW_FRAME làm cho vùng vùng non-client cửa sổ mà giao với vùng cập nhật nhận thông điệp WM_NCPAINT Cờ RDW_INVALIDATE phải xác đònh không RDW_FRAME không ảnh hưởng Thông điệp thường không gởi suốt thực thi hàm RedrawWindow trừ RDW_UPDATENOW hay RDW_ERASENOW xác đònh RDW_INTERNALPAINT làm cho WM_PAINT gởi (send) tới cửa sổ mà không quan tâm cửa sổ chứa vùng hợp lệ hay không RDW_INVALIDATE làm hiệu lực lprcUpdate hay hrgnUpdate (chỉ chúng có lẽ không NULL) Nếu hai NULL, toàn cửa sổ bò hiệu lực Những cờ sau làm có hiệu lực vùng cửa sổ: RDW_NOERASE chặn thông điệp WM_ERASEBKGND xảy RDW_NOFRAME chặn thông điệp WM_NCPAINT xảy Cờ phải sử dụng với RDW_VALIDATE sử dụng điển hình với RDW_NOCHILDREN Sự chọn lựa để sử dụng phải cẩn thận làm cho phần cửa sổ vẽ SVTH : Lương Cao Hoài Tâm Lớp TH40 http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Báo Cáo Luận Văn Tốt Nghiệp Trang 90 RDW_NOINTERNALPAINT chặn thông điệp nội WM_PAINT Cờ không ảnh hưởng WM_PAINT gây kết từ vùng hợp lệ KIL OBO OKS CO M RDW_VALIDATE làm hợp lệ lprcUpdate hay hrgnUpdate (chỉ có lẻ không NULL) Nếu hai NULL, toàn cửa sổ hợp lệ Cờ không ảnh hưởng tới thông điệp nội WM_PAINT Những cờ điều khiển việc vẽ xảy Không có vẽ thực hàm RedrawWindow trừ mẫu xác đònh RDW_ERASENOW làm cho cửa sổ bò tác dụng (như xác đònh cờ RDW_ALLCHILDREN RDW_NOCHILDREN) nhận thông điệp WM_NCPAINT WM_ERASEBKGND ,Nếu cần thiết trước lúc hàm trả WM_PAINT bò trì hoãn RDW_UPDATENOW làm cho cửa sổ bò tác dụng (như xác đònh cờ RDW_ALLCHILDREN nhận thông điệp WM_NCPAINT, RDW_NOCHILDREN) WM_ERASEBKGND WM_PAINT Nếu cần thiết trước lúc hàm trả - Mặc đònh, cửa sổ bò tác dụng hàm RedrawWindow phụ thuộc việc cửa sổ có kiểu WS_CLIPCHILDREN hay không Những cửa sổ cửa sổ WS_CLIPCHILDREN không bò ảnh hưởng; Tuy nhiên cửa sổ không WS_CLIPCHILDREN làm có hiệu lực đệ quy hay làm hiệu lực cửa sổ WS_CLIPCHILDREN bắt gặp Các cờ sau điều khiển cửa sổ bò ảnh hưởng hàm RedrawWindow: RDW_ALLCHILDREN gồm cửa sổ (nếu co)ù hoạt động vẽ RDW_NOCHILDREN loại trừ cửa sổ (nếu có) khỏi hoạt động vẽ - Giá trò trả về: khác thành công, ngược lại - Chú ý: Khi hàm RedrawWindow dùng để làm hiệu lực vùng cửa sổ desktop cửa sổ desktop không nhận thông điệp WM_PAINT Để vẽ lại SVTH : Lương Cao Hoài Tâm Lớp TH40 http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Báo Cáo Luận Văn Tốt Nghiệp Trang 91 desktop ứng dụng sử dụng cờ RDW_ERASE để sinh thông điệp WM_ERASEBKGND 11 - Hàm GetViewportOrgEx: KIL OBO OKS CO M Hàm GetViewportOrgEx lấy tọa độ x, y origin viewport tổ chức với DC - Cú pháp: BOOL GetViewportOrgEx(hdc, lpPoint) HDC hdc; POINT FAR* lpPoint; - Thông số: hdc xác đònh device context lpPoint Points tới đòa cấu trúc POINT Origin viewport (trong tọa độ thiết bò) đặt cấu trúc - Giá trò trả về: khác thành công, ngược lại 12 - Hàm GetDCOrg: Hàm GetDCOrg lấy tọa độ origin dòch cuối cho DC Origin xác đònh offset sử dụng Windows để dòch tọa độ thiết bò sang tọa độ client cho điểm cửa sổ ứng dụng Origin dòch cuối liên quan với origin vật lý hình - Cú pháp: DWORD GetDCOrg(hdc) HDC hdc; // handle of device context - Thông số: hdc device context mà origin lấy - Giá trò trả về: word thấp giá trò trả chứa tọa độ x word cao chứa toạ độ y origin dòch cuối hệ toạ độ thiết bò hàm thành công SVTH : Lương Cao Hoài Tâm Lớp TH40 http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Báo Cáo Luận Văn Tốt Nghiệp Trang 92 13 - Hàm GetClientRect: Hàm GetClientRect tọa độ client vùng client cửa sổ Tọa độ client xác đònh góc trái-trên phải-dưới vùng client Bởi tọa độ client liên (0,0) KIL OBO OKS CO M quan đến góc trái-trên vùng client cửa sổ nên tọa độ góc trái-trên - Cú pháp: void GetClientRect(hwnd, lprc) HWND hwnd; // handle of window RECT FAR* lprc; // address of structure for rectangle - Thông số: hwnd Cửa sổ mà tọa độ client lấy lprc tới cấu trúc RECT nhận tọa độ client Giá trò left top 0, right bottom chứa chiều rộng chiều cao cửa sổ - Giá trò trả về: không trả giá trò 14 – Các thông điệp để vẽ lại hình: Các thông điệp gởi đến cửa sổ cho hàm SendMessage khiến cho ứng dụng quản lý cửa sổ vẽ lại cửa sổ a) Thông điệp WM_PAINT: Mặt cửa sổ bò thay đổi liên tục (bởi lệnh resize, đóng mở dialog box…) không cập nhật bò biến dạng nên Windows dùng thông điệp WM_PAINT để tô vẽ lại hình Có nhiều tình làm cho Windows phát thông điệp WM_PAINT: - Trước hết người sử dụng chạy chương trình - Sau cửa sổ co giản hay hoàn nguyên sau cửa sổ bò che phủ (một phần hay toàn phần) cửa sổ khác tức phần cửa sổ bò che không thấy vẽ lại cho thấy - Gởi thông điệp WM_PAINT cách làm hiệu lực vùng client (invalidating) gọi hàm InValidateRect() SVTH : Lương Cao Hoài Tâm Lớp TH40 http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Báo Cáo Luận Văn Tốt Nghiệp Trang 93 WM_PAINT: Hdc = (HDC) wParam ; // DC để vẽ Hdc tới DC để vẽ, NULL dùng DC có sẵn, hdc sử dụng KIL OBO OKS CO M vài điều khiển chung để vẽ DC khác DC có sẵn Các cửa sổ khác phớt lờ thông số Trò trả về: ứng dụng trả xử lý thông điệp b) Thông điệp WM_NCPAINT: Một ứng dụng gởi thông điệp tới cửa sổ khung (frame) phải vẽ lại Khung cửa sổ vùng client area WM_NCPAINT: Hrgn = (HRGN) wParam ; // handle update region Tham số: Hrgn giá trò wParam tới update region xén tới frame cửa sổ, wParam = toàn frame cửa sổ cần cập nhật Giá trò trả về: ứng dụng trả giá trò xử lý thông điệp Ghi chú: clipping region cửa sổ luôn hình chữ nhật hình dạng frame thay đổi IV – Giới thiệu số cấu trúc liệu có liên quan: Các cấu trúc liệu cấu trúc chuẩn Windows 3.1, đònh nghóa file WINDOWS.H - Cấu trúc TEXTMETRIC: Cấu trúc TEXTMETRIC chứa thông tin font vật lý Tất kích thước đưa đơn vò luận lý tức chúng phụ thuộc vào chế độ ánh xạ hành ngữ cảnh hình Nội dung ý nghóa liệu cấu trúc trình bày chương 4: Kết xuất văn SVTH : Lương Cao Hoài Tâm Lớp TH40 http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Báo Cáo Luận Văn Tốt Nghiệp Trang 94 – Cấu trúc POINT: - Dùng để đònh nghóa tọa độ x, y điểm - Cú pháp: KIL OBO OKS CO M typedef struct tagPOINT { LONG x; LONG y; } – Cấu trúc STRUCT: - Đònh nghóa tọa độ góc upper-left lower-right hình chữ nhật - Cú pháp: typedef struct tagRECT { LONG left; LONG top; LONG right; LONG bottom; } RECT; – Cấu trúc PAINTSTRUCT: - Dùng chứa thông tin dùng để tô vẽ client area thuộc cửa sổ - Cú pháp: typedef struct tagPAINTSTRUCT { HDC hdc; BOOL fErase; RECT rcPaint; BOOL fRestore; BYTE fIncUpdate; BYTE rgbReserved[16]; } PAINTSTRUCT; SVTH : Lương Cao Hoài Tâm Lớp TH40 http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Báo Cáo Luận Văn Tốt Nghiệp Trang 95 - Tham số: hdc handle DC cần vẽ fErase cho biết background có vẽ lại hay không, khác KIL OBO OKS CO M tô vẽ ngược lại không vẽ rcPaint góc upper-left lower-right hình chữ nhật vẽ fRestore dành riêng cho sử dụng nội Windows fIncUpdate dành riêng cho sử dụng nội Windows RgbResersed[16] khối ký ức dành riêng cho sử dụng nội Windows – Cấu trúc EVENTMSG: - Chứa thông tin từ hàng ứng dụng Windows, sử dụng để lưu trữ thông tin thông điệp cho hàm callback JornalPlaybackProc - Cú pháp: typedef struct tagEVENTMSG { UINT message; UINT paramL; UINT paramH; DWORD time; } EVENTMSG; - Thông số: phụ message thông điệp paramL thông tin thêm vào thông điệp Nghóa xác thuộc vào giá trò thông điệp paramH phụ thông tin thêm vào thông điệp Nghóa xác thuộc vào giá trò thông điệp time thời điểm mà thông điệp post SVTH : Lương Cao Hoài Tâm Lớp TH40 http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Báo Cáo Luận Văn Tốt Nghiệp Trang 96 – Cấu trúc MSG: - Chứa thông tin từ hàng ứng dụng cửa sổ KIL OBO OKS CO M - Cú pháp: typedef struct tagMSG { HWND hwnd; UINT message; WPARAM wParam; LPARAM lParam; DWORD time; POINT pt; } MSG; - Thông số: hwnd cửa sổ nhận thông điệp message ố thông điệp wParam thông tin thêm vào thông điệp Nghóa xác phụ thuộc vào giá trò thông điệp lParam thông tin thêm vào thông điệp Nghóa xác phụ thuộc vào giá trò thông điệp time thời điểm thông điệp post pt vò trí cursor tọa độ hình thông điệp post - Cấu trúc SIZE: - Chứa viewport extents, window extents, text extents, bitmap dimensions, aspect-ratio filter cho vài hàm mở rộng - Cú pháp: typedef struct tagSIZE { int cx; int cy; SVTH : Lương Cao Hoài Tâm Lớp TH40 http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Báo Cáo Luận Văn Tốt Nghiệp Trang 97 } SIZE; - Thông số: x-extent hàm trả cy y-extent hàm trả KIL OBO OKS CO M cx - Cấu trúc MOUSEHOOKSTRUCT: - Cấu trúc MOUSEHOOKSTRUCT chứa thông tin kiện chuột - Cú pháp: typedef struct tagMOUSEHOOKSTRUCT { POINT pt; HWND hwnd; UINT wHitTestCode; DWORD dwExtraInfo; } MOUSEHOOKSTRUCT; - Thông số: pt điểm có cấu trúc POINT chứa tọa độ x,y mouse cursor hệ tọa độ hình hwnd cửa sổ nhận thông điệp chuột tương ứng với kiện mouse wHitTestCode mã hit-test trả dwExtraInfo thông tin thêm vào tổ chức với kiện mouse Một ứng dụng thiết lập thông tin thêm vào cách gọi hàm kiện phần cứng lấy cách gọi hàm GetMessageExtraInfo SVTH : Lương Cao Hoài Tâm Lớp TH40 http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Báo Cáo Luận Văn Tốt Nghiệp Trang 98 KIL OBO OKS CO M Kết hướng phát triển Chương trình GETTEXT bước đầu đáp ứng yêu cầu đề tài đặt ra: Nhận dạng từ hiển thò hình Tuy nhiên, kỹ thuật override thực môi trường Windows 16 bits, nên chương trình chạy môi trường Windows 16bits Trong môi trường Windows 9x, môi trường lai tạp 16bits 32bits, nên chương trình nhận dạng dòng văn xuất hàm kết xuất văn môi trường 16bits (như TextOut, ExtTextOut), văn kết xuất hàm môi trường 32bits (như TextOutA, ExtTextOutA - dùng để kết xuất văn phầm mềm 32bits Microsoft Office 97) chương trình nhận dạng Dù điều mà đề tài đạt đưa giải thuật khung sườn mang tính khả thi, phát triển hoàn chỉnh tương lai Do vậy, để nhận dạng tất từ xuất hình Windows phải override hàm Windows 32bits Việc thực vấn đề lớn, cần phải hiểu sâu sắc Windows, Windows có chế độ bảo vệ nhớ chặt chẽ, nên ghi xoá vào hàm API cách mà chương trình làm, cần phải có giải thuật khác Ngoài việc lấy liệu cách override hướng để giải vấn đề, ta thực cách khác dùng hàm lấy text mà Windows có hỗ trợ, vấn đề phức tạp SVTH : Lương Cao Hoài Tâm Lớp TH40 [...]... cho các ứng dụng Windows vận hành được Hệ thống và các ứng dụng khác sinh ra các thông điệp cho mọi sự kiện xuất hiện trong hệ thống thông điệp của Windows sẽ cho phép Windows chạy đa nhiệm trong một thời điểm Windows 95 và Windows NT mở rộng khả năng của version Windows trước bằng việc cấp phát cho mỗi dòng xử lý (thread) hay mỗi tiến trình (proccess) một hàng đợi thông điệp riêng Trong version Windows. .. màn hình với các cửa sổ khác, kể cả các cửa sổ của ứng dụng khác Chỉ có một cửa sổ trong một thời điểm có thể nhận dữ liệu nhập từ người dùng Người dùng có thể dùng chuột, bàn phím, hay các thiết bò nhập khác để tương tác với cửa sổ này và ứng dụng sở hữu nó 1 - Các loại cửa sổ: Windows cung cấp nhiều kiểu cửa sổ khác nhau để có thể kết hợp hình thành nên các hình thức cửa sổ khác nhau Các kiểu được... hiển thò); yêu cầu thực hiện một vài hành động trên cửa sổ hay vùng client của nó (cập nhật vùng client); thông tin về tình trạng của nó trong mối quan hệ với các cửa sổ khác (truy xuấ nhất đònh thất bại của nó tới bàn phím hay trở thành cửa sổ hoạt động) Một thủ tục cửa sổ nhận hầu hết các thông điệp là từ Windows nhưng nó cũng có thể nhận thông điệp từ các cửa sổ khác gồm cả những cửa sổ nó sở hữu... code Mouse Device driver Hook chain GetMessage() DispatchMessage() WindowProc() DefWindowProc() 1 - Mouse: Khi mouse báo vò trí của mình (vò trí cursor) và có tác động lên mouse thì một tín hiệu được phát đi từ mouse gây ra một ngắt quãng, mouse driver giải quyết ngắt quãng này SVTH : Lương Cao Hoài Tâm Lớp TH40 http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Báo Cáo Luận Văn Tốt Nghiệp Trang 24 2 - Mouse. .. Mouse device driver: Khi Windows khởi động thì mouse driver tự động nạp vào và kiểm tra xem có chuột hay không Nếu có thì Windows gọi driver cung cấp một thủ tục để báo KIL OBO OKS CO M cáo các biến cố xảy ra trên chuột Khi có một mouse event thì driver thông báo cho Windows biết Nếu event là di chuyển mouse thì ưu tiên đáp ứng vò trí con trỏ di chuyển ngay lúc ngắt Còn lại tất cả các event khác đều được... cũng đi trước một thông điệp chuột Vì Windows phải tìm ra xem vò trí cursor hiện ở trong vùng client hay vùng non-client để phát ra thông điệp vùng client hay thông điệp vùng non-client một cách thích hợp Một khi đã được nhận diện thì Windows phải đảm bảo là người sử dụng nhận được hình dáng cursor thích hợp Windows cho phép đặt message hook để thay đổi dòng chảy các thông điệp Một WH_GETMESSAGE hook... hàng thông điệp hệ thống Hook này có ích cho việc ghi các macro - WH_KEYBOARD hook quản lý các thông điệp keystroke - WH_KEYBOARD_LL Windows NT: hook quản lý những sự kiện nhập vào từ keyboard mức thấp - WH _MOUSE hook quản lý các thông điệp chuột - WH _MOUSE_ LL Windows NT: hook quản lý những sự kiện đầu vào chuột mức thấp - WH_MSGFILTER hook quản lý các thông điệp được kết sinh như là một kết quả cuả... không sử dụng các cửa sổ con một cách bừa bãi Để hoạt động tối ưu một ứng dụng cần chia luận lý cửa sổ chính của nó trong thủ tục cửa sổ của cửa sổ chính còn hơn là dùng các cửa sổ con 2 - Thủ tục cửa sổ (Window Procedures): Một thủ tục cửa sổ xử lý tất cả những thông điệp được gởi tới tất cả các cửa sổ trong lớp được đưa ra Windows gởi các thông điệp tới thủ tục cửa sổ khi nó nhận input từ user có ý... nơi đó ứng dụng in ra các kết xuất và nhận các dữ liệu từ người dùng SVTH : Lương Cao Hoài Tâm Lớp TH40 http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Báo Cáo Luận Văn Tốt Nghiệp Trang 17 Windows quản lý tất cả cửa sổ hiện có trong hệ thống bằng cách gán cho mỗi cửa sổ một handle (trên thực tế nó là một số nguyên)ø, ta chỉ cần có được handle cửa sổ thì có thể thao tác mọi thứ trên cửa sổ đó KIL OBO... dụng Windows nào cũng có thể sử dụng hàm GDI để truy xuất một thiết bò đầu ra GDI chuyển các gọi độc lập thiết bò từ ứng dụng tới driver thiết bò Rồi driver thiết bò thông dòch các gọi đó vào trong sự hoạt động độc lập thiết bò Những đặc tính của DC mô tả các đối tượng vẽ được chọn (pens và brushes), font được chọn và màu của nó, cách thức mà đối tượng được vẽ (hay ánh xạ) tới thiết bò, vùng trên thiết ... thông điệp-đặc biệt thêm vào 16-bit lParam thông tin thông điệp-đặc biệt thêm vào 32-bit Hàm trả giá trò 32-bit cho biết kết xử lý thông điệp SVTH : Lương Cao Hoài Tâm Lớp TH40 http:/ /kilobooks. com... hay top-level window): cửa sổ cửa sổ cha mẹ - Cửa sổ bò sở hữu (Owned windows): kiểu đặc biệt, sở hữu cửa sổ bò chồng - Cửa sổ pop-up: kiểu đặc biệt cửa sổ overlapped có không title bar - Cửa... giá trò: handle xác đònh cửa sổ, danh hiệu thông điệp, giá trò thông điệp-đặc biệt 16-bit giá trò thông điệp-đặc biệt 32-bit Những giá trò chuyển tới thủ tục cửa sổ thông số riêng lẻ Rồi thủ tục

Ngày đăng: 02/12/2015, 12:25

Tài liệu cùng người dùng

Tài liệu liên quan