home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Softwarová Záchrana 3
/
Softwarova-zachrana-3.bin
/
TaskSwitchXP
/
TaskSwitchXP_1.0.26.exe
/
Source
/
ConfigTsXP
/
main.cpp
< prev
next >
Wrap
C/C++ Source or Header
|
2004-10-05
|
24KB
|
685 lines
// main.cpp
#include "stdafx.h"
#include "ownerdrawXp.h"
#include "resource.h"
#include "main.h"
#include <strsafe.h>
//-------------------------------------------------
INT_PTR CALLBACK Dlg_MainProc(HWND, UINT, WPARAM, LPARAM);
BOOL Main_OnInitDialog(HWND, HWND, LPARAM);
void Main_OnCommand(HWND, int, HWND, UINT);
int CALLBACK EnumFontFamExProc(ENUMLOGFONTEX*, NEWTEXTMETRICEX*, DWORD, LPARAM);
void LoadSettings(HWND);
BOOL SaveSettings(HWND);
//const WCHAR g_szConfigTsXP[] = L"_As12__TaskSwitchXP_ConfigTsXP";
const WCHAR g_szMainWnd[] = L"_As12__TaskSwitchXP_MainWnd_";
const WCHAR g_szRegKeyTs[] = RS_TASKSWITCHXP_KEY;
HINSTANCE g_hinstExe = NULL;
int g_nComboItemHeight = 0;
//-----------------------------------------------------------
void ReportError(HWND hwnd, LPCWSTR szError) {
MessageBeep(MB_ICONERROR);
MessageBox(hwnd, szError, L"ConfigTsXP error",
MB_OK | MB_ICONERROR | MB_TASKMODAL);
}
void ReportError(HWND hwnd, UINT uErrorID) {
WCHAR szError[256];
LoadString(g_hinstExe, uErrorID, szError, SIZEOF_ARRAY(szError));
ReportError(hwnd, szError);
}
/*void FatalError(UINT uErrorID) {
ReportError(NULL, uErrorID);
exit(1);
}*/
//-------------------------------------------------
BOOL ParseCommandLine() {
int nNumArgs;
PWSTR *ppArgv = CommandLineToArgvW(GetCommandLineW(), &nNumArgs);
BOOL f = TRUE;
if (nNumArgs == 2 && (ppArgv[1][0] == L'/' || ppArgv[1][0] == L'-')) {
if ((ppArgv[1][1] == L'd' || ppArgv[1][1] == L'i') && ppArgv[1][2] == L'\0') {
BOOL fDefault = (BOOL)(ppArgv[1][1] == L'd');
DWORD cbData, tmp;
HKEY hkey;
if (RegOpenKeyEx(HKEY_CURRENT_USER, g_szRegKeyTs, 0, KEY_READ | KEY_WRITE, &hkey)) {
fDefault = TRUE;
if (RegCreateKeyEx(HKEY_CURRENT_USER, g_szRegKeyTs, 0, NULL,
REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hkey, NULL))
return(f);
}
tmp = DEFAULT_FLAGS;
cbData = sizeof(DWORD);
if (fDefault || RegQueryValueEx(hkey, RS_FLAGS, 0, NULL, (PBYTE)&tmp, &cbData))
RegSetValueEx(hkey, RS_FLAGS, 0, REG_DWORD, (PBYTE)&tmp, sizeof(DWORD));
WCHAR szFont[LF_FACESIZE] = DEFAULT_CAPFONTNAME;
cbData = sizeof(szFont);
if (fDefault || RegQueryValueEx(hkey, RS_CAPFONTNAME, 0, NULL, (PBYTE)&tmp, &cbData)) {
RegSetValueEx(hkey, RS_CAPFONTNAME, 0, REG_SZ,
(PBYTE)szFont, (lstrlen(szFont) + 1) * sizeof(WCHAR));
}
tmp = DEFAULT_CAPFONTATTR;
cbData = sizeof(DWORD);
if (fDefault || RegQueryValueEx(hkey, RS_CAPFONTATTR, 0, NULL, (PBYTE)&tmp, &cbData))
RegSetValueEx(hkey, RS_CAPFONTATTR, 0, REG_DWORD, (PBYTE)&tmp, sizeof(DWORD));
tmp = DEFAULT_CAPTEXTCOLOR;
cbData = sizeof(DWORD);
if (fDefault || RegQueryValueEx(hkey, RS_CAPTEXTCOLOR, 0, NULL, (PBYTE)&tmp, &cbData))
RegSetValueEx(hkey, RS_CAPTEXTCOLOR, 0, REG_DWORD, (PBYTE)&tmp, sizeof(DWORD));
tmp = DEFAULT_CAPSHADOW;
cbData = sizeof(DWORD);
if (fDefault || RegQueryValueEx(hkey, RS_CAPSHADOW, 0, NULL, (PBYTE)&tmp, &cbData))
RegSetValueEx(hkey, RS_CAPSHADOW, 0, REG_DWORD, (PBYTE)&tmp, sizeof(DWORD));
tmp = DEFAULT_PVDELAY;
cbData = sizeof(DWORD);
if (fDefault || RegQueryValueEx(hkey, RS_PVDELAY, 0, NULL, (PBYTE)&tmp, &cbData))
RegSetValueEx(hkey, RS_PVDELAY, 0, REG_DWORD, (PBYTE)&tmp, sizeof(DWORD));
tmp = DEFAULT_PVWIDTH;
cbData = sizeof(DWORD);
if (fDefault || RegQueryValueEx(hkey, RS_PVWIDTH, 0, NULL, (PBYTE)&tmp, &cbData) ||
tmp < MIN_PVWIDTH || tmp > MAX_PVWIDTH)
RegSetValueEx(hkey, RS_PVWIDTH, 0, REG_DWORD, (PBYTE)&tmp, sizeof(DWORD));
tmp = DEFAULT_ICONSX;
cbData = sizeof(DWORD);
if (fDefault || RegQueryValueEx(hkey, RS_ICONSX, 0, NULL, (PBYTE)&tmp, &cbData) ||
tmp < MIN_ICONSX || tmp > MAX_ICONSX)
RegSetValueEx(hkey, RS_ICONSX, 0, REG_DWORD, (PBYTE)&tmp, sizeof(DWORD));
tmp = DEFAULT_ICONSY;
cbData = sizeof(DWORD);
if (fDefault || RegQueryValueEx(hkey, RS_ICONSY, 0, NULL, (PBYTE)&tmp, &cbData) ||
tmp < MIN_ICONSY || tmp > MAX_ICONSY)
RegSetValueEx(hkey, RS_ICONSY, 0, REG_DWORD, (PBYTE)&tmp, sizeof(DWORD));
tmp = DEFAULT_PANEHEIGHT;
cbData = sizeof(DWORD);
if (fDefault || RegQueryValueEx(hkey, RS_PANEHEIGHT, 0, NULL, (PBYTE)&tmp, &cbData) ||
tmp < MIN_PANEHEIGHT || tmp > MAX_PANEHEIGHT)
RegSetValueEx(hkey, RS_PANEHEIGHT, 0, REG_DWORD, (PBYTE)&tmp, sizeof(DWORD));
RegCloseKey(hkey);
HWND hwndTs = FindWindowEx(HWND_MESSAGE, NULL, g_szMainWnd, L"");
if (IsWindow(hwndTs))
SendMessage(hwndTs, WM_RELOADSETTINGS, 0, 0);
f = FALSE;
}
}
HeapFree(GetProcessHeap(), 0, ppArgv);
return(f);
}
//-------------------------------------------------
BOOL CheckVersion() {
OSVERSIONINFO vi = { sizeof(OSVERSIONINFO) };
if (!GetVersionEx(&vi) || vi.dwPlatformId != VER_PLATFORM_WIN32_NT ||
vi.dwMajorVersion < 5 || vi.dwMinorVersion < 1) {
MessageBoxA(NULL, "This program requires features present in Windows XP/2003.",
"ConfigTsXP error", MB_OK | MB_ICONERROR | MB_TOPMOST | MB_SETFOREGROUND);
return(FALSE);
}
return(TRUE);
}
//-----------------------------------------------------------
int APIENTRY wWinMain(HINSTANCE hinstExe, HINSTANCE, LPWSTR, int) {
g_hinstExe = hinstExe; //GetModuleHandle(NULL);
if (!CheckVersion())
return(1);
if (!ParseCommandLine())
return(0); // install ok
// global initializations
INITCOMMONCONTROLSEX iccex = {
sizeof(INITCOMMONCONTROLSEX),
ICC_LINK_CLASS | ICC_UPDOWN_CLASS
};
if (!InitCommonControlsEx(&iccex)) {
ReportError(NULL, IDS_ERR_COMMCTRL);
return(1);
}
HDC hdcScreen = GetWindowDC(NULL);
g_nComboItemHeight = (10 * GetDeviceCaps(hdcScreen, LOGPIXELSY)) / 72 + 2;
ReleaseDC(NULL, hdcScreen);
DialogBox(g_hinstExe, MAKEINTRESOURCE(IDD_MAIN), NULL, Dlg_MainProc);
return(0);
}
//-------------------------------------------------
//-------------------------------------------------
struct FACENAME {
WCHAR szFaceName[LF_FACESIZE];
};
typedef vector<FACENAME> VECTOR_FONTS;
int CALLBACK EnumFontFamExProc(ENUMLOGFONTEX *pelfe, NEWTEXTMETRICEX * /*pntme*/,
DWORD dwFontType, LPARAM lParam) {
if (dwFontType == TRUETYPE_FONTTYPE || dwFontType == RASTER_FONTTYPE) {
VECTOR_FONTS *pvFonts = (VECTOR_FONTS*)lParam;
_ASSERT(pvFonts);
int i;
for (i = (int)pvFonts->size() - 1; i >= 0; i--)
if (!lstrcmpi(pvFonts->at(i).szFaceName, pelfe->elfLogFont.lfFaceName))
break;
if (i == -1) // :)
pvFonts->push_back((FACENAME)(*(FACENAME*)&(pelfe->elfLogFont.lfFaceName)));
}
return(TRUE);
}
//-------------------------------------------------
//-------------------------------------------------
void LoadSettings(HWND hwnd) {
HKEY hkey = NULL;
// autostart
int n;
DWORD cbData, tmp = BST_UNCHECKED;
if (!RegOpenKeyEx(HKEY_CURRENT_USER, RS_RUN_KEY, 0, KEY_READ, &hkey)) {
if (!RegQueryValueEx(hkey, RS_TASKSWITCHXP, 0, NULL, NULL, NULL))
tmp = BST_CHECKED;
RegCloseKey(hkey);
}
CheckDlgButton(hwnd, IDC_AUTOSTART, tmp);
if (RegOpenKeyEx(HKEY_CURRENT_USER, g_szRegKeyTs, 0, KEY_READ, &hkey))
hkey = NULL;
// flags
cbData = sizeof(DWORD);
if (!hkey || RegQueryValueEx(hkey, RS_FLAGS, 0, NULL, (PBYTE)&tmp, &cbData))
tmp = DEFAULT_FLAGS;
CheckDlgButton(hwnd, IDC_HIGHPRIORITY, (tmp & TSF_HIGHPRIORITY) ? BST_CHECKED : BST_UNCHECKED);
CheckDlgButton(hwnd, IDC_NOVISUALSTYLES, (tmp & TSF_NOVISUALSTYLES) ? BST_CHECKED : BST_UNCHECKED);
CheckDlgButton(hwnd, IDC_LEFTRIGHT, (tmp & TSF_LEFTRIGHT) ? BST_CHECKED : BST_UNCHECKED);
CheckDlgButton(hwnd, IDC_NOPVREGION, (tmp & TSF_NOPVREGION) ? BST_CHECKED : BST_UNCHECKED);
CheckDlgButton(hwnd, IDC_SHOWINFO, (tmp & TSF_SHOWINFO) ? BST_CHECKED : BST_UNCHECKED);
CheckDlgButton(hwnd, IDC_SHOWTOOLTIPS, (tmp & TSF_SHOWTOOLTIPS) ? BST_CHECKED : BST_UNCHECKED);
CheckDlgButton(hwnd, IDC_MOUSEOVER, (tmp & TSF_MOUSEOVER) ? BST_CHECKED : BST_UNCHECKED);
CheckDlgButton(hwnd, IDC_MOUSESELECT, (tmp & TSF_MOUSESELECT) ? BST_CHECKED : BST_UNCHECKED);
CheckDlgButton(hwnd, IDC_MOUSESWITCH, (tmp & TSF_MOUSESWITCH) ? BST_CHECKED : BST_UNCHECKED);
CheckDlgButton(hwnd, IDC_INVERSEWHEEL, (tmp & TSF_INVERSEWHEEL) ? BST_CHECKED : BST_UNCHECKED);
CheckDlgButton(hwnd, IDC_DROPSHADOW, (tmp & TSF_DROPSHADOW) ? BST_CHECKED : BST_UNCHECKED);
CheckDlgButton(hwnd, IDC_TRANSPARENCY, (tmp & TSF_LAYERED) ? BST_CHECKED : BST_UNCHECKED);
if (tmp & TSF_LAYERED) {
n = 255 - (tmp & TSF_LAYEREDMASK) + 21;
if (n < 0) n = 21;
if (n > 255) n = 255;
SendMessage(GetDlgItem(hwnd, IDC_TRANSPARENCYSLIDER),
TBM_SETPOS, TRUE, (LPARAM)n);
SendMessage(hwnd, WM_HSCROLL, TB_ENDTRACK, NULL);
}
// position on screen
if (tmp & TSF_POSTOP) n = 0;
else if (tmp & TSF_POSBOTTOM) n = 6;
else n = 3;
if (tmp & TSF_POSLEFT) ;
else if (tmp & TSF_POSRIGHT) n += 2;
else n += 1;
ComboBox_SetCurSel(GetDlgItem(hwnd, IDC_SCREENPOSCOMBO), n);
HWND h;
WCHAR szBuff[LF_FACESIZE] = DEFAULT_CAPFONTNAME;
// caption font name
cbData = sizeof(szBuff);
if (hkey)
RegQueryValueEx(hkey, RS_CAPFONTNAME, 0, NULL, (PBYTE)szBuff, &cbData);
h = GetDlgItem(hwnd, IDC_CAPFONTNAMECOMBO);
n = ComboBox_FindString(h, -1, szBuff);
if (n != CB_ERR)
ComboBox_SetCurSel(h, n);
// caption font size
cbData = sizeof(DWORD);
if (!hkey || RegQueryValueEx(hkey, RS_CAPFONTATTR, 0, NULL, (PBYTE)&tmp, &cbData))
tmp = DEFAULT_CAPFONTATTR;
h = GetDlgItem(hwnd, IDC_CAPFONTSIZECOMBO);
StringCchPrintf(szBuff, SIZEOF_ARRAY(szBuff), L"%u", (tmp & TSFCF_SIZEMASK)); // font size
n = ComboBox_FindString(h, -1, szBuff);
if (n != CB_ERR)
ComboBox_SetCurSel(h, n);
else SetWindowText(h, szBuff);
CheckDlgButton(hwnd, IDC_CAPFONTBOLD, // font bold
(tmp & TSFCF_BOLD) ? BST_CHECKED : BST_UNCHECKED);
CheckDlgButton(hwnd, IDC_CAPFONTITALIC, // font italic
(tmp & TSFCF_ITALIC) ? BST_CHECKED : BST_UNCHECKED);
// caption font color
cbData = sizeof(DWORD);
if (!hkey || RegQueryValueEx(hkey, RS_CAPTEXTCOLOR, 0, NULL, (PBYTE)&tmp, &cbData))
tmp = DEFAULT_CAPTEXTCOLOR;
SetUxButtonColor(GetDlgItem(hwnd, IDC_CAPTEXTCOLOR), tmp);
// caption font shadow color & deep
cbData = sizeof(DWORD);
if (!hkey || RegQueryValueEx(hkey, RS_CAPSHADOW, 0, NULL, (PBYTE)&tmp, &cbData))
tmp = DEFAULT_CAPSHADOW;
CheckDlgButton(hwnd, IDC_CAPDRAWSHADOW, (tmp & TSFCS_NODEEP) ? BST_UNCHECKED : BST_CHECKED);
n = (tmp & TSFCS_DEEPMASK) >> 24;
if (tmp & TSFCS_NEGATIVEDEEP) n = -n;
SendMessage(GetDlgItem(hwnd, IDC_CAPSHADOWDEEPSPIN), UDM_SETPOS32, 0, n);
SetUxButtonColor(GetDlgItem(hwnd, IDC_CAPSHADOWCOLOR), tmp & TSFCS_COLORMASK);
if (hkey)
RegCloseKey(hkey);
}
//-------------------------------------------------
BOOL SaveSettings(HWND hwnd) {
HKEY hkey = NULL;
WCHAR szBuff[1024+16];
// autostart
if (!RegOpenKeyEx(HKEY_CURRENT_USER, RS_RUN_KEY, 0, KEY_WRITE, &hkey)) {
if (IsDlgButtonChecked(hwnd, IDC_AUTOSTART) == BST_CHECKED) {
WCHAR szBuff[1024];
int n = GetModuleFileName(g_hinstExe, szBuff, SIZEOF_ARRAY(szBuff));
if (n != 0 && n < SIZEOF_ARRAY(szBuff) - 16) {
while (n >= 0 && szBuff[n] != L'\\') n--;
if (n > 0) n++;
StringCchCopy(szBuff + n, SIZEOF_ARRAY(szBuff) - n, L"TaskSwitchXP.exe");
RegSetValueEx(hkey, RS_TASKSWITCHXP, 0, REG_SZ,
(PBYTE)szBuff, (lstrlen(szBuff) + 1) * sizeof(WCHAR));
} else {
ReportError(NULL, IDS_ERR_NOINSTDIR);
}
} else
RegDeleteValue(hkey, RS_TASKSWITCHXP);
RegCloseKey(hkey);
}
// open key
if (RegOpenKeyEx(HKEY_CURRENT_USER, g_szRegKeyTs, 0, KEY_WRITE, &hkey)) {
if (RegCreateKeyEx(HKEY_CURRENT_USER, g_szRegKeyTs, 0, NULL,
REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hkey, NULL))
return(FALSE);
}
// flags
DWORD tmp = 0;
if (IsDlgButtonChecked(hwnd, IDC_HIGHPRIORITY) == BST_CHECKED)
tmp |= TSF_HIGHPRIORITY;
if (IsDlgButtonChecked(hwnd, IDC_NOVISUALSTYLES) == BST_CHECKED)
tmp |= TSF_NOVISUALSTYLES;
if (IsDlgButtonChecked(hwnd, IDC_LEFTRIGHT) == BST_CHECKED)
tmp |= TSF_LEFTRIGHT;
if (IsDlgButtonChecked(hwnd, IDC_NOPVREGION) == BST_CHECKED)
tmp |= TSF_NOPVREGION;
if (IsDlgButtonChecked(hwnd, IDC_SHOWINFO) == BST_CHECKED)
tmp |= TSF_SHOWINFO;
if (IsDlgButtonChecked(hwnd, IDC_SHOWTOOLTIPS) == BST_CHECKED)
tmp |= TSF_SHOWTOOLTIPS;
if (IsDlgButtonChecked(hwnd, IDC_MOUSEOVER) == BST_CHECKED)
tmp |= TSF_MOUSEOVER;
if (IsDlgButtonChecked(hwnd, IDC_MOUSESELECT) == BST_CHECKED)
tmp |= TSF_MOUSESELECT;
if (IsDlgButtonChecked(hwnd, IDC_MOUSESWITCH) == BST_CHECKED)
tmp |= TSF_MOUSESWITCH;
if (IsDlgButtonChecked(hwnd, IDC_INVERSEWHEEL) == BST_CHECKED)
tmp |= TSF_INVERSEWHEEL;
if (IsDlgButtonChecked(hwnd, IDC_DROPSHADOW) == BST_CHECKED)
tmp |= TSF_DROPSHADOW;
if (IsDlgButtonChecked(hwnd, IDC_TRANSPARENCY) == BST_CHECKED) {
tmp |= (255 - (DWORD)SendMessage(GetDlgItem(hwnd,
IDC_TRANSPARENCYSLIDER), TBM_GETPOS, 0, 0) + 21) & TSF_LAYEREDMASK;
tmp |= TSF_LAYERED;
} else
tmp |= TSF_LAYEREDMASK;
int n = ComboBox_GetCurSel(GetDlgItem(hwnd, IDC_SCREENPOSCOMBO));
if (n != CB_ERR) {
if (n < 3)
tmp |= TSF_POSTOP;
else if (n > 5)
tmp |= TSF_POSBOTTOM;
if (!(n % 3))
tmp |= TSF_POSLEFT;
else if (!((n + 1) % 3))
tmp |= TSF_POSRIGHT;
}
RegSetValueEx(hkey, RS_FLAGS, 0, REG_DWORD, (PBYTE)&tmp, sizeof(DWORD));
// caption font name
HWND h = GetDlgItem(hwnd, IDC_CAPFONTNAMECOMBO);
n = ComboBox_GetCurSel(h);
if (n != CB_ERR) {
if (ComboBox_GetLBTextLen(h, n) < LF_FACESIZE) {
if (ComboBox_GetLBText(h, n, szBuff) != CB_ERR) {
RegSetValueEx(hkey, RS_CAPFONTNAME, 0, REG_SZ,
(PBYTE)szBuff, (lstrlen(szBuff) + 1) * sizeof(WCHAR));
}
}
}
// caption font size
tmp = 10;
if (GetDlgItemText(hwnd, IDC_CAPFONTSIZECOMBO, szBuff, SIZEOF_ARRAY(szBuff))) {
tmp = _wtol(szBuff);
if (tmp < 8) tmp = 8;
else if (tmp > TSFCF_SIZEMASK)
tmp = TSFCF_SIZEMASK;
}
if (IsDlgButtonChecked(hwnd, IDC_CAPFONTBOLD) == BST_CHECKED)
tmp |= TSFCF_BOLD;
if (IsDlgButtonChecked(hwnd, IDC_CAPFONTITALIC) == BST_CHECKED)
tmp |= TSFCF_ITALIC;
RegSetValueEx(hkey, RS_CAPFONTATTR, 0, REG_DWORD, (PBYTE)&tmp, sizeof(DWORD));
// caption font color
tmp = (DWORD)GetUxButtonColor(GetDlgItem(hwnd, IDC_CAPTEXTCOLOR));
RegSetValueEx(hkey, RS_CAPTEXTCOLOR, 0, REG_DWORD, (PBYTE)&tmp, sizeof(DWORD));
// caption font shadow color & deep
tmp = (DWORD)GetUxButtonColor(GetDlgItem(hwnd, IDC_CAPSHADOWCOLOR)) & TSFCS_COLORMASK;
n = (int)SendMessage(GetDlgItem(hwnd, IDC_CAPSHADOWDEEPSPIN), UDM_GETPOS32, 0, 0);
if (n < 0) {
tmp |= TSFCS_NEGATIVEDEEP;
n = -n;
}
tmp |= (n << 24) & TSFCS_DEEPMASK;
if (IsDlgButtonChecked(hwnd, IDC_CAPDRAWSHADOW) == BST_UNCHECKED)
tmp |= TSFCS_NODEEP;
RegSetValueEx(hkey, RS_CAPSHADOW, 0, REG_DWORD, (PBYTE)&tmp, sizeof(DWORD));
RegCloseKey(hkey);
return(TRUE);
}
//-------------------------------------------------
//-------------------------------------------------
BOOL Main_OnInitDialog(HWND hwnd, HWND /*hwndFocus*/, LPARAM /*lParam*/) {
HICON hIcon = LoadIcon(g_hinstExe, MAKEINTRESOURCE(IDI_MAIN));
SendMessage(hwnd, WM_SETICON, ICON_BIG, (LPARAM)hIcon);
SendMessage(hwnd, WM_SETICON, ICON_SMALL, (LPARAM)hIcon);
InitOwnerDrawCtrls(hwnd);
if (g_pfnEnableThemeDialogTexture)
g_pfnEnableThemeDialogTexture(hwnd, ETDT_ENABLETAB);
HWND h = GetDlgItem(hwnd, IDC_TRANSPARENCYSLIDER);
SendMessage(h, TBM_SETRANGE, TRUE, MAKELONG(21, 255));
SendMessage(h, TBM_SETTICFREQ, 13, 0);
SendMessage(h, TBM_SETBUDDY, FALSE, (LPARAM)GetDlgItem(hwnd, IDC_TRANSPARENCYTEXT));
WCHAR szBuff[64];
h = GetDlgItem(hwnd, IDC_SCREENPOSCOMBO);
ComboBox_ResetContent(h);
for (UINT id = IDS_SCREENPOS1; id <= IDS_SCREENPOS9; id++) {
LoadString(g_hinstExe, id, szBuff, SIZEOF_ARRAY(szBuff));
ComboBox_AddString(h, szBuff);
}
ComboBox_SetCurSel(h, 4);
h = GetDlgItem(hwnd, IDC_CAPSHADOWDEEPSPIN);
SendMessage(h, UDM_SETRANGE32, (WPARAM)-16, 16);
SendMessage(h, UDM_SETPOS32, 0, 2);
Edit_LimitText(GetDlgItem(hwnd, IDC_CAPSHADOWDEEPEDIT), 3);
LOGFONT lf;
lf.lfCharSet = ANSI_CHARSET;
lf.lfFaceName[0] = L'\0';
lf.lfPitchAndFamily = 0;
vector<FACENAME> vFonts;
HDC hdcScreen = GetWindowDC(NULL);
EnumFontFamiliesEx(hdcScreen, &lf, (FONTENUMPROC)EnumFontFamExProc, (LPARAM)&vFonts, 0);
ReleaseDC(NULL, hdcScreen);
h = GetDlgItem(hwnd, IDC_CAPFONTNAMECOMBO);
for (int i = 0; i < (int)vFonts.size(); i++)
ComboBox_AddString(h, vFonts[i].szFaceName);
vFonts.clear();
ComboBox_SetCurSel(h, 0);
h = GetDlgItem(hwnd, IDC_CAPFONTSIZECOMBO);
for (int i = 6; i <= 24; i++) {
StringCchPrintf(szBuff, SIZEOF_ARRAY(szBuff), L"%d", i);
ComboBox_AddString(h, szBuff);
}
ComboBox_SetCurSel(h, 4);
if (GetObject(GetWindowFont(hwnd), sizeof(LOGFONT), (LPVOID)&lf)) {
lf.lfWeight = FW_BOLD;
HFONT hfont = CreateFontIndirect(&lf);
SetWindowFont(GetDlgItem(hwnd, IDC_CAPFONTBOLD), hfont, FALSE);
lf.lfWeight = FW_NORMAL;
lf.lfItalic = TRUE;
hfont = CreateFontIndirect(&lf);
SetWindowFont(GetDlgItem(hwnd, IDC_CAPFONTITALIC), hfont, FALSE);
}
SubClassUxColorButton(GetDlgItem(hwnd, IDC_CAPTEXTCOLOR), RGB(255,255,255));
SubClassUxColorButton(GetDlgItem(hwnd, IDC_CAPSHADOWCOLOR), RGB(0,0,0));
SubClassUxIconButton(GetDlgItem(hwnd, IDOK), IDI_OK, 0);
LoadSettings(hwnd);
Main_OnCommand(hwnd, IDC_MOUSESELECT, GetDlgItem(hwnd, IDC_MOUSESELECT), BN_CLICKED);
Main_OnCommand(hwnd, IDC_TRANSPARENCY, GetDlgItem(hwnd, IDC_TRANSPARENCY), BN_CLICKED);
Main_OnCommand(hwnd, IDC_CAPDRAWSHADOW, GetDlgItem(hwnd, IDC_CAPDRAWSHADOW), BN_CLICKED);
return(TRUE);
}
//-------------------------------------------------
void Main_OnCommand(HWND hwnd, int id, HWND /*hwndCtl*/, UINT codeNotify) {
if (codeNotify == BN_CLICKED) {
switch (id) {
case IDC_MOUSESELECT: {
BOOL fEnable = (BOOL)(IsDlgButtonChecked(hwnd, IDC_MOUSESELECT) == BST_CHECKED);
EnableWindow(GetDlgItem(hwnd, IDC_MOUSESWITCH), fEnable);
break;
}
case IDC_TRANSPARENCY: {
BOOL fEnable = (BOOL)(IsDlgButtonChecked(hwnd, IDC_TRANSPARENCY) == BST_CHECKED);
EnableWindow(GetDlgItem(hwnd, IDC_TRANSPARENCYSLIDER), fEnable);
EnableWindow(GetDlgItem(hwnd, IDC_TRANSPARENCYTEXT), fEnable);
break;
}
case IDC_CAPDRAWSHADOW: {
BOOL fEnable = (BOOL)(IsDlgButtonChecked(hwnd, IDC_CAPDRAWSHADOW) == BST_CHECKED);
EnableWindow(GetDlgItem(hwnd, IDC_CAPSHADOWDEEPTEXT), fEnable);
EnableWindow(GetDlgItem(hwnd, IDC_CAPSHADOWDEEPEDIT), fEnable);
EnableWindow(GetDlgItem(hwnd, IDC_CAPSHADOWDEEPSPIN), fEnable);
EnableWindow(GetDlgItem(hwnd, IDC_CAPSHADOWCOLORTEXT), fEnable);
EnableWindow(GetDlgItem(hwnd, IDC_CAPSHADOWCOLOR), fEnable);
break;
}
case IDC_CAPTEXTCOLOR:
case IDC_CAPSHADOWCOLOR: {
static COLORREF s_pcrCustColors[16] = {
0xffffff, 0xffffff, 0xffffff, 0xffffff,
0xffffff, 0xffffff, 0xffffff, 0xffffff,
0xffffff, 0xffffff, 0xffffff, 0xffffff,
0xffffff, 0xffffff, 0xffffff, 0xffffff };
CHOOSECOLOR cc = { 0 };
cc.lStructSize = sizeof(CHOOSECOLOR);
cc.hwndOwner = hwnd;
cc.lpCustColors = s_pcrCustColors;
cc.Flags = CC_RGBINIT | CC_FULLOPEN;
HWND h = GetDlgItem(hwnd, id);
cc.rgbResult = GetUxButtonColor(h);
if (ChooseColor(&cc))
SetUxButtonColor(h, cc.rgbResult);
break;
}
case IDOK: {
SaveSettings(hwnd);
HWND hwndTs = FindWindowEx(HWND_MESSAGE, NULL, g_szMainWnd, L"");
if (IsWindow(hwndTs)) {
SendMessage(hwndTs, WM_RELOADSETTINGS, 0, 0);
}
//break;
}
case IDCANCEL:
EndDialog(hwnd, 0);
break;
}
}
}
//-------------------------------------------------
void Main_OnDrawItem(const LPDRAWITEMSTRUCT pdi) {
if (pdi->CtlID == IDC_CAPFONTNAMECOMBO) {
WCHAR szFontName[LF_FACESIZE];
int len = ComboBox_GetLBTextLen(pdi->hwndItem, pdi->itemID);
if (len > 0 && len < LF_FACESIZE) {
if (ComboBox_GetLBText(pdi->hwndItem, pdi->itemID, szFontName) != CB_ERR) {
HFONT hfont = CreateFont(-MulDiv(10, GetDeviceCaps(pdi->hDC, LOGPIXELSY), 72),
0, 0, 0, FW_NORMAL, FALSE, 0, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, szFontName);
COLORREF crBkOld = SetBkColor(pdi->hDC, GetSysColor(
(pdi->itemState & ODS_DISABLED) ? COLOR_3DFACE
: (pdi->itemState & ODS_SELECTED) ? COLOR_HIGHLIGHT : COLOR_WINDOW));
COLORREF crTextOld = SetTextColor(pdi->hDC, GetSysColor(
(pdi->itemState & ODS_DISABLED) ? COLOR_GRAYTEXT
: ((pdi->itemState & ODS_SELECTED) ? COLOR_HIGHLIGHTTEXT : COLOR_WINDOWTEXT)));
HFONT hfontOld = (HFONT)SelectObject(pdi->hDC,
hfont ? hfont : GetStockObject(DEFAULT_GUI_FONT));
TEXTMETRIC tm;
GetTextMetrics(pdi->hDC, &tm);
int x = LOWORD(GetDialogBaseUnits()) / 2,
y = (pdi->rcItem.bottom + pdi->rcItem.top - tm.tmHeight) / 2;
ExtTextOut(pdi->hDC, x, y, ETO_CLIPPED | ETO_OPAQUE, &pdi->rcItem,
szFontName, lstrlen(szFontName), NULL);
if (pdi->itemState & ODS_SELECTED)
DrawFocusRect(pdi->hDC, &pdi->rcItem);
SelectObject(pdi->hDC, hfontOld);
if (hfont)
DeleteObject(hfont);
SetBkColor(pdi->hDC, crBkOld);
SetTextColor(pdi->hDC, crTextOld);
}
}
} else if (pdi->CtlID == IDC_CAPTEXTCOLOR ||
pdi->CtlID == IDC_CAPSHADOWCOLOR || pdi->CtlID == IDOK) {
DrawUxButton(pdi);
}
}
//-------------------------------------------------
INT_PTR CALLBACK Dlg_MainProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
switch (uMsg) {
case WM_DRAWITEM: {
Main_OnDrawItem((LPDRAWITEMSTRUCT)lParam);
break;
}
case WM_MEASUREITEM: {
LPMEASUREITEMSTRUCT pmi = (LPMEASUREITEMSTRUCT)lParam;
if (pmi->CtlID == IDC_CAPFONTNAMECOMBO)
pmi->itemHeight = g_nComboItemHeight;
break;
}
case WM_HSCROLL: {
WCHAR szBuff[32];
int nPos = (int)SendDlgItemMessage(hwnd, IDC_TRANSPARENCYSLIDER, TBM_GETPOS, 0, 0);
nPos = (nPos - 21) * 100 / 260;
StringCchPrintf(szBuff, SIZEOF_ARRAY(szBuff), L"%d%%", nPos);
SetDlgItemText(hwnd, IDC_TRANSPARENCYTEXT, szBuff);
break;
}
case WM_NOTIFY: {
LPNMHDR pnmhdr = reinterpret_cast<LPNMHDR>(lParam);
if (pnmhdr->idFrom == IDC_ABOUTLINK || pnmhdr->idFrom == IDC_HOMELINK) {
switch (pnmhdr->code) {
case NM_CLICK:
case NM_RETURN: {
PNMLINK pnmlink = reinterpret_cast<PNMLINK>(lParam);
if (!lstrcmp(pnmlink->item.szID, L"idHome") ||
!lstrcmp(pnmlink->item.szID, L"idEmail")) {
ShellExecute(NULL, L"open", pnmlink->item.szUrl, NULL, NULL, SW_SHOWNORMAL);
}
break;
}
}
}
break;
}
HANDLE_MSG(hwnd, WM_COMMAND, Main_OnCommand);
case WM_HELP:
HtmlHelp(GetDesktopWindow(),
L"TaskSwitchXP.chm::/config.html", HH_DISPLAY_TOPIC, NULL);
break;
case WM_THEMECHANGED:
UxThemeChanged(hwnd);
break;
HANDLE_MSG(hwnd, WM_INITDIALOG, Main_OnInitDialog);
}
return(0);
}
//-------------------------------------------------
//-------------------------------------------------
//-------------------------------------------------
//-------------------------------------------------