⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 demo4_5.c

📁 WINDOWS图形编程随书光盘
💻 C
📖 第 1 页 / 共 2 页
字号:
  1 /****************************************************************/
  2 /*         Demo4_5   ---  Simple Paint                          */
  3 /****************************************************************/
  4 
  5 #include <windows.h>
  6 #include <math.h>
  7 #include "demo4_5.h"
  8 
  9 
 10 int  PASCAL  WinMain(HANDLE, HANDLE, LPSTR, int);
 11 long FAR PASCAL MainWndProc(HWND, unsigned, WORD, LONG);
 12 long FAR PASCAL ChooseCtrlProc(HWND, unsigned, WORD, LONG);
 13 long FAR PASCAL LineWSCtrlProc(HWND, unsigned, WORD, LONG);
 14 BOOL FAR PASCAL PenDlgProc(HWND, unsigned, WORD, LONG);
 15 BOOL FAR PASCAL BrushDlgProc(HWND, unsigned, WORD, LONG);
 16 
 17 void DrawGraph(HDC, BOOL);
 18 void DrawPencil(HDC);
 19 void DrawLine(HDC, BOOL);
 20 void DrawRect(HDC, BOOL);
 21 void DrawEllip(HDC, BOOL);
 22 void DrawCircle(HDC, BOOL);
 23 void DrawRoundRect(HDC, BOOL);
 24 
 25 FARPROC lpPenDlgProc;
 26 FARPROC lpBrushDlgProc;
 27 
 28 HANDLE  hInst;
 29 
 30 int     ToolID  = IDM_PENCIL;
 31 
 32 int     nPenColor = 1;
 33 int     nPenStyle = PS_SOLID;
 34 int     nPenWidth = 1;
 35 
 36 int     nBrushColor = 1;
 37 int     nHatch      = -1;
 38 
 39 typedef struct tagCOLORSTRUCT {
 40    int  cR;
 41    int  cG;
 42    int  cB;
 43 } COLORSTRUCT;
 44 
 45 #define MKCOLOR(A) (RGB(A.cR, A.cG, A.cB))
 46 
 47 extern COLORSTRUCT crDefColor[28];
 48 extern COLORSTRUCT crPCurColor[28];
 49 extern COLORSTRUCT crBCurColor[28];
 50 
 51 POINT OrgPoint;
 52 POINT PrePoint;
 53 POINT CurPoint;
 54 
 55 /****************************************************************/
 56 /*                      WinMain()                               */
 57 /****************************************************************/
 58 
 59 int PASCAL WinMain(HANDLE hInstance, HANDLE hPrevInstance,
 60                    LPSTR lpszCmdLine, int nCmdShow)
 61 {
 62    WNDCLASS wclass;
 63    MSG      msg;
 64    HWND     hWnd;
 65    char     szName[] = "Demo4_5";
 66 
 67    if (!hPrevInstance)
 68     {
 69         wclass.style         = CS_HREDRAW | CS_VREDRAW;
 70         wclass.lpfnWndProc   = MainWndProc;
 71         wclass.cbClsExtra    = 0;
 72         wclass.cbWndExtra    = 0;
 73         wclass.hInstance     = hInstance;
 74         wclass.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
 75         wclass.hCursor       = LoadCursor(NULL, IDC_ARROW);
 76         wclass.hbrBackground = GetStockObject(WHITE_BRUSH);
 77         wclass.lpszMenuName  = szName;
 78         wclass.lpszClassName = szName;
 79 
 80         if (!RegisterClass (&wclass))
 81            return (FALSE);
 82 
 83         wclass.style         = CS_HREDRAW | CS_VREDRAW;
 84         wclass.lpfnWndProc   = ChooseCtrlProc;
 85         wclass.cbClsExtra    = 0;
 86         wclass.cbWndExtra    = 0;
 87         wclass.hInstance     = hInstance;
 88         wclass.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
 89         wclass.hCursor       = LoadCursor(NULL, IDC_ARROW);
 90         wclass.hbrBackground = GetStockObject(WHITE_BRUSH);
 91         wclass.lpszMenuName  = NULL;
 92         wclass.lpszClassName = "Choose";
 93 
 94         if (!RegisterClass (&wclass))
 95            return (FALSE);
 96 
 97         wclass.style         = CS_HREDRAW | CS_VREDRAW;
 98         wclass.lpfnWndProc   = LineWSCtrlProc;
 99         wclass.cbClsExtra    = 0;
100         wclass.cbWndExtra    = 0;
101         wclass.hInstance     = hInstance;
102         wclass.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
103         wclass.hCursor       = LoadCursor(NULL, IDC_ARROW);
104         wclass.hbrBackground = COLOR_WINDOW + 1;
105         wclass.lpszMenuName  = NULL;
106         wclass.lpszClassName = "LineWS";
107 
108         if (!RegisterClass (&wclass))
109            return (FALSE);
110     }
111 
112     hWnd = CreateWindow(
113                 szName,
114                 "Simple Paint" ,
115                 WS_OVERLAPPEDWINDOW,
116                 CW_USEDEFAULT,
117                 CW_USEDEFAULT,
118                 CW_USEDEFAULT,
119                 CW_USEDEFAULT,
120                 NULL,
121                 NULL,
122                 hInstance,
123                 NULL );
124 
125     if (!hWnd)
126         return (FALSE);
127 
128     ShowWindow(hWnd, nCmdShow);
129     UpdateWindow(hWnd);
130 
131     while (GetMessage(&msg, NULL, NULL,NULL))
132        {
133            TranslateMessage(&msg);
134            DispatchMessage(&msg);
135        }
136     return (msg.wParam);
137 }
138 
139 
140 
141 /****************************************************************/
142 /*                      MainWndProc()                           */
143 /****************************************************************/
144 
145 long FAR PASCAL MainWndProc(HWND hWnd, unsigned message,
146                             WORD wParam, LONG lParam)
147 {
148    HDC           hDC;
149    HMENU         hMenu;
150    static BOOL   bLBDown;
151 
152    switch (message)
153     {
154       case WM_CREATE :
155                 hMenu = GetMenu(hWnd);
156                 CheckMenuItem(hMenu, IDM_PENCIL, MF_CHECKED);
157 
158                 memcpy(crPCurColor, crDefColor,
159                                 sizeof(crDefColor));
160                 memcpy(crBCurColor, crDefColor,
161                                 sizeof(crDefColor));
162 
163                 hInst = ((LPCREATESTRUCT) lParam)->hInstance;
164                 return (0);
165 
166       case WM_COMMAND :
167                 hMenu = GetMenu(hWnd);
168                 switch (wParam)
169                   {
170                     case IDM_PENCIL     :
171                     case IDM_LINE       :
172                     case IDM_RECT_F     :
173                     case IDM_RECT       :
174                     case IDM_ELLIP_F    :
175                     case IDM_ELLIP      :
176                     case IDM_CIRCLE_F   :
177                     case IDM_CIRCLE     :
178                     case IDM_ROUNDRECT_F:
179                     case IDM_ROUNDRECT  :
180 
181                          if (ToolID == wParam)
182                             return (0);
183 
184                          CheckMenuItem(hMenu, ToolID,
185                                         MF_UNCHECKED);
186                          ToolID = wParam;
187                          CheckMenuItem(hMenu, ToolID,
188                                         MF_CHECKED);
189                          break;
190 
191                     case IDM_CHOOSEPEN :
192 
193                          lpPenDlgProc = MakeProcInstance(
194                                (FARPROC) PenDlgProc, hInst);
195 
196                          DialogBox(hInst, "PENDLG", hWnd,
197                                    lpPenDlgProc);
198 
199                          FreeProcInstance(lpPenDlgProc);
200                          break;
201 
202                     case IDM_CHOOSEBRUSH :
203 
204                          lpBrushDlgProc = MakeProcInstance(
205                                (FARPROC) BrushDlgProc, hInst);
206 
207                          DialogBox(hInst, "BRUSHDLG", hWnd,
208                                    lpBrushDlgProc);
209 
210                          FreeProcInstance(lpBrushDlgProc);
211                          break;
212 
213                     case IDM_CLEAR :
214                          InvalidateRect(hWnd, NULL, TRUE);
215                          break;
216 
217                     case IDM_QUIT :
218                          DestroyWindow(hWnd);
219                          break;
220                   }
221                 return (0);
222 
223       case WM_LBUTTONDOWN :
224                 SetCapture(hWnd);
225                 bLBDown = TRUE;
226 
227                 OrgPoint = MAKEPOINT(lParam);
228                 CurPoint = PrePoint = OrgPoint;
229 
230                 return (0);
231 
232       case WM_LBUTTONUP :
233                 bLBDown = FALSE;
234                 ReleaseCapture();
235 
236                 hDC = GetDC(hWnd);
237                 DrawGraph(hDC, TRUE);
238                 ReleaseDC(hWnd, hDC);
239 
240                 return (0);
241 
242       case WM_MOUSEMOVE :
243                 if (bLBDown)
244                   {
245                     PrePoint = CurPoint;
246                     CurPoint = MAKEPOINT(lParam);
247 
248                     hDC = GetDC(hWnd);
249                     DrawGraph(hDC, FALSE);
250                     ReleaseDC(hWnd, hDC);
251                   }
252                 return (0);
253 
254       case WM_DESTROY :
255                 PostQuitMessage(0);
256                 return (0);
257 
258       default :
259          return(DefWindowProc(hWnd, message, wParam, lParam));

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -