registry saves window position now, fixed saveconfig dying on savesettings (something something bit shifting)

This commit is contained in:
freedom
2023-07-23 19:25:06 -06:00
parent 1ccac6d358
commit 50c38d2b74
4 changed files with 58 additions and 33 deletions

View File

@@ -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

View File

@@ -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;
} }

View File

@@ -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);

View File

@@ -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);