PDA

View Full Version : chuyển giúp tôi cái hàm cửa sổ của Windows sang VB với...



tuananhdhhhvn
29-07-2004, 07:23
Đầu tiên, việc xây dựng một ứng dụng Windows là phải định nghĩa một lớp cửa sổ cho ứng dụng. Windows cung cấp một cấu trúc WNDCLASS gọi là lớp cửa sổ, lớp này chứa những thuộc tính tạo thành một cửa sổ.
typedef struct_WNDCLASS
{ UNIT style; WNDPROC lpfnWndProc;
int cbCl***tra;
HINSTANCE hInstance;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground; LPCSTR lpszMenuName;
LPCSTR lpszClassName;
} WNDCLASS, *PWNDCLASS;
(Ý nghĩa thuộc tính của cấu trúc WNDCLASS sẽ được mô tả trong bảng dưới)

Thuộc tính Ý nghĩa Ghi chú
Style Kiểu lớp Kết hợp nhiều kiểu giá trị khác nhau bằng boán tử OR
lpfnWndProc Con trỏ đến thủ tục Windows
cbCl***tra Số byte được cấp phát thêm sau cấu trúc windows-class Mặc định
cbWndExtra Số byte được cấp phát thêm sau một instance của windows Mặc định
hInstance Định danh chứa thủ tục cửa sổ của lớp Windows
hIcon Định danh của biểu tượng Dùng hàm LoadIcon
hCursor Định danh con trỏ chuột Dùng hàm LoadCursor
hbrBackground Định danh của chổi tô nền Dạng hàm GetStockObject
lpszMenuName Tên thực đơn Tên thực đơn gắn với cửa sổ, thực đơn này được khai báo trong tập tin tài nguyên.
lpszClassName Tên lớp
================================================== =


Hiển thị cửa sổ :
Sau khi gọi hàm CreateWindow, một cửa sổ được tạo ra bên trong Windows, điều này có ý nghĩa là Windows đã cấp phát một vùng nhớ để lưu giữa tất cả các thông tin về cửa sổ đã được chỉ định trong hàm CreateWindow. Những thông số này sẽ được Windows tìm lại khi cần thiết dựa vào định danh mà hàm tạo cửa sổ trả về. Tuy nhiên, lúc này cửa sổ chưa xuất hiện trên màn hình Windows, để xuất hiện cần phải gọi hàm ShowWindow.
Hàm ShowWindow có khai báo như sau :
BOOL ShowWindow(
HWND hWnd, // Định danh của cửa sổ cần thể hiện
int nCmdShow // Trạng thái hiển thị
);
Một số trạng thái của tham số nCmdShow :
• SW_HIDE : Ẩn cửa sổ.
• SW_MAXIMIZE : Phóng to cửa sổ ra toàn bộ màn hình
• SW_MINIMIZE : Thu nhỏ thành biểu tượng trên màn hình
• SW_RESTORE : Hiển thị dưới dạng chuẩn.
3. Hàm xử lý cửa sổ WndProc :
Một chương trình Windows có thể chứa nhiều hơn một hàm xử lý cửa sổ. Một hàm xử lý cửa sổ luôn kết hợp với một cửa sổ đặc thù. Hàm xử lý cửa sổ thường được đặt trên WndProc.
Hàm WndProc có chức năng giao tiếp với bên ngoài, tức là với Windows, toàn bộ các thông điệp gửi đến cửa sổ đều được xử lý qua hàm này.
Hàm này thường được khai báo như sau :
LRESULT CALLBACK WndProc (HWND, UNIT, WPARAM, LPARAM);
Trong đó tham số đầu tiên là định danh của cửa sổ, tham số thứ 2 là định danh thông điệp, và cuối cùng là 2 tham số WPARAM và LPARAM bổ sung thông tin kèm theo thông điệp.
Chúng ta sẽ tìm hiểu một hàm xử lý cửa sổ WndProc sau :
LRESULT CALLBACK WndProc (HWND hwnd, UNIT msg, WPARAM wParam, LPARAM lPram)
{
HDC hdc; PAINTSTRUCT ps; RECT rect;
/*Xử lý các thông điệp cần thiết với ứng dụng*/
switch (msg)
{
case WM_CREATE:
/* Viết đoạn mã khi tạo cửa sổ*/
return (); case WM_PAINT:
/*Viết đoạn mã khi tô vẽ lại cửa sổ*/
hdc = BeginPaint (hwnd, &ps);
GetClientRect (hwnd, &rect);
DrawText(hdc, "Hello", -1, &rect, DT_SINGLELINE DT_VCENTER);
EndPaint (hwnd, &ps); return (); case WM_SIZE:
/* Viết đoạn mã khi kích thước cửa sổ thay đổi */
return (); case WM_DESTROY:
/* Cửa sổ bị đóng */
PostQuitMessage (0);
return ();
}
return DefWindowProc (hwnd, msg, wParam, lParam);
}
Thông thường chúng ta chỉ chặn để xử lý các thông điệp cần thiết có liên quan đến chức năng của ứng dụng. Các thông điệp khác thì giao cho hàm xử lý mặc định làm việc (hàm DefWindowProc).