#include "stdafx.h" #include "common.h" extern RGBQUAD DefaultColorTable16[16]; BOOL CALLBACK DlgIconColorProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){ extern HANDLE hHeap; extern COLORREF TransparentClrRef; int i,i2,WndNum; RGBQUAD *pRgbq; RECT rect; POINT pos,pos2; COLORREF ColorRef; HDC hdc; switch(message){ case WM_LBUTTONDOWN: case WM_RBUTTONDOWN: pos.x=LOWORD(lParam); pos.y=HIWORD(lParam); WndNum=GetWndNum(GetParent(hwnd)); pos2=pos; ClientToScreen(hwnd,&pos2); ScreenToClient(GetDlgItem(hwnd,IDC_STATIC_COLOR),&pos2); if((8+1)*15MdiIconEditInfo->MainColor=TransparentClrRef; else MdiInfo[WndNum]->MdiIconEditInfo->SubColor=TransparentClrRef; InvalidateRect(hwnd,NULL,0); return 1; } if(pos2.x%15==0||pos2.x%15>=12|| pos2.y%15==0||pos2.y%15>=12|| 0>pos2.x||pos2.x/15>=8|| 0>pos2.y||pos2.y/15>=2){ //パディング部分をクリックした場合は抜け出す return 1; } //選択カラーを取得 hdc=GetDC(hwnd); ColorRef=GetPixel(hdc,pos.x,pos.y); ReleaseDC(hwnd,hdc); if(message==WM_LBUTTONDOWN) MdiInfo[WndNum]->MdiIconEditInfo->MainColor=ColorRef; else MdiInfo[WndNum]->MdiIconEditInfo->SubColor=ColorRef; InvalidateRect(hwnd,NULL,0); return 1; case WM_PAINT: WndNum=GetWndNum(GetParent(hwnd)); if(WndNum==-1) break; //////////////////////// // カラーテーブルを表示 PAINTSTRUCT ps; HPEN hPen,hOldPen; HBRUSH hBrush,hOldBrush; GetWindowRect(GetDlgItem(hwnd,IDC_STATIC_COLOR),&rect); pos.x=rect.left; pos.y=rect.top; ScreenToClient(hwnd,&pos); GetWindowRect(GetDlgItem(hwnd,IDC_NOWCOLOR),&rect); pos2.x=rect.left; pos2.y=rect.top; ScreenToClient(hwnd,&pos2); //カラーテーブルを取得 pRgbq=(RGBQUAD *)(MdiInfo[WndNum]->MdiIconEditInfo->pIconImage[MdiInfo[WndNum]->MdiIconEditInfo->SelectIconNum]+sizeof(BITMAPINFOHEADER)); hdc=BeginPaint(hwnd,&ps); hPen=CreatePen(PS_SOLID,0,RGB(0,0,0)); hOldPen=(HPEN)SelectObject(hdc,hPen); if(MdiInfo[WndNum]->MdiIconEditInfo->pBmpHdr[MdiInfo[WndNum]->MdiIconEditInfo->SelectIconNum]->biBitCount==4){ //////// // 16色 //カラーテーブルを描画 i2=16; for(i=0;iMdiIconEditInfo->SubColor); hOldBrush=(HBRUSH)SelectObject(hdc,hBrush); Rectangle(hdc, pos2.x+10, pos2.y+10, pos2.x+23, pos2.y+23); SelectObject(hdc,hOldBrush); DeleteObject(hBrush); //現在選択中のメインカラーを表示 hBrush=CreateSolidBrush(MdiInfo[WndNum]->MdiIconEditInfo->MainColor); hOldBrush=(HBRUSH)SelectObject(hdc,hBrush); Rectangle(hdc, pos2.x+3, pos2.y+3, pos2.x+16, pos2.y+16); SelectObject(hdc,hOldBrush); DeleteObject(hBrush); SelectObject(hdc,hOldPen); DeleteObject(hPen); EndPaint(hwnd,&ps); return 1; } return 0; }