Bài 1:Gii thiu chung Trn Minh Thái
Lp trình trên Windows là lp trình trên cơ s thông đip, quá trình trao đổi
thông tin và điu khin da trên thông đip. Có rt nhiu thông đip được phát
sinh ngu nhiên như nhn phím hay chut, chn menu, ...
Tương tác ca ng dng vi người s dng thông qua mt hay nhiu ca s,
to lp các ca s khi cn thiết và qun lý thông tin trong đó.
8. Mt s quy ước đặt tên
a. Tên hng
Ch cái viết hoa, nên phân loi các hng theo nhóm. Thông thường gm có
2 phn: Phn đầu là loi nhóm và phn sau là tên hng. Loi nhóm và tên
hng cách nhau bng du gch ni.
Ví d: WM_DESTROY (Hng này được định nghĩa trong windows.h, WM
cho ta biết hng DESTROY thuc nhóm thông đip ca s Windows
Message)
b. Tên biến
Tên biến bt đầu bng ký t thường cho biết kiu d liu.
Ví d: iTong cho biết biến Tong có kiu int.
Các tin t thường dùng khác: c(char), l (long), p (poiter), d (WORD), dw
(DWORD), h (ch s).
9. Ví d
Xây dng chương trình hin th mt ca s như sau:
#include <windows.h>
Lap trinh C for Win
Vi du mo dau
1
2
3
LRESULT CALLBACK XulyMessage (HWND,UNIT,WPARAM,LPARAM);
char szAppName [ ] = “Vidu”;
Bài ging: Lp trình C for Win .............................................................................................Trang 11/69
Bài 1:Gii thiu chung Trn Minh Thái
int WINAPI WinMain (HANDLE hInst, HANDLE hPrevInst, 4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
LPSTR lpszCmdLine, int nCmdShow)
{
HWND hwnd; MSG msg;
WNDCLASSEX wndclass;
wndclass.cbSize = sizeof(wndclass);
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = XulyMessage;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInst;
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION);
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW);
wndclass.hbrBackground = GetStockObject (WHITE_BRUSH);
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = szAppName;
wndclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
RegisterClassEx(&wndclass);
hwnd = CreateWindow(szAppName,
“Vi du mo dau”,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
HWND_DESKTOP,
NULL,
hInst,
NULL);
ShowWindow (hwnd, nCmdShow);
UpdateWindow (hwnd);
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg);
DispatchMessage (&msg);
}
return msg.wParam;
}
LRESULT CALLBACK XulyMessage (HWND hwnd, UINT iMsg,
WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
RECT rect;
switch (iMsg)
{
case WM_PAINT:
hdc = BeginPaint (hwnd, &ps);
Bài ging: Lp trình C for Win .............................................................................................Trang 12/69
Bài 1:Gii thiu chung Trn Minh Thái
GetClientRect (hwnd, &rect); 50
51
52
53
54
55
56
57
58
59
60
61
62
DrawText (hdc, “Lap trinh C for Win”, -1, &rect,
DT_SINGLELINE | DT_CENTER | DT_VCENTER);
EndPaint (hwnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc (hwnd, iMsg, wParam, lParam);
}
return 0;
}
Ta s kho sát ví d trên để nm được nguyên lý hot động ca chúng. Trên
đây là đon chương trình đơn gin trên Windows, chương trình ch hin th 1
khung ca s và 1 dòng ch nhưng có rt nhiu lnh mà cú pháp rt khó nh.
Do vy, nguyên tc lp trình trên Windows ch yếu là sao chép và chnh sa
nhng nơi cn thiết da vào mt chương trình mu có sn.
a. Hàm WinMain() được thc hin đầu tiên hay còn gi là đim vào ca
chương trình.
Ta thy hàm này có 4 tham s:
o hInst, hPrevinst: Ch s chương trình khi chúng đang chy. Vì
Windows là h điu hành đa nhim, có th có nhiu bn ca cùng
mt chương trình cùng chy vào cùng mt thi đim nên phi qun
lý cht ch chúng. hInst là ch s bn chương trình va khi động,
hPrevinst là ch s ca bn đã được khi động trước đó và chúng
luôn có giá tr NULL.
o lpszCmdLine: cha địa ch đầu ca xâu ký t các đối s dòng lnh.
o nCmdShow: Cho biết cách thc hin th ca s khi chương trình
khi động. Windows có th gán giá tr SW_SHOWNORMAL hay
SW_SHOWMINNOACTIVE.
Các tham s trên do h điu hành truyn vào.
Định nghĩa lp ca sđăng ký vi Windows
o Lp ca s (window class):
Bài ging: Lp trình C for Win .............................................................................................Trang 13/69
Bài 1:Gii thiu chung Trn Minh Thái
Là mt tp các thuc tính mà HĐH Windows s dng làm khuôn
mu (template) khi to lp ca s.
Mi lp ca s được đặc trưng bng 1 tên (class-name) dng
chui.
Phân loi class:
- Lp ca s ca h thng (System class):
Được định nghĩa trước bi HĐH Windows.
Các ng dng không th hy b.
Class Description
Button The class for a button
ComboBox The class for a combo box
Edit The class for an edit control
ListBox The class for a list box
MDIClient The class for a MDI client
window
ScrollBar The class for a scroll bar
Static The class for a static control
- Lp ca s do ng dng định nghĩa:
Được đăng ký bi ng dng.
Có th hy b khi không còn s dng na.
Lp toàn cc ca ng dng (Application global class).
Lp cc b ca ng dng (Application local class).
- Mi ca s đều thuc mt lp xác định.
o Khi ln đầu chy, ng dng phi định nghĩa và đăng ký lp vi ca
s (Window Class). Đây là cu trúc d liu mô t tính cht ca ca
s, ln lượt ta gán các giá tr ban đầu cho các thành phn ca cu
trúc lp ca s, bao gm: Kích thước, kiu, địa ch hàm x lý thông
đip ca s, định nghĩa hình dng cho con tr chut (cursor) và biu
tượng (Icon), màu nn, tên lp ca s.
Macro Màu nn ca s
Bài ging: Lp trình C for Win .............................................................................................Trang 14/69
Bài 1:Gii thiu chung Trn Minh Thái
BLACK_BRUSH Đen
DKGRAY_BRUSH Xám đen
HOLLOW_BRUSH Không tô
LTGRAY_BRUSH Xám nht
WHITE_BRUSH Trng
struct WNDCLASSEX {
UINT cbSize;
UINT style;
WNDPROC lpfnWndProc;
int cbClsExtra;
int cbWndExtra;
HINSTANCE hInstance;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground;
LPCTSTR lpszMenuName;
LPCTSTR lpszClassName;
HICON hIconSm;
};
o Sau khi đã định nghĩa các thành phn lp ca s ta phi đăng ký lp
ca s vi h điu hành (RegisterClassEX).
ATOM RegisterClassEx (CONST WNDCLASSEX *lpWClass);
vi: Kiu giá tr ca ATOM được định nghĩa trong window.h là
WORD; lpWClass là con tr đến cu trúc lp ca s; hàm này tr v
ch s ca lp ca s.
o Có hai nguyên nhân dn đến vic đăng ký ca s tht bi:
Trùng tên gia các ng dng trong h điu hành.
Không đủ b nh.
To lp ca s làm vic (Frame Window)
Bài ging: Lp trình C for Win .............................................................................................Trang 15/69