DEMO4_4.C
上传用户:cncajx
上传日期:2007-01-03
资源大小:190k
文件大小:9k
源码类别:

GDI/图象编程

开发平台:

Visual C++

  1.   1 /****************************************************************/
  2.   2 /*         Demo4_4   ---  ROP2 demo                             */
  3.   3 /****************************************************************/
  4.   4 
  5.   5 #include <windows.h>
  6.   6 #include <math.h>
  7.   7 #include "demo4_4.h"
  8.   8 
  9.   9 
  10.  10 int  PASCAL  WinMain(HANDLE, HANDLE, LPSTR, int);
  11.  11 long FAR PASCAL MainWndProc(HWND, unsigned, WORD, LONG);
  12.  12 
  13.  13 COLORREF MakeRgbColor(int);
  14.  14 void DrawGraph(HDC, int, int);
  15.  15 
  16.  16 int   Color1ID = IDM_RED1;
  17.  17 int   Color2ID = IDM_BLUE2;
  18.  18 int   ROP2ID   = IDM_R2_13;
  19.  19 
  20.  20 /****************************************************************/
  21.  21 /*                      WinMain()                               */
  22.  22 /****************************************************************/
  23.  23 
  24.  24 int PASCAL WinMain(HANDLE hInstance, HANDLE hPrevInstance,
  25.  25                    LPSTR lpszCmdLine, int nCmdShow)
  26.  26 {
  27.  27    WNDCLASS wclass;
  28.  28    MSG      msg;
  29.  29    HWND     hWnd;
  30.  30    char     szName[] = "Demo4_3";
  31.  31 
  32.  32    if (!hPrevInstance)
  33.  33     {
  34.  34         wclass.style         = CS_HREDRAW | CS_VREDRAW;
  35.  35         wclass.lpfnWndProc   = MainWndProc;
  36.  36         wclass.cbClsExtra    = 0;
  37.  37         wclass.cbWndExtra    = 0;
  38.  38         wclass.hInstance     = hInstance;
  39.  39         wclass.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
  40.  40         wclass.hCursor       = LoadCursor(NULL, IDC_ARROW);
  41.  41         wclass.hbrBackground = GetStockObject(WHITE_BRUSH);
  42.  42         wclass.lpszMenuName  = szName;
  43.  43         wclass.lpszClassName = szName;
  44.  44 
  45.  45         if (!RegisterClass (&wclass))
  46.  46            return (FALSE);
  47.  47     }
  48.  48 
  49.  49     hWnd = CreateWindow(
  50.  50                 szName,
  51.  51                 "ROP2 demo" ,
  52.  52                 WS_OVERLAPPEDWINDOW,
  53.  53                 CW_USEDEFAULT,
  54.  54                 CW_USEDEFAULT,
  55.  55                 CW_USEDEFAULT,
  56.  56                 CW_USEDEFAULT,
  57.  57                 NULL,
  58.  58                 NULL,
  59.  59                 hInstance,
  60.  60                 NULL );
  61.  61 
  62.  62     if (!hWnd)
  63.  63         return (FALSE);
  64.  64 
  65.  65     ShowWindow(hWnd, nCmdShow);
  66.  66     UpdateWindow(hWnd);
  67.  67 
  68.  68     while (GetMessage(&msg, NULL, NULL,NULL))
  69.  69        {
  70.  70            TranslateMessage(&msg);
  71.  71            DispatchMessage(&msg);
  72.  72        }
  73.  73     return (msg.wParam);
  74.  74 }
  75.  75 
  76.  76 
  77.  77 
  78.  78 /****************************************************************/
  79.  79 /*                      MainWndProc()                           */
  80.  80 /****************************************************************/
  81.  81 
  82.  82 long FAR PASCAL MainWndProc(HWND hWnd, unsigned message,
  83.  83                             WORD wParam, LONG lParam)
  84.  84 {
  85.  85    HDC           hDC;
  86.  86    HMENU         hMenu;
  87.  87    PAINTSTRUCT   ps;
  88.  88    static int    CX, CY;
  89.  89 
  90.  90    switch (message)
  91.  91     {
  92.  92       case WM_CREATE :
  93.  93                 hMenu = GetMenu(hWnd);
  94.  94                 CheckMenuItem(hMenu, IDM_RED1, MF_CHECKED);
  95.  95                 CheckMenuItem(hMenu, IDM_BLUE2, MF_CHECKED);
  96.  96                 CheckMenuItem(hMenu, IDM_R2_13, MF_CHECKED);
  97.  97                 return (0);
  98.  98 
  99.  99       case WM_COMMAND :
  100. 100                 hMenu = GetMenu(hWnd);
  101. 101                 switch (wParam)
  102. 102                   {
  103. 103                     case IDM_RED1 :
  104. 104                     case IDM_GREEN1 :
  105. 105                     case IDM_BLUE1 :
  106. 106                     case IDM_YELLOW1 :
  107. 107                     case IDM_CYAN1 :
  108. 108                     case IDM_MAGENTA1 :
  109. 109                     case IDM_WHITE1 :
  110. 110                     case IDM_GRAY1 :
  111. 111                     case IDM_BLACK1 :
  112. 112 
  113. 113                          if (Color1ID == wParam)
  114. 114                             return (0);
  115. 115 
  116. 116                          CheckMenuItem(hMenu, Color1ID,
  117. 117                                         MF_UNCHECKED);
  118. 118                          Color1ID = wParam;
  119. 119                          CheckMenuItem(hMenu, Color1ID,
  120. 120                                         MF_CHECKED);
  121. 121 
  122. 122                          InvalidateRect(hWnd, NULL, TRUE);
  123. 123                          break;
  124. 124 
  125. 125                     case IDM_RED2 :
  126. 126                     case IDM_GREEN2 :
  127. 127                     case IDM_BLUE2 :
  128. 128                     case IDM_YELLOW2 :
  129. 129                     case IDM_CYAN2 :
  130. 130                     case IDM_MAGENTA2 :
  131. 131                     case IDM_WHITE2 :
  132. 132                     case IDM_GRAY2 :
  133. 133                     case IDM_BLACK2 :
  134. 134 
  135. 135                          if (Color2ID == wParam)
  136. 136                             return (0);
  137. 137 
  138. 138                          CheckMenuItem(hMenu, Color2ID,
  139. 139                                         MF_UNCHECKED);
  140. 140                          Color2ID = wParam;
  141. 141                          CheckMenuItem(hMenu, Color2ID,
  142. 142                                         MF_CHECKED);
  143. 143 
  144. 144                          InvalidateRect(hWnd, NULL, TRUE);
  145. 145                          break;
  146. 146 
  147. 147                     case IDM_R2_1 :
  148. 148                     case IDM_R2_2 :
  149. 149                     case IDM_R2_3 :
  150. 150                     case IDM_R2_4 :
  151. 151                     case IDM_R2_5 :
  152. 152                     case IDM_R2_6 :
  153. 153                     case IDM_R2_7 :
  154. 154                     case IDM_R2_8 :
  155. 155                     case IDM_R2_9 :
  156. 156                     case IDM_R2_10:
  157. 157                     case IDM_R2_11:
  158. 158                     case IDM_R2_12:
  159. 159                     case IDM_R2_13:
  160. 160                     case IDM_R2_14:
  161. 161                     case IDM_R2_15:
  162. 162                     case IDM_R2_16:
  163. 163 
  164. 164                          if (ROP2ID == wParam)
  165. 165                             return (0);
  166. 166 
  167. 167                          CheckMenuItem(hMenu, ROP2ID,
  168. 168                                         MF_UNCHECKED);
  169. 169                          ROP2ID = wParam;
  170. 170                          CheckMenuItem(hMenu, ROP2ID,
  171. 171                                         MF_CHECKED);
  172. 172 
  173. 173                          InvalidateRect(hWnd, NULL, TRUE);
  174. 174                          break;
  175. 175                   }
  176. 176                 return (0);
  177. 177 
  178. 178       case WM_SIZE :
  179. 179                 CX = LOWORD(lParam);
  180. 180                 CY = HIWORD(lParam);
  181. 181 
  182. 182                 InvalidateRect(hWnd, NULL, TRUE);
  183. 183                 return (0);
  184. 184 
  185. 185       case WM_PAINT :
  186. 186                 hDC = BeginPaint(hWnd, &ps);
  187. 187 
  188. 188                 DrawGraph(hDC, CX, CY);
  189. 189 
  190. 190                 EndPaint(hWnd, &ps);
  191. 191                 return (0);
  192. 192 
  193. 193       case WM_DESTROY :
  194. 194                 PostQuitMessage(0);
  195. 195                 return (0);
  196. 196 
  197. 197       default :
  198. 198          return(DefWindowProc(hWnd, message, wParam, lParam));
  199. 199     }
  200. 200 }
  201. 201 
  202. 202 
  203. 203 
  204. 204 COLORREF MakeRgbColor(int ColorID)
  205. 205 {
  206. 206    COLORREF crColor;
  207. 207 
  208. 208    switch (ColorID)
  209. 209     {
  210. 210       case IDM_RED1 :
  211. 211       case IDM_RED2 :
  212. 212                 crColor = RGB(255, 0, 0);
  213. 213                 break;
  214. 214 
  215. 215       case IDM_GREEN1 :
  216. 216       case IDM_GREEN2 :
  217. 217                 crColor = RGB(0, 255, 0);
  218. 218                 break;
  219. 219 
  220. 220       case IDM_BLUE1 :
  221. 221       case IDM_BLUE2 :
  222. 222                 crColor = RGB(0, 0, 255);
  223. 223                 break;
  224. 224 
  225. 225       case IDM_YELLOW1 :
  226. 226       case IDM_YELLOW2 :
  227. 227                 crColor = RGB(255, 255, 0);
  228. 228                 break;
  229. 229 
  230. 230       case IDM_CYAN1 :
  231. 231       case IDM_CYAN2 :
  232. 232                 crColor = RGB(0, 255, 255);
  233. 233                 break;
  234. 234 
  235. 235       case IDM_MAGENTA1 :
  236. 236       case IDM_MAGENTA2 :
  237. 237                 crColor = RGB(255, 0, 255);
  238. 238                 break;
  239. 239 
  240. 240       case IDM_WHITE1 :
  241. 241       case IDM_WHITE2 :
  242. 242                 crColor = RGB(255, 255, 255);
  243. 243                 break;
  244. 244 
  245. 245       case IDM_GRAY1 :
  246. 246       case IDM_GRAY2 :
  247. 247                 crColor = RGB(150, 150, 150);
  248. 248                 break;
  249. 249 
  250. 250       case IDM_BLACK1 :
  251. 251       case IDM_BLACK2 :
  252. 252                 crColor = RGB(0, 0, 0);
  253. 253                 break;
  254. 254     }
  255. 255 
  256. 256    return (crColor);
  257. 257 }
  258. 258 
  259. 259 
  260. 260 
  261. 261 void DrawGraph(HDC hDC, int CX, int CY)
  262. 262 {
  263. 263    HBRUSH   hPreBrush;
  264. 264    HBRUSH   hBrush1, hBrush2;
  265. 265    COLORREF crColor;
  266. 266 
  267. 267    crColor = MakeRgbColor(Color1ID);
  268. 268    hBrush1 = CreateSolidBrush(crColor);
  269. 269    crColor = MakeRgbColor(Color2ID);
  270. 270    hBrush2 = CreateSolidBrush(crColor);
  271. 271 
  272. 272    hPreBrush = SelectObject(hDC, hBrush2);
  273. 273    Rectangle(hDC, CX/3, CY/3, CX, CY);
  274. 274 
  275. 275    SetROP2(hDC, ROP2ID-IDM_R2_1+1);
  276. 276 
  277. 277    SelectObject(hDC, hBrush1);
  278. 278    Rectangle(hDC, 0, 0, CX*2/3, CY*2/3);
  279. 279 
  280. 280    SelectObject(hDC, hPreBrush);
  281. 281    DeleteObject(hBrush1);
  282. 282    DeleteObject(hBrush2);
  283. 283 }