1. Trang chủ
  2. » Giáo án - Bài giảng

Chương 2 Lập trình với cửa sổ bằng API

10 402 2

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 10
Dung lượng 141 KB

Nội dung

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

TỪ KHÓA LIÊN QUAN

w