Professional Documents
Culture Documents
Tran Minh Thai - Bai Giang VC PDF
Tran Minh Thai - Bai Giang VC PDF
Trang
Bi 1: GII THIU CHUNG .................................................................. 2
1. M u ......................................................................................................... 2
2. Cc th vin lp trnh ca Windows ............................................................. 3
3. Cc khi nim c bn ................................................................................... 4
4. Lp trnh s kin (Even driven programming)............................................... 5
5. Cc thnh phn giao din ha (GUI) ....................................................... 6
6. Cu trc chng trnh C for Win................................................................. 10
7. Qui trnh hot ng ca chng trnh ng dng ........................................ 10
8. Mt s quy c t tn............................................................................... 11
9. V d ........................................................................................................... 11
10. Ti nguyn ca ng dng (Resources) ................................................... 18
11. Mt s kiu d liu mi ........................................................................... 19
12. Phn tch, tm hiu source code ca project ........................................... 19
Bi 2: PAINT V REPAINT................................................................. 24
1. Gii thiu .................................................................................................... 24
2. Tng quan v GDI (Graphics Device Interface) .......................................... 25
3. Mt s hm ha c s ........................................................................... 28
4. Kt lun....................................................................................................... 30
Bi 3: CC THIT B NHP LIU ...................................................... 31
U
1. Bn phm .................................................................................................... 31
2. Thit b chut .............................................................................................. 38
3. Timer........................................................................................................... 41
Bi 4: HP THOI V IU KHIN ................................................... 45
1. Hp thoi..................................................................................................... 45
2. Menu ........................................................................................................... 57
Bi 5: X L VN BN ...................................................................... 62
1. Hin th vn bn .......................................................................................... 62
2. nh dng vn bn ...................................................................................... 64
3. S dng font ............................................................................................... 65
Ti liu tham kho ............................................................................... 69
Bi 1:Gii thiu chung Trn Minh Thi
1. M u
Cc ng dng ca Windows rt d s dng, nhng rt kh i vi ngi
to lp ra chng. t c tnh d dng i hi ngi lp trnh phi b
ra rt nhiu cng sc ci t.
Lp trnh trn Windows kh v phc tp hn nhiu so vi lp trnh trn
DOS. Tuy nhin lp trnh trn Windows s gii quyt c mt s vn
kh khn trong mi trng DOS nh xy dng giao din ngi dng, qun
l b nh o, c lp thit b vo ra, thm nhp Internet, kh nng chia s
ti nguyn, ...
Windows cung cp cc hm ngi lp trnh thm nhp cc c trng ca
h iu hnh gi l giao din lp trnh ng dng (Application Programming
Interface API). Nhng hm ny c t trong cc th vin lin kt ng
(Dynamic Link Library DLL). Cc chng trnh ng dng s dng chng
thng qua cc li gi hm v ch chia s c khi trong my c ci t
Windows.
Vi im khc bit gia lp trnh Windows v DOS:
Windows DOS
Lp trnh s kin, da vo thng ip
Thc hin tun t theo ch nh
(message)
Multi-tasking Single task
Multi-CPU Single CPU
Tch hp sn Multimedia Phi dng cc th vin Multimedia ring
H tr 32 bits hay hn na ng dng 16 bits
H tr nhiu cng ngh DLL, OLE,
Khng c
DDE, COM, OpenGL, DirectX,
3. Cc khi nim c bn
Message:
Trao i thng tin gia chng trnh ng dng v h iu hnh.
Th tc Window:
c gi bi h thng x l cc Message nhn c.
Hng i Message:
Mi chng trnh c 1 hng i Message cha cc Message. Mi
chng trnh c vng lp Message.
Handle:
Mt gi tr 32 bits khng du (unsigned) do HH to ra lm nh danh
cho mt i tng (ca s, file, vng nh, menu,).
ID (Identifier):
Mt gi tr nguyn do ng dng to ra lm nh danh cho 1 i tng
(menu item, control).
Instance:
Mt gi tr nguyn do HH to ra nh danh 1 th hin ang thc thi ca
ng dng.
Callback:
Thuc tnh ca 1 hm/ th tc s c gi bi HH, khng phi bi ng
dng.
Keyboard
Driver
USER.EXE
System
Queue
Mouse
Driver
System Application
Queue Queue
WindowProc()
DefWindowProc()
MSG msg;
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
Dialog:
9 Mt ca s lm vic.
9 Thng c kch thc c nh.
9 Thng khng c menu bar.
9 Thng c cc button, edit box, list-box,
9 V d: Calculator, CD Player,
Ca s:
9 nh ngha:
L 1 vng ch nht trn mn hnh.
Dng hin th kt qu output.
V nhn cc input t ngi dng
9 Cng vic u tin ca 1 ng dng GUI l to 1 ca s lm vic.
9 Nguyn tc qun l:
M hnh phn cp: mi ca s u c 1 ca s cha (parent
window), ngoi tr ca s nn Desktop.
Ti mi thi im, ch c 1 ca s nhn input t user
(Active/Focused window).
9 Phn loi:
Ca s Desktop.
Ca s tiu chun.
Ca s hp thoi (Dialog box).
Cc control.
Desktop
Window
App
Window
Parent
Control Window
Child
Dialog Window
box
menu bar
Client area
status bar
Resized
border
Compiler
Resource
Compiler
*.OBJ file
Definition file
(*.DEF)
Window Application
Linker (*.EXE, *.DLL)
Library file
(*.LIB)
8. Mt s quy c t tn
a. Tn hng
Ch ci vit hoa, nn phn loi cc hng theo nhm. Thng thng gm c
2 phn: Phn u l loi nhm v phn sau l tn hng. Loi nhm v tn
hng cch nhau bng du gch ni.
V d: WM_DESTROY (Hng ny c nh ngha trong windows.h, WM
cho ta bit hng DESTROY thuc nhm thng ip ca s Windows
Message)
b. Tn bin
Tn bin bt u bng k t thng cho bit kiu d liu.
V d: iTong cho bit bin Tong c kiu int.
Cc tin t thng dng khc: c(char), l (long), p (poiter), d (WORD), dw
(DWORD), h (ch s).
9. V d
Xy dng chng trnh hin th mt ca s nh sau:
Vi du mo dau
1 #include <windows.h>
2 LRESULT CALLBACK XulyMessage (HWND,UNIT,WPARAM,LPARAM);
3 char szAppName [ ] = Vidu;
BLACK_BRUSH en
DKGRAY_BRUSH Xm en
HOLLOW_BRUSH Khng t
LTGRAY_BRUSH Xm 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 ngha cc thnh phn lp ca s ta phi ng k lp
ca s vi h iu hnh (RegisterClassEX).
ATOM RegisterClassEx (CONST WNDCLASSEX *lpWClass);
vi: Kiu gi tr ca ATOM c nh ngha trong window.h l
WORD; lpWClass l con tr n cu trc lp ca s; hm ny tr v
ch s ca lp ca s.
o C hai nguyn nhn dn n vic ng k ca s tht bi:
Trng tn gia cc ng dng trong h iu hnh.
Khng b nh.
To lp ca s lm vic (Frame Window)
54 wcex.lpfnWndProc = (WNDPROC)WndProc;
55 wcex.cbClsExtra = 0;
56 wcex.cbWndExtra = 0;
57 wcex.hInstance = hInstance;
58 wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_BT1);
59 wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
60 wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
61 wcex.lpszMenuName = (LPCSTR)IDC_BT1;
62 wcex.lpszClassName = szWindowClass;
63 wcex.hIconSm = LoadIcon(wcex.hInstance,(LPCTSTR)IDI_SMALL);
64 return RegisterClassEx(&wcex);
65 }
66 // FUNCTION: InitInstance(HANDLE, int)
67 // PURPOSE: Saves instance handle and creates main window
68 // COMMENTS:
69 // In this function, we save the instance handle in a global variable and
70 // create and display the main program window.
71 BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
72 {
73 HWND hWnd;
74 hInst = hInstance; // Store instance handle in our global variable
75 hWnd = CreateWindow(szWindowClass,
76 szTitle,
77 WS_OVERLAPPEDWINDOW,
78 CW_USEDEFAULT,
79 0,
80 CW_USEDEFAULT,
81 0,
82 NULL,
83 NULL,
84 hInstance,
85 NULL);
86 if (!hWnd)
87 {
88 return FALSE;
89 }
90 ShowWindow(hWnd, nCmdShow);
91 UpdateWindow(hWnd);
92 return TRUE;
93 }
94 // FUNCTION: WndProc(HWND, unsigned, WORD, LONG)
95 // PURPOSE: Processes messages for the main window.
96 // WM_COMMAND - process the application menu
97 // WM_PAINT - Paint the main window
98 // WM_DESTROY - post a quit message and return
Bi 2: PAINT V REPAINT
Phn b thi lng:
- S tit ging lp: 6 tit
- S tit t hc nh: 6 tit
- S tit ci t chng trnh nh: 12 tit
1. Gii thiu
Windows khng gi li nhng g chng hin th trn vng lm vic ca ca s,
cho nn chng trnh ng dng phi hin th ni dung ca s khi cn thit. V li
ni dung ca s khi:
Dng hm ScrollWindow: D liu hin th thay i cp nht li.
Hm InvalidateRect: Lm bt hp l 1 phn hay ton b vng lm vic.
Menu chng trnh bt xung lm che khut mt phn ca s.
Di chuyn chut, di chuyn icon.
Vng hnh ch nht hp l v bt hp l thng qua li gi hm
BOOL InvalidateRect(HWND hwnd, CONST RECT *lpRect, BOOL bErase);
vi: bErase = TRUE th t li nn, FALSE th gi nguyn.
Hm BeginPaint() s lm hp l li vng bt hp l.
Trong ca s cha PAINTSTRUCT, mc ch l s t hp li 2 hay nhiu
vng bt hp l chng ln nhau.
typedef struct tagPAINTSTRUCT
{
HDC hdc;
BOOL fErase;
RECT rcPaint;
BOOL fRestore;
BOOL flncUpdate;
BYTE rgReserved[32];
}PAINTSTRUCT;
TRUE: xo vng hnh ch nht bt hp l.
Vi: fErase = FALSE: Khng xo m ghi chng ln.
typedef tagRECT
{
LONG left, top;
LONG right, bottom;
}RECT;
3. Mt s hm ha c s
a) Nhm hm v
COLORREF GetPixel(HDC hDC, int nXPos, int nYPos);
Ly v gi tr mu ti v tr (nXPos, nYPos) ca hDC, tr v -1 nu im
ny nm ngoi vng hin th.
COLORREF SetPixel(HDC hDC, int nXPos, int nYPos,
COLORREF clrRef);
V mt im mu clrRef ti v tr (nXPos, nYPos) ln hDC. Gi tr tr
v l mu ca im (nXPos, nYPos) hoc -1 nu im ny nm ngoi
vng hin th.
DWORD MoveToEx(HDC hDC, int x, int y);
Di chuyn bt v n ta (x, y) trn hDC. Gi tr tr v l ta c
ca bt v, x = LOWORD, y = HIWORD.
BOOL LineTo(HDC hDC, int xEnd, int yEnd);
V on thng t v tr hin hnh n v tr (xEnd, yEnd) trn hDC.
Hm tr v TRUE nu thnh cng, FALSE nu tht bi.
BOOL Polyline(HDC hDC, const POINT FAR *lpPoints, int
nPoints);
V ng gp khc ln hDC bng cc on thng lin tip, s nh l
nPoints vi ta cc nh c xc nh trong lpPoints. Hm tr v
TRUE nu thnh cng, FALSE nu tht bi.
BOOL Polygon(HDC hDC, const POINT FAR *lpPoints, int
nPoints);
V a gic c nPoints nh, ta cc nh c xc nh bi lpPoints.
Hm tr v TRUE nu thnh cng, FALSE nu tht bi.
BOOL Rectangle(HDC hDC, int left, int top, int right, int bottom);
V hnh ch nht c ta l left, top, right, bottom ln hDC.
HPEN CreatePen(int penStyle, int penWidth, COLORREF
penColor);
To bt v c kiu penStyle, dy nt v l penWidth, mu penColor.
Hm tr v handle ca bt v nu thnh cng v tr v NULL nu tht
bi. Cc gi tr ca penStyle nh sau :
Gi tr Gii thch
PS_SOLID
PS_DASH
PS_DOT
PS_DASHDOT
PS_DASHDOTDOT
PS_INSIDEFRAME
Cc kiu bt v penStyle
V d : To bt v mi v dng bt v ny v mt s ng c s.
HDC hDC;
POINT PointArr[3];
HPEN hPen, hOldPen;
hDC = GetDC(hWnd);
PointArr[0].x = 50;
PointArr[0].y = 10;
PointArr[1].x = 250;
PointArr[1].y = 50;
PointArr[2].x = 125;
PointArr[2].y = 130;
Polyline(hDC, PointArr, 3);
hPen = (HPEN)CreatePen(PS_SOLID, 1, RGB(0, 0, 255));
hOldPen = SelectObject(hDC, hPen);
MoveToEx(hDC, 100, 100, NULL);
LineTo(hDC, 200, 150);
SelectObject(hDC, hOldPen);
DeleteObject(hPen);
ReleaseDC(hWnd, hDC);
b) Nhm hm min
HBRUSH CreateSolidBrush(COLORREF cRef);
To mu t c vi mu cRef.
4. Kt lun
WM_PAINT l message c u tin thp. Khi WM_PAINT trong hng ch v
c mt s Window Message khc th Windows x l WM khc ri mi x l
WM_PAINT.
1. Bn phm
a. Chng trnh iu khin bn phm (Keyboard.drv)
Windows c np Keyboard.drv khi khi ng v x l phm. Sau
keyboard.drv chuyn cho USER bin phm nhn thnh message v a
vo hng i (Hng i h thng v hng i chng trnh).
b. Ca s c focus
Khi ca s c focus th pht sinh thng ip WM_SETFOCUS.
Ngc li pht sinh WM_KILLFOCUS.
c. Thng ip phm
MSG msg;
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
Thng ip Nguyn nhn pht sinh
2. Thit b chut
a. Kim tra thit b chut
int GetSystemMetrics(
Nt Nhn Th Nhn p
46 pen = CreatePen (
47 PS_SOLID,WIDTH_PEN,Col [ iC ] );
48 oPen = ( HPEN ) SelectObject ( hdc, pen );
49 point.x = LOWORD ( lParam );
50 point.y = HIWORD ( lParam );
51 MoveToEx ( hdc, oldPoint.x, oldPoint.y,
52 NULL );
53 LineTo ( hdc, point.x, point.y );
54 oldPoint = point;
55 SelectObject ( hdc, oPen );
56 DeleteObject ( pen );
57 ReleaseDC ( hWnd, hdc );
58 }
59 break;
60 case WM_DESTROY:
61 PostQuitMessage ( 0 );
62 break;
63 default:
64 return DefWindowProc ( hWnd, message, wParam,
65 lParam );
66 }
67 return 0;
68 }
3. Timer
a. Khi to
UINT_PTR SetTimer( HWND hWnd, UINT_PTR nIDEvent, UINT
uElapse, TIMERPROC lpTimerFunc );
hWnd : nh danh ca ca s khai bo dng b nh thi gian.
nIDEvent : nh danh ca b nh thi gian.
nElapse : L khong thi gian ngh gia hai ln gi thng ip
lpTimerFunc : Hm s x l khi thng ip WM_TIMER pht
sinh, nu chng ta khai bo l NULL th Windows s gi thng
ip WM_TIMER vo hng i thng ip ca ca s tng ng.
b. Hy
BOOL KillTimer( HWND hWnd, UINT_PTR uIDEvent );
hWnd : nh danh ca ca s dng b nh thi gian
uIDEvent : nh danh ca b nh thi gian.
c. V d 1
1 #include <time.h>
2 #include "stdio.h"
3 #define MAX_POINT 10000
4 #define IDT_TIMER1 1
5 LRESULT CALLBACK WndProc(HWND hWnd, UINT message,
6 WPARAM wParam, LPARAM lParam)
7 {
8 PAINTSTRUCT ps;
9 HDC hdc;
10 static int NumCir = 0;
11 static POINT point [ MAX_POINT ];
12 int r = 5, i;
13 HPEN pen, oldPen;
14 RECT rc;
15 TCHAR str [255];
16 /* X l thng ip*/
17 switch ( message )
18 {
19 case WM_CREATE:
20 SetTimer(hWnd, IDT_TIMER1, 500,
21 (TIMERPROC) NULL);
22 srand ( (unsigned) time( NULL ) );
23 break;
24 case WM_PAINT:
25 hdc = BeginPaint ( hWnd, &ps );
26 pen = CreatePen ( PS_SOLID, 2, RGB (255,0,0) );
27 oldPen = (HPEN) SelectObject ( hdc, pen );
28 for( i=0; i < NumCir; i++ )
29 Arc ( hdc, point[i].x-r, point[i].y-r,
30 point[i].x+r, point[i].y+r, point[i].x+r,
31 point[i].y,point[i].x+r,point[i].y);
32 SelectObject ( hdc, oldPen );
33 DeleteObject ( pen );
34 EndPaint ( hWnd, &ps );
35 break;
36 case WM_TIMER:
37 GetClientRect ( hWnd, &rc );
38 point [NumCir].x = rand( ) % (rc.right - rc.left);
39 point [NumCir].y = rand( ) % (rc.bottom - rc.top);
40 NumCir++;
41 sprintf ( str,"So vong tron : %d", NumCir);
42 SetWindowText ( hWnd, str );
43 InvalidateRect ( hWnd, &rc, FALSE);
44 break;
45 case WM_DESTROY:
46 KillTimer ( hWnd, IDT_TIMER1 );
47 PostQuitMessage ( 0 );
48 break;
49 default:
50 return DefWindowProc ( hWnd, message, wParam,
51 lParam );
52 }
53 return 0;
54 }
d. V d 2
1 #include <time.h>
2 #include "stdio.h"
3 #define IDT_TIMER1 1
4 LRESULT CALLBACK WndProc(HWND hWnd, UINT message,
5 WPARAM wParam, LPARAM lParam)
6 {
7 PAINTSTRUCT ps;
8 HDC hdc;
9 /* Khai bo bin lu cc gi tr khng gian*/
10 struct tm *newtime;
11 time_t CurTime;
12 TCHAR str [255];
13 RECT rc;
14 /* Bin LOGFONT to font mi*/
15 LOGFONT lf;
16 HFONT oldFont, font;
17 COLORREF color = RGB (255, 0, 0), oldColor;
18 switch ( message )
19 {
20 case WM_CREATE:
21 /* khi to b nh thi gian, v khai bo hm x l Timer*/
22 SetTimer ( hWnd, IDT_TIMER1, 1000, ( TIMERPROC )
23 TimerProc );
24 break;
25 case WM_PAINT:
26 hdc = BeginPaint ( hWnd, &ps );
27 time( &CurTime );
28 newtime = localtime ( &CurTime );
29 GetClientRect ( hWnd, &rc );
30 sprintf(str,"Gio hien tai : %d gio: %d phut: %d giay",
31 newtime->tm_hour,newtime->tm_min, newtime-
32 >tm_sec);
33 oldColor = SetTextColor ( hdc, color );
34 memset ( &lf, 0, sizeof ( LOGFONT ) );
35 lf.lfHeight = 50;
36 strcpy ( lf.lfFaceName, "Tahoma" );
Bi 4: HP THOI V IU KHIN
Phn b thi lng:
- S tit ging lp: 12 tit
- S tit t hc nh: 12 tit
- S tit ci t chng trnh nh: 24 tit
1. Hp thoi
Hp thoi phi hp gia ngi s dng vi chng trnh bng mt s phn
t iu khin m cc phn t ny nhn nhim v thu nhn thng tin t
ngi dng v cung cp thng tin n ngi dng khi ngi dng tc ng
n cc phn t iu khin. Cc phn t iu khin ny nhn ca s cha l
mt hp thoi. Cc phn t iu khin thng l cc Button, List Box,
Combo Box, Check Box, Radio Button, Edit Box, Scroll Bar, Static.
Hp thoi trng thi (modal).
Hp thoi khng trng thi (modeless).
Hp thoi thng dng (common dialog)
a) Thit k hp thai
V d:
WS_STABSTOP
41 return TRUE ;
42 }
43 break ;
44 }
45 return FALSE ;
46 }
c) Hp thoi trng thi
Hin th hp thoi
INT_PTR DialogBox(
HINSTANCE hInstance, // handle to module
LPCTSTR lpTemplate, // dialog box template
HWND hWndParent, // handle to owner window
DLGPROC lpDialogFunc // dialog box procedure
);
V d:
DialogBox (hInstance, TEXT ("DIALOG1"), hwnd, DialogProc) ;
Gi thng ip n hm WndProc yu cu x l ngay c khi hp
thoi ang m nh hm SendMessage:
SendMessage(GetParent(hDlg), message, wParam, lParam);
Thm tiu cho hp thoi:
SetWindowText(hDlg,TEXT("Hello Dialog")); trong x l
thng ip WM_INITDIALOG
ng hp thoi
BOOL EndDialog(
HWND hDlg, // handle to dialog box
INT_PTR nResult // value to return
);
V d
92 CheckRadioButton(hDlg,IDC_RECT,IDC_ELLIPSE,iFig
93 ure);CheckRadioButton (hDlg, IDC_HS_BDIAGONAL,
94 IDC_HS_VERTICAL, iBrush);
95 hCtrlBlock = GetDlgItem (hDlg, IDC_PAINT) ;
96 SetFocus (GetDlgItem (hDlg, iColor)) ;
97 return FALSE ;
98 case WM_COMMAND:
99 switch (LOWORD (wParam))
100 {
101 case IDOK:
102 iCurrentColor = iColor ;
103 iCurrentFigure = iFigure ;
104 iCurrenBrush = iBrush;
105 EndDialog (hDlg, TRUE) ;
106 return TRUE ;
107 case IDCANCEL:
108 EndDialog (hDlg, FALSE) ;
109 return TRUE ;
110 case IDC_BLACK:
111 case IDC_RED:
112 case IDC_GREEN:
113 case IDC_YELLOW:
114 case IDC_BLUE:
115 case IDC_MAGENTA:
116 case IDC_CYAN:
117 case IDC_WHITE:
118 iColor = LOWORD (wParam) ;
119 CheckRadioButton (hDlg, IDC_BLACK,
120 IDC_WHITE, LOWORD (wParam)) ;
121 PaintTheBlock (hCtrlBlock, iColor,
122 iFigure,iBrush);
123 return TRUE ;
124 case IDC_RECT:
125 case IDC_ELLIPSE:
126 iFigure = LOWORD (wParam) ;
127 CheckRadioButton (hDlg, IDC_RECT,
128 IDC_ELLIPSE, LOWORD (wParam)) ;
129 PaintTheBlock (hCtrlBlock, iColor,
130 iFigure,iBrush);
131 return TRUE ;
132 case IDC_HS_BDIAGONAL:
133 case IDC_HS_CROSS:
134 case IDC_HS_DIAGCROSS:
135 case IDC_HS_FDIAGONAL:
136 case IDC_HS_HORIZONTAL:
137 case IDC_HS_VERTICAL:
BOOL DestroyWindow(
HWND hWnd // handle to window to destroy
);
V d
29 DeleteObject((HGDIOBJ)SetClassLong(hw
30 nd, GCL_HBRBACKGROUND,(LONG)
31 GetStockObject (WHITE_BRUSH))) ;
32 PostQuitMessage (0) ;
33 return 0 ;
34 }
35 return DefWindowProc (hwnd, message, wParam,
36 lParam);
37 }
38 void PaintTheBlock (HWND hCtrl, int iColor[], int iFigure)
39 {
40 InvalidateRect (hCtrl, NULL, TRUE);
41 UpdateWindow (hCtrl) ;
42 PaintWindow (hCtrl, iColor, iFigure) ;
43 }
44 BOOL CALLBACK ColorScrDlg (HWND hDlg, UINT
45 message, WPARAM wParam, LPARAM lParam)
46 {
47 HWND hwndParent, hCtrl ;
48 static HWND hCtrlBlock ;
49 int iCtrlID, iIndex ;
50 switch (message)
51 {
52 case WM_INITDIALOG :
53 hCtrlBlock = GetDlgItem (hDlg,
54 IDC_PAINT) ;
55 for (iCtrlID = 10 ; iCtrlID < 13 ; iCtrlID++)
56 {
57 hCtrl = GetDlgItem (hDlg, iCtrlID) ;
58 PaintTheBlock (hCtrlBlock, iColor,
59 iFigure) ;
60 PaintTheBlock (hwndParent, iColor,
61 iFigure) ;
62 SetScrollRange (hCtrl, SB_CTL, 0,
63 255, FALSE) ;
64 SetScrollPos(hCtrl, SB_CTL, 0,
65 FALSE) ;
66 }
67 return TRUE ;
68 case WM_COMMAND:
69 {
70 switch( LOWORD(wParam))
71 {
72 case IDC_RECT:
73 case IDC_ELLIPSE:
74 iFigure = LOWORD(wParam);
75 hwndParent =
76 GetParent(hDlg);
77 CheckRadioButton(hDlg,
78 IDC_RECT, IDC_ELLIPSE,
79 LOWORD (wParam)) ;
80 PaintTheBlock(hCtrlBlock,
81 iColor, iFigure) ;
82 PaintTheBlock (hwndParent,
83 iColor, iFigure) ;
84 return TRUE ;
85 }
86 break;
87 }
88 case WM_VSCROLL :
89 hCtrl = (HWND) lParam ;
90 iCtrlID = GetWindowLong (hCtrl,
91 GWL_ID) ;
92 iIndex = iCtrlID - 10 ;
93 hwndParent = GetParent (hDlg) ;
94 PaintTheBlock (hCtrlBlock, iColor, iFigure);
95 PaintTheBlock (hwndParent, iColor,
96 iFigure) ;
97 switch (LOWORD (wParam))
98 {
99 case SB_PAGEDOWN :
100 iColor[iIndex] += 15 ;
101 case SB_LINEDOWN :
102 iColor[iIndex] = min (255,
103 iColor[iIndex] + 1) ;
104 break;
105 case SB_PAGEUP :
106 iColor[iIndex] -= 15 ;
107 case SB_LINEUP :
108 iColor[iIndex] = max (0,
109 iColor[iIndex] - 1);
110 break;
111 case SB_TOP :
112 iColor[iIndex] = 0 ;
113 break;
114 case SB_BOTTOM :
115 iColor[iIndex] = 255 ;
116 break;
117 case SB_THUMBPOSITION :
118 case SB_THUMBTRACK :
119 iColor[iIndex] = HIWORD
120 (wParam) ;
121 break;
122 default :
123 return FALSE ;
124 }
125 SetScrollPos(hCtrl, SB_CTL, iColor[iIndex],
126 TRUE) ;
127 SetDlgItemInt (hDlg, iCtrlID + 3, iColor[iIndex],
128 FALSE) ;
129 InvalidateRect(hwndParent,NULL,TRUE);
130 DeleteObject ( (HGDIOBJ)SetClassLong(
131 hwndParent, GCL_HBRBACKGROUND, (LONG)
132 CreateSolidBrush( RGB(iColor[0], iColor[1],
133 iColor[2]) ) ) ) ;
134 return TRUE ;
135 case WM_PAINT:
136 PaintTheBlock(hCtrlBlock, iColor, iFigure) ;
137 break;
138 }
139 return FALSE ;
2. Menu
a) To Menu
MENUDEMO MENU DISCARDABLE
BEGIN
POPUP "&File"
BEGIN
MENUITEM "&New", IDM_FILE_NEW
MENUITEM "&Open", IDM_FILE_OPEN
MENUITEM "&Save", IDM_FILE_SAVE
MENUITEM "Save &As...", IDM_FILE_SAVE_AS
MENUITEM SEPARATOR
MENUITEM "E&xit", IDM_APP_EXIT
END
POPUP "&Edit"
BEGIN
MENUITEM "&Undo", IDM_EDIT_UNDO
MENUITEM SEPARATOR
MENUITEM "C&ut", IDM_EDIT_CUT
MENUITEM "&Copy", IDM_EDIT_COPY
MENUITEM "&Paste", IDM_EDIT_PASTE
MENUITEM "De&lete", IDM_EDIT_CLEAR
END
POPUP "&Background"
BEGIN
63 case IDM_APP_EXIT:
64 /*Gi thng ip ng ng dng li*/
65 SendMessage (hwnd, WM_CLOSE, 0, 0) ;
66 return 0 ;
67 case IDM_EDIT_UNDO:
68 case IDM_EDIT_CUT:
69 case IDM_EDIT_COPY:
70 case IDM_EDIT_PASTE:
71 case IDM_EDIT_CLEAR:
72 MessageBeep (0) ;
73 return 0 ;
74 case IDM_BKGND_WHITE:
75 case IDM_BKGND_LTGRAY:
76 case IDM_BKGND_GRAY:
77 case IDM_BKGND_DKGRAY:
78 case IDM_BKGND_BLACK:
79 /* B check ca mc chn trc */
80 CheckMenuItem(hMenu,iSelection,
81 MF_UNCHECKED);
82 iSelection = LOWORD (wParam) ; /*Ly ID
83 mc mi*/
84 /* Check mc chn mi*/
85 CheckMenuItem (hMenu, iSelection,
86 MF_CHECKED) ;
87 /* Thit lp mu tng ng vi mc chn
88 mi*/
89 SetClassLong(hwnd,GCL_HBRBACKGRO
90 UND, (LONG)
91 GetStockObject(idColor[iSelection-
92 IDM_BKGND_WHITE]));
93 InvalidateRect (hwnd, NULL, TRUE) ;
94 return 0 ;
95 case IDM_APP_HELP:
96 MessageBox(hwnd, TEXT("Help not yet
97 implemented!"), szAppName,
98 MB_ICONEXCLAMATION | MB_OK) ;
99 return 0 ;
100 case IDM_APP_ABOUT:
101 MessageBox (hwnd, TEXT ("Menu
102 Demonstration Program\n (c) Charles
103 Petzold, 1998"), szAppName,
104 MB_ICONINFORMATION | MB_OK) ;
105 return 0 ;
106 }
107 break;
108 case WM_DESTROY:
109 PostQuitMessage(0) ;
110 return 0 ;
111 }
112 return DefWindowProc(hwnd, message, wParam, lParam) ;
113 }
1. Hin th vn bn
2. nh dng vn bn
a) Hm thit lp mu ch v mu nn:
COLORREF SetTextColor (HDC hdc, COLORREF color);
COLORREF SetBkColor (HDC hdc, COLORREF color);
Tr v gi tr mu trc .
Nu c li tr v CLR_INVALID.
int SetBkMode (HDC hdc, int mode) ;
Tr v ch nn trc .
Tr v 0 nu gp li.
mode = OPAQUE : Mi khi hin th vn bn th mu nn c thay
i thnh mu nn hin hnh. Hoc TRANSPARENT: Mu nn
khng b nh hng SetBkColor() b v hiu.
b) Xc nh mu ch v mu nn hin hnh:
COLORREF GetTextColor(HDC hDC);
COLORREF GetBkColor(HDC hDC);
c) Xc nh ch nn hin ti:
int GetBkMode(HDC hDC);
Hm tr v gi tr TRANSPARENT hoc OPAQUE, nu thnh cng.
Ngc li, gi tr tr v l zero.
d) xc lp v tr chui vn bn hin th da trn im gc nXStart,
nYStart:
3. S dng font
Lp ch s font ch.
Np font ch.
Gn ch s font ch cho ng cnh thit b.
i vi Font ch mc nh (h thng):S dng cc font ch Windows
ang s dng.
MACRO FONT
len: Tng s k t.
To lp c tnh mi cho font ch
HFONT CreateFont (int Height, int Width, int Escapement, int Orientation,
int fnWeight, DWORD Italic, DWORD Underline, DWORD StrikeOut,
DWORD CharSet, DWORD outputPrecision, DWORD ClipPrecision,
DWORD Quality, DWORD PitchAndFamily, LPCSTR lpszFontName)
Vi:
Tn Gi tr Tn Gi tr
FW_MEDIUM 500
Macro xc nh m nht lfWeight