Tải bản đầy đủ (.pdf) (5 trang)

Giáo trình lập trình C cho Winform- P11

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 (255.76 KB, 5 trang )

Bài 4: Hộp thọai và điều khiển

47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75


76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91

Trần Minh Thái

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM
wParam, LPARAM lParam)
{
static HINSTANCE hInstance ;
PAINTSTRUCT ps ;
switch (message)
{
case WM_CREATE:
hInstance = ((LPCREATESTRUCT) lParam)->hInstance ;
return 0 ;
case WM_COMMAND:

switch (LOWORD (wParam))
{
case IDC_SHOW:
if (DialogBox (hInstance, TEXT ("DIALOG"),
hwnd, DialogProc))
InvalidateRect (hwnd, NULL, TRUE) ;
return 0 ;
}
break;
case WM_PAINT:
BeginPaint (hwnd, &ps) ;
EndPaint (hwnd, &ps) ;
PaintWindow (hwnd, iCurrentColor, iCurrentFigure,
iCurrenBrush) ;
return 0 ;
case WM_DESTROY:
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}
BOOL CALLBACK DialogProc (HWND hDlg, UINT message, WPARAM
wParam, LPARAM lParam)
{
static HWND hCtrlBlock ;
static int iColor, iFigure,iBrush;
switch (message)
{
case WM_INITDIALOG:
iColor = iCurrentColor ;

iFigure = iCurrentFigure ;
iBrush = iCurrenBrush;
CheckRadioButton(hDlg,IDC_BLACK,IDC_WHITE,
iColor);

Bài giảng: Lập trình C for Win .............................................................................................Trang 51/69


Bài 4: Hộp thọai và điều khiển

92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111

112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137

Trần Minh Thái

CheckRadioButton(hDlg,IDC_RECT,IDC_ELLIPSE,iFig

ure);CheckRadioButton (hDlg, IDC_HS_BDIAGONAL,
IDC_HS_VERTICAL, iBrush);
hCtrlBlock = GetDlgItem (hDlg, IDC_PAINT) ;
SetFocus (GetDlgItem (hDlg, iColor)) ;
return FALSE ;
case WM_COMMAND:
switch (LOWORD (wParam))
{
case IDOK:
iCurrentColor = iColor ;
iCurrentFigure = iFigure ;
iCurrenBrush = iBrush;
EndDialog (hDlg, TRUE) ;
return TRUE ;
case IDCANCEL:
EndDialog (hDlg, FALSE) ;
return TRUE ;
case IDC_BLACK:
case IDC_RED:
case IDC_GREEN:
case IDC_YELLOW:
case IDC_BLUE:
case IDC_MAGENTA:
case IDC_CYAN:
case IDC_WHITE:
iColor = LOWORD (wParam) ;
CheckRadioButton (hDlg, IDC_BLACK,
IDC_WHITE, LOWORD (wParam)) ;
PaintTheBlock (hCtrlBlock, iColor,
iFigure,iBrush);

return TRUE ;
case IDC_RECT:
case IDC_ELLIPSE:
iFigure = LOWORD (wParam) ;
CheckRadioButton (hDlg, IDC_RECT,
IDC_ELLIPSE, LOWORD (wParam)) ;
PaintTheBlock (hCtrlBlock, iColor,
iFigure,iBrush);
return TRUE ;
case IDC_HS_BDIAGONAL:
case IDC_HS_CROSS:
case IDC_HS_DIAGCROSS:
case IDC_HS_FDIAGONAL:
case IDC_HS_HORIZONTAL:
case IDC_HS_VERTICAL:

Bài giảng: Lập trình C for Win .............................................................................................Trang 52/69


Bài 4: Hộp thọai và điều khiển

138
139
140
141
142
143
144
145
146

147
148
149
150
151

Trần Minh Thái

iBrush = LOWORD (wParam)
CheckRadioButton(hDlg,IDC_HS_BDIAGONAL,
IDC_HS_VERTICAL, LOWORD (wParam)) ;
PaintTheBlock (hCtrlBlock, iColor,
iFigure,iBrush);
return TRUE ;
}
break;
case WM_PAINT:
PaintTheBlock (hCtrlBlock, iColor, iFigure,iBrush) ;
break ;
}
return FALSE ;
}
d)

Hộp thoại không trạng thái

™

Hiển thị hộp thoại
HWND hDlgModeless=CreateDialog(hInstance, szTemplate,

hwndParent, DialogProc);
ShowWindow(hDlgModeless,SW_SHOW);
while(GetMessage(&msg, NULL, 0, 0))
{
if (hDlgModeless==0 || !IsDialogMessage
(hDlgModeless, &msg);
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}

™

while(GetMessage(&msg, NULL, 0, 0))
{
if (hDlgModeless==0 || !IsDialogMessage(hDlgModeless,
&msg);
{
if(TranslateAccelerator (hwnd, hAccel, &msg)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
}
Đóng hộp thoại
Đặt hDlgModeless về giá trị 0.

Bài giảng: Lập trình C for Win .............................................................................................Trang 53/69



Bài 4: Hộp thọai và điều khiển

™

1
2
3
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

Trần Minh Thái

BOOL DestroyWindow(
HWND hWnd // handle to window to destroy
);
Ví dụ

void PaintWindow (HWND hwnd, int iColor[], int iFigure)
{
HBRUSH hBrush ;
HDC hdc ;
RECT rect ;
hdc = GetDC(hwnd) ;
GetClientRect (hwnd, &rect) ;
hBrush = CreateSolidBrush(RGB(iColor[0], iColor[1],
iColor[2]));
hBrush = (HBRUSH) SelectObject (hdc, hBrush) ;
if (iFigure == IDC_RECT)
Rectangle (hdc, rect.left, rect.top, rect.right,
rect.bottom) ;
else
Ellipse(hdc, rect.left, rect.top, rect.right,
rect.bottom) ;
DeleteObject (SelectObject (hdc, hBrush)) ;
ReleaseDC (hwnd, hdc) ;

}
LRESULT CALLBACK WndProc (HWND hwnd, UINT
message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_PAINT:
PaintTheBlock(hwnd, iColor, iFigure) ;
return 0 ;
case WM_DESTROY :

Bài giảng: Lập trình C for Win .............................................................................................Trang 54/69


Bài 4: Hộp thọai và điều khiển

29
30
31
32
33
34
35
36
37
38
39
40
41
42

43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72

73
74

Trần Minh Thái

DeleteObject((HGDIOBJ)SetClassLong(hw
nd, GCL_HBRBACKGROUND,(LONG)
GetStockObject (WHITE_BRUSH))) ;
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProc (hwnd, message, wParam,
lParam);
}
void PaintTheBlock (HWND hCtrl, int iColor[], int iFigure)
{
InvalidateRect (hCtrl, NULL, TRUE);
UpdateWindow (hCtrl) ;
PaintWindow (hCtrl, iColor, iFigure) ;
}
BOOL CALLBACK ColorScrDlg (HWND hDlg, UINT
message, WPARAM wParam, LPARAM lParam)
{
HWND hwndParent, hCtrl ;
static HWND hCtrlBlock ;
int iCtrlID, iIndex ;
switch (message)
{
case WM_INITDIALOG :
hCtrlBlock = GetDlgItem (hDlg,

IDC_PAINT) ;
for (iCtrlID = 10 ; iCtrlID < 13 ; iCtrlID++)
{
hCtrl = GetDlgItem (hDlg, iCtrlID) ;
PaintTheBlock (hCtrlBlock, iColor,
iFigure) ;
PaintTheBlock (hwndParent, iColor,
iFigure) ;
SetScrollRange (hCtrl, SB_CTL, 0,
255, FALSE) ;
SetScrollPos(hCtrl, SB_CTL, 0,
FALSE) ;
}
return TRUE ;
case WM_COMMAND:
{
switch( LOWORD(wParam))
{
case IDC_RECT:
case IDC_ELLIPSE:
iFigure = LOWORD(wParam);

Bài giảng: Lập trình C for Win .............................................................................................Trang 55/69



×