1. Trang chủ
  2. » Công Nghệ Thông Tin

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

5 12 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 5
Dung lượng 255,76 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Giáo trình lập trình C cho Winform- P11: Các ứng dụng của Windows rất dễ sử dụng, nhưng rất khó đối với người đã tạo lập ra chúng. Để đạt được tính dễ dùng đòi hỏi người lập trình phải bỏ ra rất nhiều công sức để cài đặt.

Trang 1

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)

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

{

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);

Trang 2

CheckRadioButton(hDlg,IDC_RECT,IDC_ELLIPSE,iFig ure);CheckRadioButton (hDlg, IDC_HS_BDIAGONAL, IDC_HS_VERTICAL, iBrush);

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

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:

Trang 3

iBrush = LOWORD (wParam)

138

139

140

141

142

143

144

145

146

147

148

149

150

151

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

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);

} }

}

Đặt hDlgModeless về giá trị 0

Trang 4

BOOL DestroyWindow(

);

™ Ví dụ

void PaintWindow (HWND hwnd, int iColor[], int iFigure)

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

{

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 :

Trang 5

nd, GCL_HBRBACKGROUND,(LONG) GetStockObject (WHITE_BRUSH))) ;

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

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);

Ngày đăng: 11/05/2021, 04:34

🧩 Sản phẩm bạn có thể quan tâm

w