// wincolor.c RHS 1/25/91 #include #include #include #include #include #include #define SC_USER (0xF000-1) #define SC_ABOUT SC_USER #define SC_AUTOSAVE SC_USER-1 #define SC_AUTOLOAD SC_USER-2 #define SC_AUTOPILOT SC_USER-3 #define SC_AUTOUPDATE SC_USER-4 #define WM_MYINIT (WM_USER + 1) #define LastChar(s) (s[strlen(s)-1]) #define MAXWINDOWSPARM 256 #define MAXFILENAME 80 typedef struct _colorrect { RECT r; DWORD color; BOOL solidonly; } CRECT; #define MAX_WININICOLORS 19 // offset of first system color #define CRECTS_SYSCOLORS 2 // # of system colors #define MAX_SYSCOLORS COLOR_ENDCOLORS+1 // offset of custom colors #define CRECTS_CUSTCOLORS CRECTS_SYSCOLORS+19 // # of custom colors #define MAX_CUSTCOLORS 36 // # of rectangles in the dialog (on-screen) #define MAX_DLGRECTS CRECTS_CUSTCOLORS+MAX_CUSTCOLORS // offset of first Windows color #define CRECTS_WINCOLORS MAX_DLGRECTS // size of rectangle array #define MAXRECTS MAX_DLGRECTS+19 CRECT CRects[MAXRECTS] = { { 56, 3, 65, 12, 0x00ffffff, FALSE }, // selected color { 4, 24, 46, 62, 0x00ffffff, FALSE }, // work area { 183, 110, 203, 117, 0x00ffffff, FALSE }, // scroll-bars { 183, 126, 203, 133, 0x00ffffff, FALSE }, // desktop b-ground { 70, 124, 90, 131, 0x00ffffff, FALSE }, // active titlebar { 70, 134, 90, 141, 0x00ffffff, FALSE }, // inactive titlebar { 161, 78, 181, 85, 0x00ffffff, TRUE }, // menu { 70, 96, 90, 103, 0x00ffffff, TRUE }, // window background { 70, 78, 90, 85, 0x00ffffff, TRUE }, // frame { 161, 69, 181, 76, 0x00ffffff, TRUE }, // menu text { 70, 69, 90, 76, 0x00ffffff, TRUE }, // window text { 70, 87, 90, 94, 0x00ffffff, TRUE }, // caption text { 70, 105, 90, 112, 0x00ffffff, FALSE }, // active border { 70, 114, 90, 121, 0x00ffffff, FALSE }, // inactive border { 183, 134, 203, 141, 0x00ffffff, FALSE }, // application workspace { 161, 87, 181, 94, 0x00ffffff, TRUE }, // menu highlight { 161, 96, 181, 103, 0x00ffffff, TRUE }, // text in menu highlight { 241, 126, 261, 133, 0x00ffffff, FALSE }, // button face { 241, 136, 261, 143, 0x00ffffff, FALSE }, // button shadow { 183, 118, 203, 125, 0x00ffffff, TRUE }, // grayed text { 241, 116, 261, 123, 0x00ffffff, TRUE }, // button text { 188, 30, 197, 39, 0x00ffffff, FALSE}, // custom colors { 201, 30, 210, 39, 0x00ffffff, FALSE}, { 214, 30, 223, 39, 0x00ffffff, FALSE}, { 227, 30, 236, 39, 0x00ffffff, FALSE}, { 240, 30, 249, 39, 0x00ffffff, FALSE}, { 253, 30, 262, 39, 0x00ffffff, FALSE}, { 188, 42, 197, 51, 0x00ffffff, FALSE}, { 201, 42, 210, 51, 0x00ffffff, FALSE}, { 214, 42, 223, 51, 0x00ffffff, FALSE}, { 227, 42, 236, 51, 0x00ffffff, FALSE}, { 240, 42, 249, 51, 0x00ffffff, FALSE}, { 253, 42, 262, 51, 0x00ffffff, FALSE}, { 188, 54, 197, 63, 0x00ffffff, FALSE}, { 201, 54, 210, 63, 0x00ffffff, FALSE}, { 214, 54, 223, 63, 0x00ffffff, FALSE}, { 227, 54, 236, 63, 0x00ffffff, FALSE}, { 240, 54, 249, 63, 0x00ffffff, FALSE}, { 253, 54, 262, 63, 0x00ffffff, FALSE}, { 188, 66, 197, 75, 0x00ffffff, FALSE}, { 201, 66, 210, 75, 0x00ffffff, FALSE}, { 214, 66, 223, 75, 0x00ffffff, FALSE}, { 227, 66, 236, 75, 0x00ffffff, FALSE}, { 240, 66, 249, 75, 0x00ffffff, FALSE}, { 253, 66, 262, 75, 0x00ffffff, FALSE}, { 188, 78, 197, 87, 0x00ffffff, FALSE}, { 201, 78, 210, 87, 0x00ffffff, FALSE}, { 214, 78, 223, 87, 0x00ffffff, FALSE}, { 227, 78, 236, 87, 0x00ffffff, FALSE}, { 240, 78, 249, 87, 0x00ffffff, FALSE}, { 253, 78, 262, 87, 0x00ffffff, FALSE}, { 188, 90, 197, 99, 0x00ffffff, FALSE}, { 201, 90, 210, 99, 0x00ffffff, FALSE}, { 214, 90, 223, 99, 0x00ffffff, FALSE}, { 227, 90, 236, 99, 0x00ffffff, FALSE}, { 240, 90, 249, 99, 0x00ffffff, FALSE}, { 253, 90, 262, 99, 0x00ffffff, FALSE}, { 0,0,0,0, 0x00ffffff, FALSE}, // Windows colors { 0,0,0,0, 0x00ffffff, FALSE}, { 0,0,0,0, 0x00ffffff, FALSE}, { 0,0,0,0, 0x00ffffff, FALSE}, { 0,0,0,0, 0x00ffffff, FALSE}, { 0,0,0,0, 0x00ffffff, FALSE}, { 0,0,0,0, 0x00ffffff, FALSE}, { 0,0,0,0, 0x00ffffff, FALSE}, { 0,0,0,0, 0x00ffffff, FALSE}, { 0,0,0,0, 0x00ffffff, FALSE}, { 0,0,0,0, 0x00ffffff, FALSE}, { 0,0,0,0, 0x00ffffff, FALSE}, { 0,0,0,0, 0x00ffffff, FALSE}, { 0,0,0,0, 0x00ffffff, FALSE}, { 0,0,0,0, 0x00ffffff, FALSE}, { 0,0,0,0, 0x00ffffff, FALSE}, { 0,0,0,0, 0x00ffffff, FALSE}, { 0,0,0,0, 0x00ffffff, FALSE}, { 0,0,0,0, 0x00ffffff, FALSE} }; int colorIndex[19] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 }; DWORD OrgColorVals[19]; #define SelectedColor CRects[0] #define WorkArea CRects[1] static char szCopyRight[] = " WinColor, Copyright (C) Richard Hale Shaw, 1991 "; static char szWinColor[] = "WinColor"; static char szAbout[] = "About..."; static char szAutoSave[] = "AutoSave"; static char szAutoLoad[] = "AutoLoad"; static char szAutoPilot[] = "AutoPilot"; static char szAutoUpdate[] = "Update WIN.INI"; static char szWinColorIni[] = "WINCOLOR.INI"; BOOL Set = FALSE; BOOL AutoSave = FALSE; BOOL AutoLoad = FALSE; BOOL AutoPilot = FALSE; BOOL AutoUpdate = FALSE; char szAppName[MAXFILENAME]; HCURSOR hNormalCursor, hHourGlassCursor; HANDLE hPrev; LPSTR CmdLine; HANDLE hInst; HICON WinColorIcon; HWND WinColorDlg; long FAR PASCAL WndProc(HWND, WORD, WORD, LONG); HANDLE FAR PASCAL MainWindowDlg(HWND hDlg, unsigned message, WORD wParam, LONG lParam); void UpdateSystemMenu(void); void SelectColor(LONG lParam); void PaintWorkArea(LONG lParam); void _PaintWorkArea(DWORD color, BOOL paintrects); void _PaintCombo(DWORD color); void _PaintRect(CRECT *crect, DWORD color); void DlgPaint(HWND hWnd); void PaintRect(LONG lParam); void doubleRECT(RECT *r); void HScroll(WORD wParam, LONG lParam); void SetScrollValues(void); void InitArray(void); void SetColors(void); void SaveOrgColors(void); void RestoreColors(BOOL reset); void SaveColorsToIni(BOOL changecursor, BOOL savecomponentcolors); void GetColorsFromIni(void); BOOL IniFile(char *filename,WORD operation); void Autoload(void); void SetColorsFromWinColors(void); void UpdateWinIni(void); char *MakeWinDirFileName(char *filename); void _PaintSolidRect(DWORD color); BOOL FAR PASCAL DialogProc(HWND hDlg, unsigned message, WORD wParam, LONG lParam); int PASCAL WinMain(HANDLE hInstance, HANDLE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { MSG msg; WNDCLASS wndclass; hPrev = hPrevInstance; hInst = hInstance; InitArray(); // initialize arrays and read WINCOLOR.INI if(AutoPilot) // if AutoPilot is on, see if any command-line parameters { char buf[50]; lstrcpy(buf,lpCmdLine); // copy command-line into buf if(!strlen(buf)) // if no command-line parameters... { SetColorsFromWinColors(); // ...set System Colors and get out return 0; } } SaveOrgColors(); // initialize OrgColorVals from System Colors if(!hPrevInstance) { wndclass.style = CS_DBLCLKS; wndclass.lpfnWndProc = WndProc; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = DLGWINDOWEXTRA; wndclass.hInstance = hInstance; wndclass.hIcon = WinColorIcon = LoadIcon(hInstance,szWinColor); wndclass.hCursor = LoadCursor(NULL,IDC_ARROW); wndclass.hbrBackground = COLOR_WINDOW+1; // 0; // GetStockObject(WHITE_BRUSH); wndclass.lpszMenuName = NULL; wndclass.lpszClassName = szWinColor; RegisterClass(&wndclass); } hNormalCursor = LoadCursor(NULL, IDC_ARROW); hHourGlassCursor = LoadCursor(NULL, IDC_WAIT); WinColorDlg = CreateDialog(hInstance,szWinColor, 0, NULL); GetModuleFileName(GetClassWord(WinColorDlg,GCW_HMODULE), szAppName, MAXFILENAME-1); ShowWindow(WinColorDlg, nCmdShow); while(GetMessage(&msg, NULL, 0, 0)) { if(!WinColorDlg || !IsDialogMessage(WinColorDlg,&msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } } return (msg.wParam); } #define LBUTTONDCLICK 1 #define MY_LBUTTON 0xffff #define SET 253 #define RESTORE 254 #define SAVE 255 #define HELP 256 static HWND hRedScroll, hGreenScroll, hBlueScroll; int SolidTextControlIds[10] = { 215, 217, 219, 221, 231, 233, 235, 236, 247, 241 }; long FAR PASCAL WndProc(HWND hDlg, unsigned message, WORD wParam, LONG lParam) { static BOOL LB_Dclick = FALSE; static LONG templParam; static BOOL init = FALSE; static HBRUSH SolidTextBrush; switch(message) { case WM_CREATE: WinColorDlg = hDlg; UpdateSystemMenu(); SolidTextBrush = CreateSolidBrush(GetSysColor(COLOR_WINDOW)); SetFocus(GetDlgItem(hDlg, SET)); break; case WM_CTLCOLOR: if(HIWORD(lParam) == CTLCOLOR_STATIC) { int i; for(i = 0; i < 10; i++) if(GetDlgCtrlID(LOWORD(lParam)) == SolidTextControlIds[i]) { SetBkColor(wParam,GetSysColor(COLOR_WINDOW)); SetTextColor(wParam,0x000000ff); UnrealizeObject(SolidTextBrush); return (DWORD)SolidTextBrush; } } if(!init && HIWORD(lParam) == CTLCOLOR_SCROLLBAR) { HWND hw = LOWORD(lParam); switch(GetWindowWord(hw,GWW_ID)) { case 211: hRedScroll = hw; break; case 212: hGreenScroll = hw; break; case 213: hBlueScroll = hw; break; } if(hRedScroll && hGreenScroll && hBlueScroll) PostMessage(hDlg,WM_MYINIT,0,0L); } goto defwindowproc; case WM_MYINIT: { if(!init) { SetScrollRange(hRedScroll,SB_CTL,0,255,FALSE); SetScrollRange(hGreenScroll,SB_CTL,0,255,FALSE); SetScrollRange(hBlueScroll,SB_CTL,0,255,FALSE); _PaintWorkArea(WorkArea.color, FALSE); init = TRUE; SetFocus(GetDlgItem(hDlg, SET)); } } break; case WM_PAINT: DlgPaint(hDlg); break; case WM_QUERYENDSESSION: case WM_CLOSE: { BOOL savecomponentcolors = FALSE; if(Set) if(AutoSave || (MessageBox(hDlg,"Save Color Changes?",szWinColor, MB_ICONQUESTION | MB_YESNO) == IDYES)) { SaveOrgColors(); //RestoreColors(FALSE); savecomponentcolors = TRUE; } SetCursor(hHourGlassCursor); SaveColorsToIni(FALSE,savecomponentcolors); if(AutoUpdate) UpdateWinIni(); if(message == WM_QUERYENDSESSION) return 1L; else // WM_CLOSE DestroyWindow(hDlg); } break; case WM_DESTROY: WinColorDlg = 0; SetCursor(hNormalCursor); PostQuitMessage(0); break; case WM_TIMER: // timer message if(wParam == LBUTTONDCLICK) { KillTimer(hDlg,LBUTTONDCLICK); if(!LB_Dclick) SendMessage(hDlg,WM_LBUTTONDOWN,MY_LBUTTON,templParam); else LB_Dclick = FALSE; break; } break; case WM_RBUTTONDOWN: PaintRect(lParam); break; case WM_LBUTTONDOWN: if(wParam == MY_LBUTTON) SelectColor(lParam); else { LB_Dclick = FALSE; templParam = lParam; SetTimer(hDlg,LBUTTONDCLICK,GetDoubleClickTime(),NULL); } break; case WM_LBUTTONDBLCLK: // left button Double click LB_Dclick = TRUE; PaintWorkArea(lParam); break; case WM_HSCROLL: { BYTE red,green,blue; HScroll(wParam,lParam); red = GetScrollPos(hRedScroll,SB_CTL); green = GetScrollPos(hGreenScroll,SB_CTL); blue = GetScrollPos(hBlueScroll,SB_CTL); _PaintCombo(RGB(red,green,blue)); SetScrollValues(); } break; case WM_COMMAND: // SetFocus(hDlg); switch(wParam) { case SET: Set = TRUE; SetColors(); return 0L; case RESTORE: RestoreColors(TRUE); Set = FALSE; return 0L; case SAVE: SaveColorsToIni(TRUE,TRUE); return 0L; case HELP: DialogBox(hInst, "WinColorHelp", hDlg, (FARPROC)DialogProc); return 0L; default: if(HIWORD(lParam) == EN_SETFOCUS) { RECT rect; HDC hDC = GetDC(LOWORD(lParam)); GetClientRect(LOWORD(lParam),&rect); rect.top -= 2; rect.left -= 2; rect.right += 2; rect.bottom += 2; Rectangle(hDC,rect.left,rect.top,rect.right,rect.bottom); ReleaseDC(LOWORD(lParam),hDC); } return 0L; } break; case WM_INITMENU: // modify the system menu CheckMenuItem(GetSystemMenu(WinColorDlg,0), SC_AUTOSAVE, (MF_BYCOMMAND | (AutoSave ? MF_CHECKED : MF_UNCHECKED))); CheckMenuItem(GetSystemMenu(WinColorDlg,0), SC_AUTOLOAD, (MF_BYCOMMAND | (AutoLoad ? MF_CHECKED : MF_UNCHECKED))); CheckMenuItem(GetSystemMenu(WinColorDlg,0), SC_AUTOPILOT, (MF_BYCOMMAND | (AutoPilot ? MF_CHECKED : MF_UNCHECKED))); CheckMenuItem(GetSystemMenu(WinColorDlg,0), SC_AUTOUPDATE, (MF_BYCOMMAND | (AutoUpdate ? MF_CHECKED : MF_UNCHECKED))); break; case WM_SYSCOMMAND: switch(wParam) { case SC_ABOUT: DialogBox(hInst, "ABOUTBOX", hDlg, (FARPROC)DialogProc); break; case SC_AUTOLOAD: Autoload(); break; case SC_AUTOSAVE: AutoSave = !AutoSave; CheckMenuItem(GetSystemMenu(WinColorDlg,0), SC_AUTOSAVE,(MF_BYCOMMAND | (AutoSave ? MF_CHECKED : MF_UNCHECKED))); break;; case SC_AUTOPILOT: AutoPilot = !AutoPilot; CheckMenuItem(GetSystemMenu(WinColorDlg,0), SC_AUTOPILOT,(MF_BYCOMMAND | (AutoPilot ? MF_CHECKED : MF_UNCHECKED))); break; case SC_AUTOUPDATE: AutoUpdate = !AutoUpdate; CheckMenuItem(GetSystemMenu(WinColorDlg,0), SC_AUTOUPDATE,(MF_BYCOMMAND | (AutoUpdate ? MF_CHECKED : MF_UNCHECKED))); break; default: goto defwindowproc; } break; default: defwindowproc: return DefWindowProc(hDlg,message,wParam,lParam); } return 0L; } // saves the current system colors into OrgColorVals void SaveOrgColors(void) { int i; for(i = 0; i < 19; i++) OrgColorVals[i] = GetSysColor(i); } void SetColors(void) { int i; DWORD ColorVals[19]; CRECT *start = &CRects[CRECTS_SYSCOLORS]; for(i = 0; i < 19; i++, start++) ColorVals[i] = start->color; SetSysColors(19,&colorIndex,&ColorVals); } void SetColorsFromWinColors(void) { int i; DWORD ColorVals[19]; CRECT *start = &CRects[57]; for(i = 0; i < 19; i++, start++) ColorVals[i] = start->color; SetSysColors(19,&colorIndex,&ColorVals); } void RestoreColors(BOOL reset) { int i; CRECT *start = &CRects[CRECTS_SYSCOLORS]; for(i = 0; i < 19; i++, start++) start->color = OrgColorVals[i]; if(reset) SetSysColors(19,&colorIndex,&OrgColorVals); } void SaveColorsToIni(BOOL changecursor, BOOL savecomponentcolors) { int i,hdl; char buf[40], *section = "[WinColor]\r\n"; char name[144]; OFSTRUCT OfStruct; if(changecursor) SetCursor(hHourGlassCursor); strcpy(name,szWinColorIni); MakeWinDirFileName(name); if((hdl = OpenFile(name,&OfStruct, OF_CREATE | OF_WRITE | OF_SHARE_DENY_WRITE)) == -1) { if(changecursor) SetCursor(hNormalCursor); sprintf(buf,"Unable to update %s",szWinColorIni); MessageBox(WinColorDlg,buf,szWinColor,MB_ICONEXCLAMATION); return; } write(hdl,section,strlen(section)); sprintf(buf,"%s=%d\r\n",szAutoSave,(AutoSave ? 1 : 0)); write(hdl,buf,strlen(buf)); sprintf(buf,"%s=%d\r\n",szAutoLoad,(AutoLoad ? 1 : 0)); write(hdl,buf,strlen(buf)); sprintf(buf,"%s=%d\r\n",szAutoPilot,(AutoPilot ? 1 : 0)); write(hdl,buf,strlen(buf)); sprintf(buf,"%s=%d\r\n",szAutoUpdate,(AutoUpdate ? 1 : 0)); write(hdl,buf,strlen(buf)); for(i = 0; i < MAX_DLGRECTS; i++) { sprintf(buf,"color%02d=%010lu\r\n",i,CRects[i].color); write(hdl,buf,strlen(buf)); } for( ; i < MAXRECTS; i++) { if(savecomponentcolors) CRects[i].color = GetSysColor(i-57); sprintf(buf,"color%02d=%010lu\r\n",i,CRects[i].color); write(hdl,buf,strlen(buf)); } _lclose(hdl); SaveOrgColors(); Set = FALSE; if(changecursor) SetCursor(hNormalCursor); } BOOL IniFile(char *filename,WORD operation) { char name[144]; OFSTRUCT OfStruct; int hdl; strcpy(name,filename); MakeWinDirFileName(name); if((hdl = OpenFile(name,&OfStruct,operation)) == -1) return FALSE; _lclose(hdl); return TRUE; } char *MakeWinDirFileName(char *filename) { char name[20]; strcpy(name,filename); GetWindowsDirectory(filename,144); if(LastChar(filename) != '\\') strcat(filename,"\\"); strcat(filename,name); return filename; } void GetColorsFromIni(void) { int i; char key[10], value[15]; AutoSave = GetPrivateProfileInt(szWinColor,szAutoSave,0,szWinColorIni); AutoLoad = GetPrivateProfileInt(szWinColor,szAutoLoad,0,szWinColorIni); AutoPilot = GetPrivateProfileInt(szWinColor,szAutoPilot,0,szWinColorIni); AutoUpdate = GetPrivateProfileInt(szWinColor,szAutoUpdate,0,szWinColorIni); if(IniFile(szWinColorIni,OF_EXIST)) { char def[15]; DWORD defval; SetCursor(hHourGlassCursor); for(i = 0; i < MAX_DLGRECTS; i++) { sprintf(key,"color%02d",i); GetPrivateProfileString(szWinColor,key,"01677215",value, sizeof(value),szWinColorIni); CRects[i].color = atol(value); } for( ; i < MAXRECTS; i++) { sprintf(key,"color%02d",i); // defval = GetSysColor(i-MAX_DLGRECTS); defval = GetSysColor(i-57); sprintf(def,"%lu",defval); GetPrivateProfileString(szWinColor,key,def,value, sizeof(value),szWinColorIni); CRects[i].color = atol(value); } SetColorsFromWinColors(); SetCursor(hNormalCursor); } SaveOrgColors(); } void UpdateSystemMenu(void) { HMENU hSysMenu = GetSystemMenu(WinColorDlg,0); RemoveMenu(hSysMenu, SC_MAXIMIZE, MF_BYCOMMAND); RemoveMenu(hSysMenu, SC_SIZE, MF_BYCOMMAND); AppendMenu(hSysMenu, MF_SEPARATOR, 0, NULL); AppendMenu(hSysMenu, MF_STRING, SC_ABOUT, szAbout); AppendMenu(hSysMenu, MF_STRING, SC_AUTOSAVE, szAutoSave); AppendMenu(hSysMenu, MF_STRING, SC_AUTOLOAD, szAutoLoad); AppendMenu(hSysMenu, MF_STRING, SC_AUTOPILOT, szAutoPilot); AppendMenu(hSysMenu, MF_STRING, SC_AUTOUPDATE, szAutoUpdate); } // paints the Color Work Area with the color of the rectangle pointed-to void PaintWorkArea(LONG lParam) { POINT point = MAKEPOINT(lParam); int i; for(i = 1; i < MAX_DLGRECTS; i++) if(PtInRect(&CRects[i].r,point)) { _PaintWorkArea(CRects[i].color, TRUE); break; } } // paints the Color Work area the specified color and sets the scroll-bars void _PaintWorkArea(DWORD color, BOOL paintrects) { if(paintrects) _PaintCombo(color); SetScrollPos(hRedScroll,SB_CTL,GetRValue(color),TRUE); SetScrollPos(hGreenScroll,SB_CTL,GetGValue(color),TRUE); SetScrollPos(hBlueScroll,SB_CTL,GetBValue(color),TRUE); SetScrollValues(); } void SetScrollValues(void) { char temp[5]; sprintf(temp,"%03d",GetScrollPos(hRedScroll,SB_CTL)); SetDlgItemText(WinColorDlg,122,temp); sprintf(temp,"%03d",GetScrollPos(hGreenScroll,SB_CTL)); SetDlgItemText(WinColorDlg,123,temp); sprintf(temp,"%03d",GetScrollPos(hBlueScroll,SB_CTL)); SetDlgItemText(WinColorDlg,124,temp); } // paints the Color Work Area and the Selected Color Rectangle void _PaintCombo(DWORD color) { _PaintRect(&WorkArea,color); _PaintRect(&SelectedColor,color); } // paints the Selected Color Rectange the color of the rectangle pointed-to void SelectColor(LONG lParam) { POINT point = MAKEPOINT(lParam); int i; for(i = 1; i < MAX_DLGRECTS; i++) if(PtInRect(&CRects[i].r,point)) { _PaintRect(&SelectedColor,CRects[i].color); break; } } // paints the pointed to rectangle the selected color void PaintRect(LONG lParam) { POINT point = MAKEPOINT(lParam); int i; for(i = 1; i < MAX_DLGRECTS; i++) if(PtInRect(&CRects[i].r,point)) { _PaintRect(&(CRects[i].r),SelectedColor.color); break; } } // paints a rectangle a color void _PaintRect(CRECT *crect, DWORD color) { HBRUSH Old,Temp; RECT *rect = &crect->r; HDC hDC = GetDC(WinColorDlg); Temp = CreateSolidBrush((crect->solidonly ? GetNearestColor(hDC,color) : color)); Old = SelectObject(hDC,Temp); Rectangle(hDC,rect->left,rect->top,rect->right,rect->bottom); SelectObject(hDC,Old); DeleteObject(Temp); if(crect == &SelectedColor) _PaintSolidRect(color); ReleaseDC(WinColorDlg,hDC); crect->color = color; } // paints the rectangles in the Dialog void DlgPaint(HWND hWnd) { PAINTSTRUCT ps; int i; HDC hDC = BeginPaint(hWnd,&ps); HBRUSH Old, Temp; DWORD color; SetBkMode(hDC,TRANSPARENT); // has to be for back ground dithering for(i = 0; i < MAX_DLGRECTS; i++) { color = (CRects[i].solidonly ? GetNearestColor(hDC,CRects[i].color) : CRects[i].color); Temp = CreateSolidBrush(color); Old = SelectObject(hDC,Temp); Rectangle(hDC,CRects[i].r.left,CRects[i].r.top,CRects[i].r.right, CRects[i].r.bottom); SelectObject(hDC,Old); DeleteObject(Temp); } _PaintSolidRect(CRects[0].color); EndPaint(hWnd,&ps); } void doubleRECT(RECT *r) { r->left *= 2; r->top *= 2; r->right *= 2; r->bottom *= 2; } // processes color-setting horizontal scroll bars void HScroll(WORD wParam, LONG lParam) { HWND hsb; short color; hsb = HIWORD(lParam); color = GetScrollPos(hsb,SB_CTL); switch(wParam) { case SB_PAGEDOWN: color += 16; // fall thru case SB_LINEDOWN: color++; break; case SB_PAGEUP: color -= 16; // fall thru case SB_LINEUP: color--; break; case SB_TOP: color = 0; break; case SB_BOTTOM: color = 255; break; case SB_THUMBPOSITION: case SB_THUMBTRACK: color = LOWORD(lParam); break; } SetScrollPos(hsb,SB_CTL,color,TRUE); } char outbuf[MAXWINDOWSPARM]; void Autoload(void) { char *p; GetProfileString("windows","load",NULL,outbuf,sizeof(outbuf)); strupr(outbuf); AutoLoad = !AutoLoad; // if Auto Load is selected and app name is not in LOAD= list if(AutoLoad && !strstr(outbuf,szWinColor)) { strcpy(outbuf,szAppName); // put WinColor in buffer strcat(outbuf," "); // add blank and name to it p = &LastChar(outbuf); // goto last character p++; // set to the NULL // append LOAD= list GetProfileString("windows","load",NULL,p,sizeof(outbuf)-(p-outbuf)); WriteProfileString("windows","load",outbuf); } // if Auto Load is not selected and app name is in LOAD= list if(!AutoLoad && (p = strstr(outbuf,szAppName))) { *p = '\0'; // NULL at start of appname p += strlen(szAppName); // move past appname strcat(outbuf,p); // copy everybody up WriteProfileString("windows","load",outbuf); } } char *WinIniKeys[MAX_WININICOLORS] = { "Scrollbar", "Background", "ActiveTitle", "InactiveTitle", "Menu", "Window", "WindowFrame", "MenuText", "WindowText", "TitleText", "ActiveBorder", "InactiveBorder", "AppWorkspace", "Hilight", "HilightText", "ButtonFace", "ButtonShadow", "GrayText", "ButtonText" }; void UpdateWinIni(void) { int i; char buf[15]; for(i = 0; i < MAX_WININICOLORS; i++) { sprintf(buf,"%d %d %d", GetRValue(GetSysColor(i)), GetGValue(GetSysColor(i)), GetBValue(GetSysColor(i))); WriteProfileString("colors",WinIniKeys[i],buf); } } /* [colors] Background=255 128 0 AppWorkspace=255 128 192 Window=255 255 255 WindowText=0 0 0 Menu=0 255 255 MenuText=0 0 0 ActiveTitle=255 0 0 InactiveTitle=128 128 255 TitleText=255 255 255 ActiveBorder=128 0 255 InactiveBorder=255 255 128 WindowFrame=0 0 0 Scrollbar=255 226 114 */ void _PaintSolidRect(DWORD color) { static RECT SolidRect = { 132, 6, 150, 24 }; HDC hDC = GetDC(WinColorDlg); HBRUSH Temp, Old; DWORD x = GetNearestColor(hDC,color); Temp = CreateSolidBrush(x); //RGB(red,green,blue)); Old = SelectObject(hDC,Temp); Rectangle(hDC,SolidRect.left,SolidRect.top,SolidRect.right,SolidRect.bottom); SelectObject(hDC,Old); DeleteObject(Temp); ReleaseDC(WinColorDlg,hDC); } BOOL FAR PASCAL DialogProc(HWND hDlg, unsigned message, WORD wParam, LONG lParam) { switch(message) { case WM_INITDIALOG: return (TRUE); case WM_COMMAND: if(wParam == IDOK || wParam == IDCANCEL) { EndDialog(hDlg, TRUE); return (TRUE); } break; } return FALSE; } void InitArray(void) { int i; CRECT *start = &CRects[CRECTS_SYSCOLORS]; for(i = 0; i < 19; i++, start++) { start->color = GetSysColor(i); doubleRECT(&start->r); } for(i = 0; i < MAX_CUSTCOLORS; i++, start++) doubleRECT(&start->r); doubleRECT(&SelectedColor.r); doubleRECT(&WorkArea.r); GetColorsFromIni(); }