Thông tin tài liệu
1 Chương 2: Lập trình với cửa sổ bằng API Cách tổ chức quản lý cửa sổ Đăng ký, tạo và hiện cửa sổ Vòng lặp TĐ và hàm cửa sổ Một số thông điệp cơ bản Một số hàm API 2 2.1- Tổ chức và quản lý cửa sổ trên Windows Lớp cửa sổ (WNDCLASS) mô tả cấu tạo và hoạt động cho cửa sổ, gồm: Lớp cửa sổ thông thường Lớp cửa sổ dạng hộp thoại Lớp cửa sổ dạng điều khiển như “edit”, “static”, “button”, Số hiệu (HWND) là số nguyên định danh cho cửa sổ Hàm cửa sổ (WNDPROC) để thực hiện xử lý các họat động trên cửa sổ, mặc định là DefWindowProc. Windows Register WNDCLASS Create WNDPROC Cửa sổ User 3 Đăng ký lớp cửa sổ Bước 1: Thiết lập cấu trúc mô tả lớp cửa sổ WNDCLASS a; ZeroMemory( &a, sizeof(a) ); a.style = 1; a.lpfnWndProc = DefWindowProc; a.hInstance = t1; a.hbrBackground = CreateSolidBrush( 255 ); a.lpszClassName = “CS1”; Bước 2: Đăng ký vào hệ thống RegisterClass( &a ); 2.2- Đăng ký, tạo và hiện cửa sổ 4 2.2- Đăng ký, tạo và hiện cửa sổ Lệnh tạo và hiện cửa sổ HWND CreateWindow( class, tên lớp cửa sổ (“edit”, “static”, “button”, hoặc đã đăng ký) title, tiêu đề cửa sổ style, kiểu cửa sổ (WS_SYSMENU, WS_POPUP, WS_OVERLAPPEDWINDOW, ) xpos, ypos, tọa độ vị trí góc trái trên cửa sổ width, height, độ rộng và cao parent, số hiệu cửa sổ chứa =0 menu, số hiệu thực đơn =0 hinstance, số hiệu chương trình more=0 ); BOOL ShowWindow( hwnd, show ); BOOL UpdateWindow( hwnd ); 5 Lập trình vòng lặp thông điệp MSG m; while ( GetMessage( &m, 0, 0, 0 ) ) { TranslateMessage( &m ); DispatchMessage( &m ); } 2.3- Vòng lặp TĐ & hàm cửa sổ Windows Cửa sổ Chương trình Tác động của người dùng Sự kiện chuyển tới Windows Windows chuyển thông điệp tới Vòng lặp TĐ Hàm XLTĐ C a l l i n g A P I 6 2.3- Vòng lặp TĐ & hàm cửa sổ Lập trình hàm XLTĐ theo tham số t2 LRESULT CALLBACK tên_hàm( HWND t1, UINT t2, WPARAM t3, LPARAM t4 ) { switch ( t2 ) { case thông-điệp-1 : < xử lý thông điệp 1 > break; case thông-điệp-2 : < xử lý thông điệp 2 > break; } return DefWindowProc( t1, t2, t3, t4 ); } Thông thường xử lý thông điệp thì nên return 0; 7 Windows Cửa sổ 1 Cửa sổ 2 Cửa sổ 3 Hàm WinMain Vòng lặp thông điệp Hàm cửa sổ 1 Hàm cửa sổ 2 Hàm cửa sổ 3 Tác động USER Sự kiện tác động Hàng đợi thông điệp Xác định hàm cửa sổ Thông điệp nhận 2.3- Vòng lặp TĐ & hàm cửa sổ 8 WM_CLOSE WM_TIMER { t3 = ID chu kỳ thời gian } WM_SHOWWINDOW WPARAM = TRUE/FALSE, cửa sổ hiện hoặc ẩn LPARAM = SW_OTHERUNZOOM, SW_PARENTCLOSING, lý do hiển thị WM_MOVE, WM_MOVING WM_MOVE có LPARAM = LOWORD:tọa độ x; HIWORD:tọa độ y WM_MOVING có LPARAM = LPRECT{left,top,right,bottom} tọa độ & kích thước WM_SIZE, WM_SIZING WPARAM = {SIZE_MAXIMIZED, SIZE_MINIMIZED, } trạng thái cửa sổ LPARAM = LOWRD:độ rộng nền; HIWORD:độ cao nền WM_ACTIVATE WPARAM = WA_ACTIVE, WA_INACTIVE, WA_CLICKACTVE WM_QUIT 2.4- Một số thông điệp cơ bản 9 Cửa sổ trong suốt (WinXP) typedef BOOL (WINAPI* CTH)(HWND,COLORREF,BYTE,DWORD); HANDLE a = GetModuleHandle( “USER32.DLL” ); CTH b = (CTH)GetProcAddress(a,“SetLayeredWindowAttributes”); HWND c = CreateWindowEx( 0x00080000L, ); b( c, 0, 127, 2 ); Cửa sổ dạng topmost CreateWindowEx( WS_EX_TOPMOST, … ); Khóa bàn phím và chuột (WinXP) typedef BOOL (WINAPI* CTH)( BOOL ); HANDLE a = GetModuleHandle( “USER32.DLL” ); CTH b = (CTH)GetProcAddress(a, “BlockInput”); Khóa b( 1 ); hoặc hủy bỏ b( 0 ); 2.5- Một số lệnh API khác 10 Ẩn/hiện taskbar HWND h1; h1 = FindWindow( "Shell_traywnd", 0); ShowWindow( h1, SW_HIDE); // or SW_SHOW Ẩn/hiện start button HWND h1,h2; h1 = FindWindow( "Shell_traywnd", 0); h2 = FindWindowEx( h1, 0, "Button", 0); ShowWindow( h2, SW_HIDE); // or SW_SHOW Ẩn/hiện desktop icon HWND h1; h1 = FindWindowEx( 0,0,“Progman", 0); ShowWindow( h1, SW_HIDE); // or SW_SHOW 2.5- Một số lệnh API khác
Ngày đăng: 13/05/2014, 11:39
Xem thêm: Chương 2 Lập trình với cửa sổ bằng API, Chương 2 Lập trình với cửa sổ bằng API, Chương 2: Lập trình với cửa sổ bằng API, 3- Vòng lặp TĐ & hàm cửa sổ