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

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

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

Thông tin tài liệu

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.

Bài 4: Hộp thọai đ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 ; case WM_COMMAND: switch (LOWORD (wParam)) { case IDC_SHOW: if (DialogBox (hInstance, TEXT ("DIALOG"), hwnd, DialogProc)) InvalidateRect (hwnd, NULL, TRUE) ; return ; } break; case WM_PAINT: BeginPaint (hwnd, &ps) ; EndPaint (hwnd, &ps) ; PaintWindow (hwnd, iCurrentColor, iCurrentFigure, iCurrenBrush) ; return ; case WM_DESTROY: PostQuitMessage (0) ; return ; } 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 đ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 đ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 giá trị Bài giảng: Lập trình C for Win .Trang 53/69 Bài 4: Hộp thọai điều khiển ™ 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 ; case WM_DESTROY : Bài giảng: Lập trình C for Win .Trang 54/69 Bài 4: Hộp thọai đ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 ; } 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 ... 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... 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:... 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

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

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan