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

GDI/图象编程

开发平台:

Visual C++

  1.   1 #include "Paint.h"
  2.   2 #include <windows.h>
  3.   3 
  4.   4 BOOL FAR PASCAL ColorDlgProc(HWND, unsigned, WORD, LONG);
  5.   5 HBRUSH MyCreateBrush(int, COLORREF);
  6.   6 
  7.   7 FARPROC lpColorDlgProc;
  8.   8 
  9.   9 extern HANDLE hInst;
  10.  10 
  11.  11 extern int    nPenColor;
  12.  12 extern int    nPenStyle;
  13.  13 extern int    nPenWidth;
  14.  14 
  15.  15 extern int    nBrushColor;
  16.  16 extern int    nHatch;
  17.  17 
  18.  18 typedef struct tagCOLORSTRUCT {
  19.  19    int  cR;
  20.  20    int  cG;
  21.  21    int  cB;
  22.  22 } COLORSTRUCT;
  23.  23 
  24.  24 #define MKCOLOR(A) (RGB(A.cR, A.cG, A.cB))
  25.  25 
  26.  26 COLORSTRUCT crDefColor[28] =
  27.  27   { {255,255,255}, {255,  0,  0}, {  0,255,  0},
  28.  28     {  0,  0,255}, {255,255,  0}, {  0,255,255},
  29.  29     {255,  0,255},
  30.  30 
  31.  31     {192,192,192}, {128,  0,  0}, {  0,128,  0},
  32.  32     {  0,  0,128}, {128,128,  0}, {  0,128,128},
  33.  33     {128,  0,128},
  34.  34 
  35.  35     {128,128,128}, {255,255,128}, {  0,255,128},
  36.  36     {128,255,255}, {128,128,255}, {255,  0,128},
  37.  37     {255,128, 64},
  38.  38 
  39.  39     {  0,  0,  0}, {128,128, 64}, {  0, 64, 64},
  40.  40     {  0,128,255}, {  0, 64,128}, { 64,  0,128},
  41.  41     {128, 64,  0}
  42.  42   };
  43.  43 
  44.  44 COLORSTRUCT  crPCurColor[28];
  45.  45 COLORSTRUCT  crBCurColor[28];
  46.  46 
  47.  47 int          nChooseColor;
  48.  48 int          nChooseStyle;
  49.  49 int          nChooseWidth;
  50.  50 int          nChooseHatch;
  51.  51 
  52.  52 int          nCurDlgID;
  53.  53 
  54.  54 long FAR PASCAL ChooseCtrlProc(HWND hCtrl, unsigned msg,
  55.  55                                WORD wParam, LONG lParam)
  56.  56 {
  57.  57    PAINTSTRUCT  ps;
  58.  58    HDC          hDC;
  59.  59    HBRUSH       hBrush;
  60.  60    RECT         Client;
  61.  61    HANDLE       nCtrlID;
  62.  62 
  63.  63    switch (msg)
  64.  64      {
  65.  65        case WM_PAINT :
  66.  66           hDC = BeginPaint(hCtrl, &ps);
  67.  67 
  68.  68           GetClientRect(hCtrl, &Client);
  69.  69           nCtrlID = GetWindowWord(hCtrl, GWW_ID);
  70.  70 
  71.  71           if (nCtrlID>=DI_H01 && nCtrlID<=DI_H07)
  72.  72               hBrush = MyCreateBrush(nCtrlID-DI_H02, 0);
  73.  73           else
  74.  74               hBrush = MyCreateBrush(-1,
  75.  75                       (nCurDlgID == IDM_CHOOSEPEN ?
  76.  76                        MKCOLOR(crPCurColor[nCtrlID-DI_PC01]) :
  77.  77                        MKCOLOR(crBCurColor[nCtrlID-DI_BC01])));
  78.  78 
  79.  79           FillRect(hDC, &Client, hBrush);
  80.  80           DeleteObject(hBrush);
  81.  81 
  82.  82           EndPaint(hCtrl, &ps);
  83.  83           return (0);
  84.  84 
  85.  85        case WM_LBUTTONDOWN :
  86.  86           nCtrlID = GetWindowWord(hCtrl, GWW_ID);
  87.  87           SendMessage(GetParent(hCtrl), WM_COMMAND,
  88.  88                         nCtrlID, (LONG) 0);
  89.  89           return (0);
  90.  90      }
  91.  91 
  92.  92    return (DefWindowProc(hCtrl, msg, wParam, lParam));
  93.  93 }
  94.  94 
  95.  95 
  96.  96 
  97.  97 long FAR PASCAL LineWSCtrlProc(HWND hCtrl, unsigned msg,
  98.  98                                WORD wParam, LONG lParam)
  99.  99 {
  100. 100    PAINTSTRUCT  ps;
  101. 101    HDC          hDC;
  102. 102    HPEN         hPen, hPrePen;
  103. 103    RECT         Client;
  104. 104    HANDLE       nCtrlID;
  105. 105    int          i, Item;
  106. 106 
  107. 107    switch (msg)
  108. 108      {
  109. 109        case WM_PAINT :
  110. 110           hDC = BeginPaint(hCtrl, &ps);
  111. 111 
  112. 112           GetClientRect(hCtrl, &Client);
  113. 113           nCtrlID = GetWindowWord(hCtrl, GWW_ID);
  114. 114 
  115. 115           if (nCtrlID == DI_WIDTH)
  116. 116             {
  117. 117               for (i=1; i<10; i+=2)
  118. 118                 {
  119. 119                   hPen = CreatePen(PS_SOLID, i, 0);
  120. 120                   hPrePen = SelectObject(hDC, hPen);
  121. 121 
  122. 122                   MoveTo(hDC, Client.left,
  123. 123                                 Client.bottom*i/10);
  124. 124                   LineTo(hDC, Client.right,
  125. 125                                 Client.bottom*i/10);
  126. 126 
  127. 127                   SelectObject(hDC, hPrePen);
  128. 128                   DeleteObject(hPrePen);
  129. 129                 }
  130. 130              }
  131. 131            else
  132. 132              {
  133. 133                for (i=0; i<5; i++)
  134. 134                 {
  135. 135                   hPen = CreatePen(i, 1, 0);
  136. 136                   hPrePen = SelectObject(hDC, hPen);
  137. 137                   SetBkMode(hDC, TRANSPARENT);
  138. 138 
  139. 139                   MoveTo(hDC, Client.left,
  140. 140                                 Client.bottom*(1+2*i)/10);
  141. 141                   LineTo(hDC, Client.right,
  142. 142                                 Client.bottom*(1+2*i)/10);
  143. 143 
  144. 144                   SelectObject(hDC, hPrePen);
  145. 145                   DeleteObject(hPrePen);
  146. 146                 }
  147. 147              }
  148. 148 
  149. 149           EndPaint(hCtrl, &ps);
  150. 150           return (0);
  151. 151 
  152. 152        case WM_LBUTTONDOWN :
  153. 153           nCtrlID = GetWindowWord(hCtrl, GWW_ID);
  154. 154           GetClientRect(hCtrl, &Client);
  155. 155 
  156. 156           Item = HIWORD(lParam)/(Client.bottom/5);
  157. 157           SendMessage(GetParent(hCtrl), WM_COMMAND,
  158. 158                       nCtrlID, (LONG) Item);
  159. 159           return (0);
  160. 160      }
  161. 161 
  162. 162    return (DefWindowProc(hCtrl, msg, wParam, lParam));
  163. 163 }
  164. 164 
  165. 165 
  166. 166 
  167. 167 void ReDrawPenGraph(HDC hCtrl)
  168. 168 {
  169. 169    HWND     hWnd;
  170. 170    RECT     Client;
  171. 171    HDC      hDC;
  172. 172    HPEN     hPen, hPrePen;
  173. 173    HBRUSH   hBrush;
  174. 174    COLORREF crBkColor;
  175. 175 
  176. 176    hWnd = GetParent(GetParent(hCtrl));
  177. 177    hDC = GetDC(hWnd);
  178. 178    crBkColor = GetBkColor(hDC);
  179. 179    ReleaseDC(hWnd, hDC);
  180. 180 
  181. 181    hDC = GetDC(hCtrl);
  182. 182    GetClientRect(hCtrl, &Client);
  183. 183 
  184. 184    hBrush = CreateSolidBrush(crBkColor);
  185. 185    FillRect(hDC, &Client, hBrush);
  186. 186 
  187. 187    hPen = CreatePen(nChooseStyle, nChooseWidth,
  188. 188                     MKCOLOR(crPCurColor[nChooseColor]));
  189. 189    hPrePen = SelectObject(hDC, hPen);
  190. 190    SetBkMode(hDC, TRANSPARENT);
  191. 191 
  192. 192    MoveTo(hDC, Client.left+5, Client.top+5);
  193. 193    LineTo(hDC, Client.right-5, Client.bottom-5);
  194. 194 
  195. 195    SelectObject(hDC, hPrePen);
  196. 196    DeleteObject(hPen);
  197. 197 
  198. 198    ReleaseDC(hCtrl, hDC);
  199. 199 }
  200. 200 
  201. 201 
  202. 202 
  203. 203 BOOL FAR PASCAL PenDlgProc(HWND hDlg, unsigned msg,
  204. 204                            WORD wParam, LONG lParam)
  205. 205 {
  206. 206    HANDLE       hCtrl, hCtrlGraph;
  207. 207 
  208. 208    switch (msg)
  209. 209      {
  210. 210        case WM_INITDIALOG :
  211. 211           nChooseColor =  nPenColor;
  212. 212           nChooseStyle  = nPenStyle;
  213. 213           nChooseWidth  = nPenWidth;
  214. 214           nCurDlgID     = IDM_CHOOSEPEN;
  215. 215           return (FALSE);
  216. 216 
  217. 217        case WM_CLOSE :
  218. 218           EndDialog(hDlg, FALSE);
  219. 219           return (TRUE);
  220. 220 
  221. 221        case WM_PAINT :
  222. 222           hCtrlGraph = GetDlgItem(hDlg, DI_PGRAPH);
  223. 223           ReDrawPenGraph(hCtrlGraph);
  224. 224           return (FALSE);
  225. 225 
  226. 226        case WM_COMMAND :
  227. 227           switch (wParam)
  228. 228             {
  229. 229               case DI_OK :
  230. 230                   nPenColor =  nChooseColor;
  231. 231                   nPenWidth =  nChooseWidth;
  232. 232                   nPenStyle =  nChooseStyle;
  233. 233                   EndDialog(hDlg, TRUE);
  234. 234                   return (TRUE);
  235. 235 
  236. 236               case DI_CANCEL :
  237. 237                   EndDialog(hDlg, FALSE);
  238. 238                   return (TRUE);
  239. 239 
  240. 240               case DI_ED :
  241. 241                   lpColorDlgProc = MakeProcInstance(
  242. 242                             (FARPROC) ColorDlgProc, hInst);
  243. 243 
  244. 244                   DialogBox(hInst, "COLORDLG", hDlg,
  245. 245                                    lpColorDlgProc);
  246. 246 
  247. 247                   FreeProcInstance(lpColorDlgProc);
  248. 248 
  249. 249                   hCtrlGraph = GetDlgItem(hDlg, DI_PGRAPH);
  250. 250                   ReDrawPenGraph(hCtrlGraph);
  251. 251 
  252. 252                   hCtrl = GetDlgItem(hDlg, DI_PC01+
  253. 253                                           nChooseColor);
  254. 254                   InvalidateRect(hCtrl, NULL, TRUE);
  255. 255                   return(TRUE);
  256. 256 
  257. 257               default :
  258. 258                   if (wParam>=DI_PC01 && wParam<=DI_PC28)
  259. 259                     {
  260. 260                       nChooseColor = wParam-DI_PC01;
  261. 261                       hCtrlGraph =
  262. 262                          GetDlgItem(hDlg, DI_PGRAPH);
  263. 263                       ReDrawPenGraph(hCtrlGraph);
  264. 264                     }
  265. 265                   else
  266. 266                   if (wParam == DI_WIDTH)
  267. 267                     {
  268. 268                       nChooseWidth = lParam*2 + 1;
  269. 269                       hCtrlGraph =
  270. 270                          GetDlgItem(hDlg, DI_PGRAPH);
  271. 271                       ReDrawPenGraph(hCtrlGraph);
  272. 272                     }
  273. 273                   else
  274. 274                   if (wParam == DI_STYLE)
  275. 275                     {
  276. 276                       nChooseStyle = lParam;
  277. 277                       hCtrlGraph =
  278. 278                          GetDlgItem(hDlg, DI_PGRAPH);
  279. 279                       ReDrawPenGraph(hCtrlGraph);
  280. 280                     }
  281. 281             }
  282. 282           return (TRUE);
  283. 283 
  284. 284        default :
  285. 285           return (FALSE);
  286. 286      }
  287. 287 }
  288. 288 
  289. 289 
  290. 290 
  291. 291 void ReDrawBrushGraph(HDC hCtrl)
  292. 292 {
  293. 293    HWND     hWnd;
  294. 294    RECT     Client;
  295. 295    HDC      hDC;
  296. 296    HPEN     hPen, hPrePen;
  297. 297    HBRUSH   hBrush, hPreBrush;
  298. 298    COLORREF crBkColor, crColor;
  299. 299 
  300. 300    hWnd = GetParent(GetParent(hCtrl));
  301. 301    hDC = GetDC(hWnd);
  302. 302    crBkColor = GetBkColor(hDC);
  303. 303    ReleaseDC(hWnd, hDC);
  304. 304 
  305. 305    hDC = GetDC(hCtrl);
  306. 306    GetClientRect(hCtrl, &Client);
  307. 307 
  308. 308    crColor = GetSysColor(COLOR_WINDOW);
  309. 309    hBrush = CreateSolidBrush(crColor);
  310. 310    FillRect(hDC, &Client, hBrush);
  311. 311 
  312. 312    hPen = CreatePen(nPenStyle, nPenWidth,
  313. 313                     MKCOLOR(crPCurColor[nPenColor]));
  314. 314    hBrush = MyCreateBrush(nChooseHatch,
  315. 315                     MKCOLOR(crBCurColor[nChooseColor]));
  316. 316 
  317. 317    hPrePen = SelectObject(hDC, hPen);
  318. 318    hPreBrush = SelectObject(hDC, hBrush);
  319. 319    SetBkColor(hDC, crBkColor);
  320. 320 
  321. 321    Rectangle(hDC, Client.left+2, Client.top+2,
  322. 322                   Client.right-2, Client.bottom-2);
  323. 323 
  324. 324    SelectObject(hDC, hPrePen);
  325. 325    SelectObject(hDC, hPreBrush);
  326. 326    DeleteObject(hPen);
  327. 327    DeleteObject(hBrush);
  328. 328 
  329. 329    ReleaseDC(hCtrl, hDC);
  330. 330 }
  331. 331 
  332. 332 
  333. 333 
  334. 334 BOOL FAR PASCAL BrushDlgProc(HWND hDlg, unsigned msg,
  335. 335                              WORD wParam, LONG lParam)
  336. 336 {
  337. 337    HANDLE    hCtrl, hCtrlGraph;
  338. 338 
  339. 339    switch (msg)
  340. 340      {
  341. 341        case WM_INITDIALOG :
  342. 342           nChooseColor  = nBrushColor;
  343. 343           nChooseHatch  = nHatch;
  344. 344           nCurDlgID     = IDM_CHOOSEBRUSH;
  345. 345           return (TRUE);
  346. 346 
  347. 347        case WM_CLOSE :
  348. 348           EndDialog(hDlg, FALSE);
  349. 349           return (TRUE);
  350. 350 
  351. 351        case WM_PAINT :
  352. 352           hCtrlGraph = GetDlgItem(hDlg, DI_BGRAPH);
  353. 353           ReDrawBrushGraph(hCtrlGraph);
  354. 354           return (FALSE);
  355. 355 
  356. 356        case WM_COMMAND :
  357. 357           switch (wParam)
  358. 358             {
  359. 359               case DI_OK :
  360. 360                   nBrushColor  = nChooseColor;
  361. 361                   nHatch       = nChooseHatch;
  362. 362                   EndDialog(hDlg, TRUE);
  363. 363                   return (TRUE);
  364. 364 
  365. 365               case DI_CANCEL :
  366. 366                   EndDialog(hDlg, FALSE);
  367. 367                   return (TRUE);
  368. 368 
  369. 369               case DI_ED :
  370. 370                   lpColorDlgProc = MakeProcInstance(
  371. 371                             (FARPROC) ColorDlgProc, hInst);
  372. 372 
  373. 373                   DialogBox(hInst, "COLORDLG", hDlg,
  374. 374                                    lpColorDlgProc);
  375. 375 
  376. 376                   FreeProcInstance(lpColorDlgProc);
  377. 377 
  378. 378                   hCtrlGraph = GetDlgItem(hDlg, DI_BGRAPH);
  379. 379                   ReDrawBrushGraph(hCtrlGraph);
  380. 380 
  381. 381                   hCtrl = GetDlgItem(hDlg, DI_BC01+
  382. 382                                           nChooseColor);
  383. 383                   InvalidateRect(hCtrl, NULL, TRUE);
  384. 384                   return(TRUE);
  385. 385 
  386. 386               default :
  387. 387                   if (wParam>=DI_BC01 && wParam<=DI_BC28)
  388. 388                     {
  389. 389                       nChooseColor = wParam-DI_BC01;
  390. 390                       hCtrlGraph =
  391. 391                          GetDlgItem(hDlg, DI_BGRAPH);
  392. 392                       ReDrawBrushGraph(hCtrlGraph);
  393. 393                     }
  394. 394                   else if (wParam>=DI_H01 && wParam<=DI_H07)
  395. 395                     {
  396. 396                       nChooseHatch = wParam-DI_H02;
  397. 397                       hCtrlGraph = GetDlgItem(hDlg, DI_BGRAPH);
  398. 398                       ReDrawBrushGraph(hCtrlGraph);
  399. 399                     }
  400. 400             }
  401. 401           return (TRUE);
  402. 402 
  403. 403        default :
  404. 404           return (FALSE);
  405. 405      }
  406. 406 }
  407. 407 
  408. 408 
  409. 409 
  410. 410 void ReDrawNewColor(HDC hCtrl, int Temp[3])
  411. 411 {
  412. 412    HWND     hWnd;
  413. 413    RECT     Client;
  414. 414    HDC      hDC;
  415. 415    HPEN     hPen, hPrePen;
  416. 416    HBRUSH   hBrush, hPreBrush;
  417. 417    COLORREF crBkColor, crColor;
  418. 418 
  419. 419    hDC = GetDC(hCtrl);
  420. 420    GetClientRect(hCtrl, &Client);
  421. 421 
  422. 422    hBrush = MyCreateBrush(-1,
  423. 423                         RGB(Temp[0], Temp[1], Temp[2]));
  424. 424    hPreBrush = SelectObject(hDC, hBrush);
  425. 425 
  426. 426    Rectangle(hDC, Client.left, Client.top,
  427. 427                   Client.right, Client.bottom);
  428. 428 
  429. 429    SelectObject(hDC, hPreBrush);
  430. 430    DeleteObject(hBrush);
  431. 431 
  432. 432    ReleaseDC(hCtrl, hDC);
  433. 433 }
  434. 434 
  435. 435 
  436. 436 BOOL FAR PASCAL ColorDlgProc(HWND hDlg, unsigned msg,
  437. 437                              WORD wParam, LONG lParam)
  438. 438 {
  439. 439    HANDLE     hCtrl, hCtrlNewColor;
  440. 440    int        hCtrlID, i, nIndex;
  441. 441    int        nCurValue;
  442. 442    BOOL       bTran;
  443. 443    static int Temp[3];
  444. 444    static COLORSTRUCT *crColorArr;
  445. 445 
  446. 446    switch (msg)
  447. 447      {
  448. 448        case WM_INITDIALOG :
  449. 449           if (nCurDlgID == IDM_CHOOSEPEN)
  450. 450             crColorArr = crPCurColor;
  451. 451           else
  452. 452             crColorArr = crBCurColor;
  453. 453 
  454. 454           Temp[0] = crColorArr[nChooseColor].cR;
  455. 455           Temp[1] = crColorArr[nChooseColor].cG;
  456. 456           Temp[2] = crColorArr[nChooseColor].cB;
  457. 457 
  458. 458           for (i=0; i<3; i++)
  459. 459             {
  460. 460               hCtrl = GetDlgItem(hDlg, i+DI_SCR1);
  461. 461               SetScrollRange(hCtrl, SB_CTL, 0, 255, FALSE);
  462. 462               SetScrollPos(hCtrl, SB_CTL, Temp[i],  FALSE);
  463. 463 
  464. 464               SetDlgItemInt(hDlg, DI_RVALUE+i, Temp[i],
  465. 465                             FALSE);
  466. 466             }
  467. 467           return (TRUE);
  468. 468 
  469. 469        case WM_CLOSE :
  470. 470           EndDialog(hDlg, FALSE);
  471. 471           return (TRUE);
  472. 472 
  473. 473        case WM_PAINT :
  474. 474           hCtrlNewColor = GetDlgItem(hDlg, DI_NEWCOLOR);
  475. 475           ReDrawNewColor(hCtrlNewColor, Temp);
  476. 476           return (FALSE);
  477. 477 
  478. 478        case WM_COMMAND :
  479. 479           switch (wParam)
  480. 480             {
  481. 481               case DI_OK :
  482. 482                   crColorArr[nChooseColor].cR = Temp[0];
  483. 483                   crColorArr[nChooseColor].cG = Temp[1];
  484. 484                   crColorArr[nChooseColor].cB = Temp[2];
  485. 485 
  486. 486                   EndDialog(hDlg, TRUE);
  487. 487                   return (TRUE);
  488. 488 
  489. 489               case DI_CANCEL :
  490. 490                   EndDialog(hDlg, FALSE);
  491. 491                   return (TRUE);
  492. 492 
  493. 493               case DI_RESET :
  494. 494                   Temp[0] = crDefColor[nChooseColor].cR;
  495. 495                   Temp[1] = crDefColor[nChooseColor].cG;
  496. 496                   Temp[2] = crDefColor[nChooseColor].cB;
  497. 497 
  498. 498                   for (i=0; i<3; i++)
  499. 499                     {
  500. 500                       hCtrl = GetDlgItem(hDlg, i+DI_SCR1);
  501. 501                       SetScrollPos(hCtrl, SB_CTL, Temp[i],
  502. 502                                    TRUE);
  503. 503 
  504. 504                       SetDlgItemInt(hDlg, DI_RVALUE+i,
  505. 505                                     Temp[i], FALSE);
  506. 506                     }
  507. 507 
  508. 508                   hCtrlNewColor = GetDlgItem(hDlg,
  509. 509                                          DI_NEWCOLOR);
  510. 510                   ReDrawNewColor(hCtrlNewColor, Temp);
  511. 511                   return (TRUE);
  512. 512 
  513. 513               case DI_RVALUE :
  514. 514               case DI_GVALUE :
  515. 515               case DI_BVALUE :
  516. 516 
  517. 517                   if (HIWORD(lParam) != EN_CHANGE)
  518. 518                     return (FALSE);
  519. 519 
  520. 520                   nCurValue = GetDlgItemInt(hDlg, wParam,
  521. 521                                            &bTran, FALSE);
  522. 522                   nIndex = wParam - DI_RVALUE;
  523. 523                   if (Temp[nIndex] != nCurValue)
  524. 524                     {
  525. 525                       Temp[nIndex] = min(255, nCurValue);
  526. 526                       if (nCurValue > 255)
  527. 527                          SetDlgItemInt(hDlg, DI_RVALUE+nIndex,
  528. 528                                        Temp[nIndex], FALSE);
  529. 529 
  530. 530                       hCtrl = GetDlgItem(hDlg, nIndex+DI_SCR1);
  531. 531                       SetScrollPos(hCtrl, SB_CTL,
  532. 532                                    Temp[nIndex], TRUE);
  533. 533 
  534. 534                       hCtrlNewColor = GetDlgItem(hDlg,
  535. 535                                                 DI_NEWCOLOR);
  536. 536                       ReDrawNewColor(hCtrlNewColor, Temp);
  537. 537                     }
  538. 538                   return (FALSE);
  539. 539             }
  540. 540           return (TRUE);
  541. 541 
  542. 542        case WM_HSCROLL :
  543. 543           hCtrl = HIWORD(lParam);
  544. 544           hCtrlID = GetWindowWord(hCtrl, GWW_ID);
  545. 545 
  546. 546           nIndex = hCtrlID - DI_SCR1;
  547. 547 
  548. 548           switch (wParam)
  549. 549             {
  550. 550               case SB_PAGEDOWN :
  551. 551                  Temp[nIndex] = Temp[nIndex] + 16;
  552. 552                  break;
  553. 553 
  554. 554               case SB_PAGEUP :
  555. 555                  Temp[nIndex] = Temp[nIndex] - 16;
  556. 556                  break;
  557. 557 
  558. 558               case SB_LINEDOWN :
  559. 559                  Temp[nIndex] ++;
  560. 560                  break;
  561. 561 
  562. 562               case SB_LINEUP :
  563. 563                  Temp[nIndex] --;
  564. 564                  break;
  565. 565 
  566. 566               case SB_TOP :
  567. 567                  Temp[nIndex] = 0;
  568. 568                  break;
  569. 569 
  570. 570               case SB_BOTTOM :
  571. 571                  Temp[nIndex] = 255;
  572. 572                  break;
  573. 573 
  574. 574               case SB_THUMBTRACK :
  575. 575               case SB_THUMBPOSITION :
  576. 576                  Temp[nIndex] = LOWORD(lParam);
  577. 577                  break;
  578. 578             }
  579. 579 
  580. 580           Temp[nIndex] = max(0,min(255,Temp[nIndex]));
  581. 581           SetScrollPos(hCtrl, SB_CTL, Temp[nIndex], TRUE);
  582. 582           SetDlgItemInt(hDlg, DI_RVALUE+nIndex,
  583. 583                         Temp[nIndex], FALSE);
  584. 584 
  585. 585           hCtrlNewColor = GetDlgItem(hDlg, DI_NEWCOLOR);
  586. 586           ReDrawNewColor(hCtrlNewColor, Temp);
  587. 587 
  588. 588           return (TRUE);
  589. 589 
  590. 590        default :
  591. 591           return (FALSE);
  592. 592      }
  593. 593 }