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

📄 demo1_1.c

📁 WINDOWS图形编程随书光盘
💻 C
字号:
  1 /****************************************************************/
  2 /*         Demo1_1   ---  The simple example                    */
  3 /****************************************************************/
  4 
  5 #include <windows.h>
  6 #include "demo1_1.h"
  7 
  8 int  PASCAL  WinMain(HANDLE, HANDLE, LPSTR, int);
  9 long FAR PASCAL MainWndProc(HWND, unsigned, WORD, LONG);
 10 
 11 
 12 
 13 /****************************************************************/
 14 /*                      WinMain()                               */
 15 /****************************************************************/
 16 
 17 int PASCAL WinMain(HANDLE hInstance, HANDLE hPrevInstance,
 18                    LPSTR lpszCmdLine, int nCmdShow)
 19 {
 20    WNDCLASS wclass;
 21    MSG      msg;
 22    HWND     hWnd;
 23    char     szName[] = "Demo1_1";
 24 
 25    if (!hPrevInstance)
 26     {
 27         wclass.style         = CS_HREDRAW | CS_VREDRAW;
 28         wclass.lpfnWndProc   = MainWndProc;
 29         wclass.cbClsExtra    = 0;
 30         wclass.cbWndExtra    = 0;
 31         wclass.hInstance     = hInstance;
 32         wclass.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
 33         wclass.hCursor       = LoadCursor(NULL, IDC_ARROW);
 34         wclass.hbrBackground = GetStockObject(WHITE_BRUSH);
 35         wclass.lpszMenuName  = szName;
 36         wclass.lpszClassName = szName;
 37 
 38         if (!RegisterClass (&wclass))
 39            return (FALSE);
 40     }
 41 
 42     hWnd = CreateWindow(
 43                 szName,
 44                 "The simple example",
 45                 WS_OVERLAPPEDWINDOW,
 46                 CW_USEDEFAULT,
 47                 CW_USEDEFAULT,
 48                 CW_USEDEFAULT,
 49                 CW_USEDEFAULT,
 50                 NULL,
 51                 NULL,
 52                 hInstance,
 53                 NULL );
 54 
 55     if (!hWnd)
 56         return (FALSE);
 57 
 58     ShowWindow(hWnd, nCmdShow);
 59     UpdateWindow(hWnd);
 60 
 61     while (GetMessage(&msg, NULL, NULL,NULL))
 62        {
 63            TranslateMessage(&msg);
 64            DispatchMessage(&msg);
 65        }
 66     return (msg.wParam);
 67 }
 68 
 69 
 70 
 71 /****************************************************************/
 72 /*                      MainWndProc()                           */
 73 /****************************************************************/
 74 
 75 long FAR PASCAL MainWndProc(HWND hWnd, unsigned message,
 76                             WORD wParam, LONG lParam)
 77 {
 78    HDC           hDC;
 79    HMENU         hMenu;
 80    static int    ShapeID = IDM_LINE;
 81    RECT          Rect;
 82    int           x1, x2, y1, y2;
 83    static int    CX, CY;
 84 
 85    switch (message)
 86     {
 87       case WM_CREATE :
 88                 srand(LOWORD(GetCurrentTime()));
 89                 break;
 90 
 91       case WM_COMMAND :
 92                 switch(wParam)
 93                   {
 94                     case IDM_CLEAR :
 95                          InvalidateRect(hWnd, NULL, TRUE);
 96                          UpdateWindow(hWnd);
 97                          break;
 98 
 99                     case IDM_EXIT :
100                          DestroyWindow (hWnd);
101                          break;
102 
103                     case IDM_LINE :
104                          if (ShapeID != IDM_LINE)
105                            {
106                              hMenu = GetMenu(hWnd);
107                              CheckMenuItem(hMenu, ShapeID,
108                                                   MF_UNCHECKED);
109                              ShapeID = IDM_LINE;
110                              CheckMenuItem(hMenu, ShapeID,
111                                                   MF_CHECKED);
112                            }
113                          break;
114 
115                     case IDM_RECT :
116                          if (ShapeID != IDM_RECT)
117                            {
118                              hMenu = GetMenu(hWnd);
119                              CheckMenuItem(hMenu, ShapeID,
120                                                   MF_UNCHECKED);
121                              ShapeID = IDM_RECT;
122                              CheckMenuItem(hMenu, ShapeID,
123                                                   MF_CHECKED);
124                            }
125                          break;
126 
127                     case IDM_ELLIP :
128                          if (ShapeID != IDM_ELLIP)
129                            {
130                              hMenu = GetMenu(hWnd);
131                              CheckMenuItem(hMenu, ShapeID,
132                                                   MF_UNCHECKED);
133                              ShapeID = IDM_ELLIP;
134                              CheckMenuItem(hMenu, ShapeID,
135                                                   MF_CHECKED);
136                            }
137                          break;
138 
139                     case IDM_DRAW :
140                          hDC = GetDC(hWnd);
141 
142                          x1 = rand() % CX;
143                          y1 = rand() % CY;
144                          x2 = rand() % CX;
145                          y2 = rand() % CY;
146 
147                          switch (ShapeID)
148                            {
149                             case IDM_LINE :
150                                  MoveTo(hDC, x1, y1);
151                                  LineTo(hDC, x2, y2);
152                                  break;
153 
154                             case IDM_RECT :
155                                  Rectangle(hDC, x1, y1, x2, y2);
156                                  break;
157 
158                             case IDM_ELLIP :
159                                  Ellipse(hDC, x1, y1, x2, y2);
160                                  break;
161                            }
162 
163                          ReleaseDC(hWnd, hDC);
164                          break;
165                   }
166                 break;
167 
168       case WM_SIZE :
169                 GetClientRect(hWnd, &Rect);
170                 CX = Rect.right  - Rect.left;
171                 CY = Rect.bottom - Rect.top;
172                 break;
173 
174       case WM_DESTROY :
175                 PostQuitMessage(0);
176                 break ;
177 
178       default :
179                 return (DefWindowProc(hWnd, message, wParam, lParam));
180     }
181    return (NULL);
182 }

⌨️ 快捷键说明

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