registry saves window position now, fixed saveconfig dying on savesettings (something something bit shifting)
This commit is contained in:
@@ -62,7 +62,8 @@ int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLi
|
|||||||
// Register the Frame Window
|
// Register the Frame Window
|
||||||
wc.lpfnWndProc = WndProc;
|
wc.lpfnWndProc = WndProc;
|
||||||
wc.hInstance = hAppInstance;
|
wc.hInstance = hAppInstance;
|
||||||
wc.hIcon = hProgMgrIcon = LoadImage(hAppInstance, MAKEINTRESOURCE(IDI_PROGMGR), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_SHARED);
|
wc.hIcon = hProgMgrIcon = LoadImage(hAppInstance, MAKEINTRESOURCE(IDI_PROGMGR), IMAGE_ICON,
|
||||||
|
0, 0, LR_DEFAULTSIZE | LR_SHARED);
|
||||||
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
|
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
|
||||||
wc.hbrBackground = (HBRUSH)(COLOR_BACKGROUND);
|
wc.hbrBackground = (HBRUSH)(COLOR_BACKGROUND);
|
||||||
wc.lpszMenuName = MAKEINTRESOURCE(IDM_MAIN);
|
wc.lpszMenuName = MAKEINTRESOURCE(IDM_MAIN);
|
||||||
@@ -95,11 +96,9 @@ int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLi
|
|||||||
StringCchCat(szWindowTitle, ARRAYSIZE(szWindowTitle), szUsername);
|
StringCchCat(szWindowTitle, ARRAYSIZE(szWindowTitle), szUsername);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!CreateWindow(wc.lpszClassName, szWindowTitle, WS_OVERLAPPEDWINDOW | WS_VISIBLE,
|
||||||
if (!CreateWindow(wc.lpszClassName,
|
rcMainWindow.left, rcMainWindow.top, rcMainWindow.right - rcMainWindow.left, rcMainWindow.bottom - rcMainWindow.top,
|
||||||
szWindowTitle,
|
0, 0, hAppInstance, NULL))
|
||||||
WS_OVERLAPPEDWINDOW | WS_VISIBLE,
|
|
||||||
160, 80, 640, 480, 0, 0, hAppInstance, NULL))
|
|
||||||
return 2;
|
return 2;
|
||||||
|
|
||||||
// Load the menus...
|
// Load the menus...
|
||||||
@@ -113,6 +112,10 @@ int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLi
|
|||||||
UpdateChecks(bShowUsername, IDM_OPTIONS, IDM_OPTIONS_SHOWUSERNAME);
|
UpdateChecks(bShowUsername, IDM_OPTIONS, IDM_OPTIONS_SHOWUSERNAME);
|
||||||
UpdateChecks(bSaveSettings, IDM_OPTIONS, IDM_OPTIONS_SAVESETTINGS);
|
UpdateChecks(bSaveSettings, IDM_OPTIONS, IDM_OPTIONS_SAVESETTINGS);
|
||||||
|
|
||||||
|
// Update settings based on their values
|
||||||
|
if (bTopMost)
|
||||||
|
SetWindowPos(hWndProgMgr, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
|
||||||
|
|
||||||
if (bIsDefaultShell)
|
if (bIsDefaultShell)
|
||||||
{
|
{
|
||||||
// Modify the context menus since we're the default shell
|
// Modify the context menus since we're the default shell
|
||||||
|
|||||||
@@ -119,22 +119,34 @@ BOOL IsProgMgrDefaultShell()
|
|||||||
\* * * */
|
\* * * */
|
||||||
BOOL SaveConfig()
|
BOOL SaveConfig()
|
||||||
{
|
{
|
||||||
// Shrink the settings into the bitmask
|
BOOL bConfigStatus = TRUE;
|
||||||
|
WINDOWPLACEMENT wpProgMgr;
|
||||||
|
RECT rcWindow;
|
||||||
|
|
||||||
|
// Shrink the settings into the bitmask and save it
|
||||||
|
// There's definitely a better way to do this but...
|
||||||
|
// I'll get to it later :)
|
||||||
dwSettingsMask =
|
dwSettingsMask =
|
||||||
(bAutoArrange * PMS_AUTOARRANGE) |
|
(bAutoArrange && PMS_AUTOARRANGE) * PMS_AUTOARRANGE |
|
||||||
(bMinOnRun * PMS_MINONRUN) |
|
(bMinOnRun && PMS_MINONRUN) * PMS_MINONRUN |
|
||||||
(bTopMost * PMS_TOPMOST) |
|
(bTopMost && PMS_TOPMOST) * PMS_TOPMOST |
|
||||||
(bShowUsername * PMS_SHOWUSERNAME) |
|
(bShowUsername && PMS_SHOWUSERNAME) * PMS_SHOWUSERNAME |
|
||||||
(bSaveSettings * PMS_SAVESETTINGS);
|
(bSaveSettings && PMS_SAVESETTINGS) * PMS_SAVESETTINGS;
|
||||||
|
|
||||||
// Save settings bitmask
|
if (!RegSetValueEx(hKeySettings, pszSettingsMask, 0, REG_DWORD,
|
||||||
if (RegSetValueEx(hKeySettings, pszSettingsMask, 0, REG_DWORD,
|
&dwSettingsMask, sizeof(dwSettingsMask)) == ERROR_SUCCESS)
|
||||||
&dwSettingsMask, sizeof(DWORD)) == ERROR_SUCCESS)
|
bConfigStatus = FALSE;
|
||||||
{
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
return FALSE;
|
// Get and save window position
|
||||||
|
wpProgMgr.length = sizeof(WINDOWPLACEMENT);
|
||||||
|
GetWindowPlacement(hWndProgMgr, &wpProgMgr);
|
||||||
|
CopyRect(&rcWindow, &wpProgMgr.rcNormalPosition);
|
||||||
|
|
||||||
|
if (!RegSetValueEx(hKeySettings, pszSettingsWindow, 0, REG_BINARY,
|
||||||
|
&rcWindow, sizeof(rcWindow)) == ERROR_SUCCESS)
|
||||||
|
bConfigStatus = FALSE;
|
||||||
|
|
||||||
|
return bConfigStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* * * *\
|
/* * * *\
|
||||||
@@ -146,20 +158,27 @@ BOOL SaveConfig()
|
|||||||
\* * * */
|
\* * * */
|
||||||
BOOL LoadConfig()
|
BOOL LoadConfig()
|
||||||
{
|
{
|
||||||
|
BOOL bConfigStatus = TRUE;
|
||||||
DWORD dwType;
|
DWORD dwType;
|
||||||
DWORD dwBufferSize = sizeof(dwSettingsMask);
|
DWORD dwBufferSize = sizeof(dwSettingsMask);
|
||||||
|
DWORD dwRectBufferSize = sizeof(rcMainWindow);
|
||||||
|
|
||||||
// Load settings bitmask
|
// Load settings bitmask
|
||||||
if (RegQueryValueEx(hKeySettings, pszSettingsMask, 0, &dwType,
|
if (!RegQueryValueEx(hKeySettings, pszSettingsMask, 0, &dwType,
|
||||||
&dwSettingsMask, &dwBufferSize) == ERROR_SUCCESS)
|
&dwSettingsMask, &dwBufferSize) == ERROR_SUCCESS)
|
||||||
{
|
bConfigStatus = FALSE;
|
||||||
bAutoArrange = (dwSettingsMask & PMS_AUTOARRANGE);
|
|
||||||
bMinOnRun = (dwSettingsMask & PMS_MINONRUN);
|
|
||||||
bTopMost = (dwSettingsMask) & (PMS_TOPMOST);
|
|
||||||
bSaveSettings = (dwSettingsMask & PMS_SAVESETTINGS);
|
|
||||||
bShowUsername = (dwSettingsMask & PMS_SHOWUSERNAME);
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
return FALSE;
|
// Apply bitmask to booleans
|
||||||
|
bAutoArrange = (dwSettingsMask & PMS_AUTOARRANGE);
|
||||||
|
bMinOnRun = (dwSettingsMask & PMS_MINONRUN);
|
||||||
|
bTopMost = (dwSettingsMask & PMS_TOPMOST);
|
||||||
|
bSaveSettings = (dwSettingsMask & PMS_SAVESETTINGS);
|
||||||
|
bShowUsername = (dwSettingsMask & PMS_SHOWUSERNAME);
|
||||||
|
|
||||||
|
// Load window position... and apply it!
|
||||||
|
if (!RegQueryValueEx(hKeySettings, pszSettingsWindow, 0, &dwType,
|
||||||
|
&rcMainWindow, &dwRectBufferSize) == ERROR_SUCCESS)
|
||||||
|
bConfigStatus = FALSE;
|
||||||
|
|
||||||
|
return bConfigStatus;
|
||||||
}
|
}
|
||||||
@@ -38,6 +38,7 @@ extern BOOL bMinOnRun;
|
|||||||
extern BOOL bTopMost;
|
extern BOOL bTopMost;
|
||||||
extern BOOL bShowUsername;
|
extern BOOL bShowUsername;
|
||||||
extern BOOL bSaveSettings;
|
extern BOOL bSaveSettings;
|
||||||
|
extern RECT rcMainWindow;
|
||||||
|
|
||||||
/* Function Prototypes */
|
/* Function Prototypes */
|
||||||
BOOL InitializeRegistryKeys(VOID);
|
BOOL InitializeRegistryKeys(VOID);
|
||||||
|
|||||||
@@ -66,10 +66,6 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (wParam == IDM_FILE_EXIT)
|
if (wParam == IDM_FILE_EXIT)
|
||||||
{
|
|
||||||
CmdProc(hWnd, wParam, lParam);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (wParam == IDM_FILE_RUN)
|
if (wParam == IDM_FILE_RUN)
|
||||||
{
|
{
|
||||||
CmdProc(hWnd, wParam, lParam);
|
CmdProc(hWnd, wParam, lParam);
|
||||||
@@ -90,6 +86,10 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
|||||||
PostQuitMessage(0);
|
PostQuitMessage(0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case WM_ENDSESSION:
|
||||||
|
PostQuitMessage(0);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
WndProcDefault:
|
WndProcDefault:
|
||||||
return DefFrameProc(hWnd, hWndMDIClient, message, wParam, lParam);
|
return DefFrameProc(hWnd, hWndMDIClient, message, wParam, lParam);
|
||||||
@@ -132,8 +132,10 @@ LRESULT CALLBACK CmdProc(HWND hWnd, WPARAM wParam, LPARAM lParam)
|
|||||||
|
|
||||||
case IDM_OPTIONS_TOPMOST:
|
case IDM_OPTIONS_TOPMOST:
|
||||||
bTopMost = !bTopMost;
|
bTopMost = !bTopMost;
|
||||||
|
SetWindowPos(hWndProgMgr, bTopMost ? HWND_TOPMOST : HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOZORDER | SWP_NOSIZE);
|
||||||
UpdateChecks(bTopMost, IDM_OPTIONS, IDM_OPTIONS_TOPMOST);
|
UpdateChecks(bTopMost, IDM_OPTIONS, IDM_OPTIONS_TOPMOST);
|
||||||
goto SaveConfig;
|
goto SaveConfig;
|
||||||
|
|
||||||
case IDM_OPTIONS_SHOWUSERNAME:
|
case IDM_OPTIONS_SHOWUSERNAME:
|
||||||
bShowUsername = !bShowUsername;
|
bShowUsername = !bShowUsername;
|
||||||
UpdateChecks(bShowUsername, IDM_OPTIONS, IDM_OPTIONS_SHOWUSERNAME);
|
UpdateChecks(bShowUsername, IDM_OPTIONS, IDM_OPTIONS_SHOWUSERNAME);
|
||||||
|
|||||||
Reference in New Issue
Block a user