source: dev/trunk/ab5.0/abdev/abdev/IconEditor_Color.cpp@ 681

Last change on this file since 681 was 629, checked in by dai_9181, 16 years ago

MDIINFO構造体をリファクタリング。

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