diff --git a/progmgr/progmgr.c b/progmgr/progmgr.c index a3ea485..65d7107 100644 --- a/progmgr/progmgr.c +++ b/progmgr/progmgr.c @@ -108,6 +108,7 @@ int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLi SystemParametersInfo(SPI_ICONVERTICALSPACING, 0, &ptOffset.y, 0); // Create main window with a default size + // NOTE: i pulled 320x240 out of my ass, make this dynamic later if (!CreateWindow(wc.lpszClassName, szWindowTitle, WS_OVERLAPPEDWINDOW | WS_VISIBLE, rcRoot.left + ptOffset.x, rcRoot.top + ptOffset.y, rcRoot.left + ptOffset.x + 320, rcRoot.top + ptOffset.y + 240, diff --git a/progmgr/registry.c b/progmgr/registry.c index d5504c5..254f73e 100644 --- a/progmgr/registry.c +++ b/progmgr/registry.c @@ -117,34 +117,40 @@ BOOL IsProgMgrDefaultShell() RETURNS - TRUE if successful, FALSE if unsuccessful. \* * * */ -BOOL SaveConfig() +BOOL SaveConfig(BOOL bPos, BOOL bSettings, BOOL bGroups) { 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 = - (bAutoArrange && PMS_AUTOARRANGE) * PMS_AUTOARRANGE | - (bMinOnRun && PMS_MINONRUN) * PMS_MINONRUN | - (bTopMost && PMS_TOPMOST) * PMS_TOPMOST | - (bShowUsername && PMS_SHOWUSERNAME) * PMS_SHOWUSERNAME | - (bSaveSettings && PMS_SAVESETTINGS) * PMS_SAVESETTINGS; + if (bSettings) + { + // 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 = + (bAutoArrange && PMS_AUTOARRANGE) * PMS_AUTOARRANGE | + (bMinOnRun && PMS_MINONRUN) * PMS_MINONRUN | + (bTopMost && PMS_TOPMOST) * PMS_TOPMOST | + (bShowUsername && PMS_SHOWUSERNAME) * PMS_SHOWUSERNAME | + (bSaveSettings && PMS_SAVESETTINGS) * PMS_SAVESETTINGS; - if (!RegSetValueEx(hKeySettings, pszSettingsMask, 0, REG_DWORD, - (const BYTE*)&dwSettingsMask, sizeof(dwSettingsMask)) == ERROR_SUCCESS) - bConfigStatus = FALSE; - - // Get and save window position - wpProgMgr.length = sizeof(WINDOWPLACEMENT); - GetWindowPlacement(hWndProgMgr, &wpProgMgr); - CopyRect(&rcWindow, &wpProgMgr.rcNormalPosition); + if (!RegSetValueEx(hKeySettings, pszSettingsMask, 0, REG_DWORD, + (const BYTE*)&dwSettingsMask, sizeof(dwSettingsMask)) == ERROR_SUCCESS) + bConfigStatus = FALSE; + } - if (!RegSetValueEx(hKeySettings, pszSettingsWindow, 0, REG_BINARY, - (const BYTE*)&rcWindow, sizeof(rcWindow)) == ERROR_SUCCESS) - bConfigStatus = FALSE; + if (bPos) + { + // Get and save window position + wpProgMgr.length = sizeof(WINDOWPLACEMENT); + GetWindowPlacement(hWndProgMgr, &wpProgMgr); + CopyRect(&rcWindow, &wpProgMgr.rcNormalPosition); + + if (!RegSetValueEx(hKeySettings, pszSettingsWindow, 0, REG_BINARY, + (const BYTE*)&rcWindow, sizeof(rcWindow)) == ERROR_SUCCESS) + bConfigStatus = FALSE; + } return bConfigStatus; } diff --git a/progmgr/registry.h b/progmgr/registry.h index fe5884c..739a0ee 100644 --- a/progmgr/registry.h +++ b/progmgr/registry.h @@ -44,4 +44,4 @@ extern RECT rcMainWindow; BOOL InitializeRegistryKeys(VOID); BOOL IsProgMgrDefaultShell(VOID); BOOL LoadConfig(VOID); -BOOL SaveConfig(VOID); +BOOL SaveConfig(BOOL bPos, BOOL bSettings, BOOL bGroups); diff --git a/progmgr/wndproc.c b/progmgr/wndproc.c index b4564a7..83b725b 100644 --- a/progmgr/wndproc.c +++ b/progmgr/wndproc.c @@ -55,22 +55,20 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) case WM_SYSCOMMAND: { - if (wParam == IDM_SHUTDOWN) - { - CmdProc(hWnd, wParam, lParam); - break; - } if (wParam == IDM_TASKMGR) { ShellExecute(hWndProgMgr, L"open", L"TASKMGR.EXE", NULL, NULL, SW_NORMAL); break; } + + if (wParam == IDM_SHUTDOWN) if (wParam == IDM_FILE_EXIT) if (wParam == IDM_FILE_RUN) { CmdProc(hWnd, wParam, lParam); break; } + goto WndProcDefault; //return DefFrameProc(hWnd, hwndMDIClient, uiMsg, wParam, lParam); } @@ -83,8 +81,12 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) goto WndProcDefault; case WM_CLOSE: - if (GetShellWindow()) + if (bSaveSettings) + SaveConfig(TRUE, TRUE, TRUE); + + if (bIsDefaultShell && (GetShellWindow() != NULL)) SetShellWindow(0); + PostQuitMessage(0); break; @@ -151,7 +153,7 @@ LRESULT CALLBACK CmdProc(HWND hWnd, WPARAM wParam, LPARAM lParam) case IDM_OPTIONS_SAVENOW: SaveConfig: - SaveConfig(); + SaveConfig(TRUE, TRUE, TRUE); break; case IDM_HELP_INDEX: