2 * PROJECT: PAINT for ReactOS
4 * FILE: base/applications/paint/palette.c
5 * PURPOSE: Window procedure of the palette window
6 * PROGRAMMERS: Benedikt Freisen
9 /* INCLUDES *********************************************************/
13 /* FUNCTIONS ********************************************************/
16 PalWinProc(HWND hwnd
, UINT message
, WPARAM wParam
, LPARAM lParam
)
22 RECT rc
= { 0, 0, 31, 32 };
23 HDC hDC
= GetDC(hwnd
);
28 DefWindowProc(hwnd
, message
, wParam
, lParam
);
30 for(b
= 2; b
< 30; b
++)
31 for(a
= 2; a
< 29; a
++)
33 SetPixel(hDC
, a
, b
, GetSysColor(COLOR_BTNHILIGHT
));
35 DrawEdge(hDC
, &rc
, EDGE_RAISED
, BF_TOPLEFT
);
36 DrawEdge(hDC
, &rc
, BDR_SUNKENOUTER
, BF_TOPLEFT
| BF_BOTTOMRIGHT
);
37 SetRect(&rc
, 11, 12, 26, 27);
38 DrawEdge(hDC
, &rc
, BDR_RAISEDINNER
, BF_RECT
| BF_MIDDLE
);
39 oldPen
= SelectObject(hDC
, CreatePen(PS_NULL
, 0, 0));
40 oldBrush
= SelectObject(hDC
, CreateSolidBrush(bgColor
));
41 Rectangle(hDC
, rc
.left
, rc
.top
+ 2, rc
.right
- 1, rc
.bottom
- 1);
42 DeleteObject(SelectObject(hDC
, oldBrush
));
43 SetRect(&rc
, 4, 5, 19, 20);
44 DrawEdge(hDC
, &rc
, BDR_RAISEDINNER
, BF_RECT
| BF_MIDDLE
);
45 oldBrush
= SelectObject(hDC
, CreateSolidBrush(fgColor
));
46 Rectangle(hDC
, rc
.left
+ 2, rc
.top
+ 2, rc
.right
- 1, rc
.bottom
- 1);
47 DeleteObject(SelectObject(hDC
, oldBrush
));
48 DeleteObject(SelectObject(hDC
, oldPen
));
50 for(i
= 0; i
< 28; i
++)
52 SetRect(&rc
, 31 + (i
% 14) * 16,
53 0 + (i
/ 14) * 16, 16 + 31 + (i
% 14) * 16, 16 + 0 + (i
/ 14) * 16);
54 DrawEdge(hDC
, &rc
, EDGE_RAISED
, BF_TOPLEFT
);
55 DrawEdge(hDC
, &rc
, BDR_SUNKENOUTER
, BF_RECT
);
56 oldPen
= SelectObject(hDC
, CreatePen(PS_NULL
, 0, 0));
57 oldBrush
= SelectObject(hDC
, CreateSolidBrush(palColors
[i
]));
58 Rectangle(hDC
, rc
.left
+ 2, rc
.top
+ 2, rc
.right
- 1, rc
.bottom
- 1);
59 DeleteObject(SelectObject(hDC
, oldBrush
));
60 DeleteObject(SelectObject(hDC
, oldPen
));
66 if (LOWORD(lParam
) >= 31)
68 fgColor
= palColors
[(LOWORD(lParam
) - 31) / 16 + (HIWORD(lParam
) / 16) * 14];
69 SendMessage(hwnd
, WM_PAINT
, 0, 0);
73 if (LOWORD(lParam
) >= 31)
75 bgColor
= palColors
[(LOWORD(lParam
) - 31) / 16 + (HIWORD(lParam
) / 16) * 14];
76 SendMessage(hwnd
, WM_PAINT
, 0, 0);
79 case WM_LBUTTONDBLCLK
:
80 if (LOWORD(lParam
) >= 31)
81 if (ChooseColor(&choosecolor
))
83 palColors
[(LOWORD(lParam
) - 31) / 16 + (HIWORD(lParam
) / 16) * 14] =
84 choosecolor
.rgbResult
;
85 fgColor
= choosecolor
.rgbResult
;
86 SendMessage(hwnd
, WM_PAINT
, 0, 0);
89 case WM_RBUTTONDBLCLK
:
90 if (LOWORD(lParam
) >= 31)
91 if (ChooseColor(&choosecolor
))
93 palColors
[(LOWORD(lParam
) - 31) / 16 + (HIWORD(lParam
) / 16) * 14] =
94 choosecolor
.rgbResult
;
95 bgColor
= choosecolor
.rgbResult
;
96 SendMessage(hwnd
, WM_PAINT
, 0, 0);
101 return DefWindowProc(hwnd
, message
, wParam
, lParam
);