Tải bản đầy đủ (.ppt) (10 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (139.03 KB, 10 trang )

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

×