source: dev/ProjectEditor/IconEditor_Color.cpp@ 3

Last change on this file since 3 was 3, checked in by dai_9181, 17 years ago
File size: 4.5 KB
Line 
1#include "common.h"
2
3extern RGBQUAD DefaultColorTable16[16];
4
5BOOL CALLBACK DlgIconColorProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
6 extern HANDLE hHeap;
7 extern MDIINFO MdiInfo[MAX_WNDNUM];
8 extern COLORREF TransparentClrRef;
9 int i,i2,WndNum;
10 RGBQUAD *pRgbq;
11 RECT rect;
12 POINT pos,pos2;
13 COLORREF ColorRef;
14 HDC hdc;
15
16 switch(message){
17 case WM_LBUTTONDOWN:
18 case WM_RBUTTONDOWN:
19 pos.x=LOWORD(lParam);
20 pos.y=HIWORD(lParam);
21
22 WndNum=GetWndNum(GetParent(hwnd));
23
24 pos2=pos;
25 ClientToScreen(hwnd,&pos2);
26 ScreenToClient(GetDlgItem(hwnd,IDC_STATIC_COLOR),&pos2);
27
28 if((8+1)*15<pos2.x&&pos2.x<(8+1)*15+13&&
29 0<pos2.y&&pos2.y<13){
30 //透明色をクリックした場合
31 if(message==WM_LBUTTONDOWN)
32 MdiInfo[WndNum].MdiIconEditInfo->MainColor=TransparentClrRef;
33 else
34 MdiInfo[WndNum].MdiIconEditInfo->SubColor=TransparentClrRef;
35 InvalidateRect(hwnd,NULL,0);
36 return 1;
37 }
38
39 if(pos2.x%15==0||pos2.x%15>=12||
40 pos2.y%15==0||pos2.y%15>=12||
41 0>pos2.x||pos2.x/15>=8||
42 0>pos2.y||pos2.y/15>=2){
43 //パディング部分をクリックした場合は抜け出す
44 return 1;
45 }
46
47 //選択カラーを取得
48 hdc=GetDC(hwnd);
49 ColorRef=GetPixel(hdc,pos.x,pos.y);
50 ReleaseDC(hwnd,hdc);
51
52 if(message==WM_LBUTTONDOWN)
53 MdiInfo[WndNum].MdiIconEditInfo->MainColor=ColorRef;
54 else
55 MdiInfo[WndNum].MdiIconEditInfo->SubColor=ColorRef;
56
57 InvalidateRect(hwnd,NULL,0);
58 return 1;
59 case WM_PAINT:
60 WndNum=GetWndNum(GetParent(hwnd));
61 if(WndNum==-1) break;
62
63 ////////////////////////
64 // カラーテーブルを表示
65 PAINTSTRUCT ps;
66 HPEN hPen,hOldPen;
67 HBRUSH hBrush,hOldBrush;
68
69 GetWindowRect(GetDlgItem(hwnd,IDC_STATIC_COLOR),&rect);
70 pos.x=rect.left;
71 pos.y=rect.top;
72 ScreenToClient(hwnd,&pos);
73 GetWindowRect(GetDlgItem(hwnd,IDC_NOWCOLOR),&rect);
74 pos2.x=rect.left;
75 pos2.y=rect.top;
76 ScreenToClient(hwnd,&pos2);
77
78 //カラーテーブルを取得
79 pRgbq=(RGBQUAD *)(MdiInfo[WndNum].MdiIconEditInfo->pIconImage[MdiInfo[WndNum].MdiIconEditInfo->SelectIconNum]+sizeof(BITMAPINFOHEADER));
80
81 hdc=BeginPaint(hwnd,&ps);
82 hPen=CreatePen(PS_SOLID,0,RGB(0,0,0));
83 hOldPen=(HPEN)SelectObject(hdc,hPen);
84 if(MdiInfo[WndNum].MdiIconEditInfo->pBmpHdr[MdiInfo[WndNum].MdiIconEditInfo->SelectIconNum]->biBitCount==4){
85 ////////
86 // 16色
87
88 //カラーテーブルを描画
89 i2=16;
90 for(i=0;i<i2;i++){
91 hBrush=CreateSolidBrush(RGB(pRgbq[i].rgbRed,pRgbq[i].rgbGreen,pRgbq[i].rgbBlue));
92 hOldBrush=(HBRUSH)SelectObject(hdc,hBrush);
93 if(i<i2/2){
94 Rectangle(hdc,
95 pos.x+i*15,
96 pos.y,
97 pos.x+i*15+13,
98 pos.y+13);
99 }
100 else{
101 Rectangle(hdc,
102 pos.x+(i-i2/2)*15,
103 pos.y+15,
104 pos.x+(i-i2/2)*15+13,
105 pos.y+15+13);
106 }
107 SelectObject(hdc,hOldBrush);
108 DeleteObject(hBrush);
109 }
110 }
111 else{
112 /////////
113 // 256色
114
115 //カラーテーブルを描画
116 i2=16;
117 for(i=0;i<i2;i++){
118 hBrush=CreateSolidBrush(RGB(DefaultColorTable16[i].rgbRed,DefaultColorTable16[i].rgbGreen,DefaultColorTable16[i].rgbBlue));
119 hOldBrush=(HBRUSH)SelectObject(hdc,hBrush);
120 if(i<i2/2){
121 Rectangle(hdc,
122 pos.x+i*15,
123 pos.y,
124 pos.x+i*15+13,
125 pos.y+13);
126 }
127 else{
128 Rectangle(hdc,
129 pos.x+(i-i2/2)*15,
130 pos.y+15,
131 pos.x+(i-i2/2)*15+13,
132 pos.y+15+13);
133 }
134 SelectObject(hdc,hOldBrush);
135 DeleteObject(hBrush);
136 }
137 }
138
139 //透明色カラーを表示
140 hBrush=CreateSolidBrush(TransparentClrRef);
141 hOldBrush=(HBRUSH)SelectObject(hdc,hBrush);
142 Rectangle(hdc,
143 pos.x+(i2/2+1)*15,
144 pos.y,
145 pos.x+(i2/2+1)*15+13,
146 pos.y+13);
147 SelectObject(hdc,hOldBrush);
148 DeleteObject(hBrush);
149
150 MoveToEx(hdc,pos.x+(i2/2+1)*15,pos.y,NULL);
151 LineTo(hdc,pos.x+(i2/2+1)*15+13,pos.y+13);
152
153
154 //現在選択中のサブカラーを表示
155 hBrush=CreateSolidBrush(MdiInfo[WndNum].MdiIconEditInfo->SubColor);
156 hOldBrush=(HBRUSH)SelectObject(hdc,hBrush);
157 Rectangle(hdc,
158 pos2.x+10,
159 pos2.y+10,
160 pos2.x+23,
161 pos2.y+23);
162 SelectObject(hdc,hOldBrush);
163 DeleteObject(hBrush);
164
165 //現在選択中のメインカラーを表示
166 hBrush=CreateSolidBrush(MdiInfo[WndNum].MdiIconEditInfo->MainColor);
167 hOldBrush=(HBRUSH)SelectObject(hdc,hBrush);
168 Rectangle(hdc,
169 pos2.x+3,
170 pos2.y+3,
171 pos2.x+16,
172 pos2.y+16);
173 SelectObject(hdc,hOldBrush);
174 DeleteObject(hBrush);
175
176 SelectObject(hdc,hOldPen);
177 DeleteObject(hPen);
178 EndPaint(hwnd,&ps);
179 return 1;
180 }
181 return 0;
182}
Note: See TracBrowser for help on using the repository browser.