From: lx-s Date: Mon, 25 Apr 2022 11:21:04 +0000 (+0200) Subject: Fixed Tab Focus. X-Git-Tag: 2.0.0.0~5 X-Git-Url: https://repos.lx-s.de/gitweb/?a=commitdiff_plain;h=e17d26bee07ec175ba35348a4f8f2a480f49b059;p=winmute.git Fixed Tab Focus. --- diff --git a/WinMute/AboutDlg.cpp b/WinMute/AboutDlg.cpp index 81fab64..1501f69 100644 --- a/WinMute/AboutDlg.cpp +++ b/WinMute/AboutDlg.cpp @@ -120,12 +120,43 @@ static void SwitchTab(AboutDlgData* dlgData, HWND hNewTab) ShowWindow(dlgData->hActiveTab, SW_SHOW); } -static void ResizeTab(HWND hTabCtrl, HWND hTabPage) +static void ResizeTabs(HWND hTabCtrl, HWND* hTabs, int tabCount) { - RECT r = { 0 }; - GetClientRect(hTabPage, &r); - TabCtrl_AdjustRect(hTabCtrl, FALSE, &r); - MoveWindow(hTabPage, r.left, r.top, r.right, r.bottom, TRUE); + RECT tabCtrlRect = { 0 }; + GetWindowRect(hTabCtrl, &tabCtrlRect); + POINT tabCtrlPos = { 0 }; + tabCtrlPos.x = tabCtrlRect.left; + tabCtrlPos.y = tabCtrlRect.top; + ScreenToClient(GetParent(hTabCtrl), &tabCtrlPos); + + GetClientRect(hTabCtrl, &tabCtrlRect); + TabCtrl_AdjustRect(hTabCtrl, FALSE, &tabCtrlRect); + tabCtrlRect.left += tabCtrlPos.x; + tabCtrlRect.top += tabCtrlPos.y; + + HDWP hdwp = BeginDeferWindowPos(tabCount); + if (hdwp == NULL) { + PrintWindowsError(_T("BeginDeferWindowPos"), GetLastError()); + } else { + for (int i = 0; i < tabCount; ++i) { + HDWP newHdwp = DeferWindowPos( + hdwp, + hTabs[i], + HWND_TOP, + tabCtrlRect.left, + tabCtrlRect.top, + tabCtrlRect.right - tabCtrlRect.left, + tabCtrlRect.bottom - tabCtrlRect.top, + 0); + if (hdwp == NULL) { + PrintWindowsError(_T("DeferWindowPos"), GetLastError()); + break; + } else { + hdwp = newHdwp; + } + } + EndDeferWindowPos(hdwp); + } } static INT_PTR CALLBACK About_GeneralDlgProc(HWND hDlg, UINT msg, WPARAM, LPARAM lParam) @@ -230,21 +261,19 @@ INT_PTR CALLBACK AboutDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) dlgData->hTabs[ABOUT_TAB_GENERAL] = CreateDialog( nullptr, MAKEINTRESOURCE(IDD_ABOUT_WINMUTE), - dlgData->hTabCtrl, + hDlg, About_GeneralDlgProc); dlgData->hTabs[ABOUT_TAB_LICENSE] = CreateDialog( nullptr, MAKEINTRESOURCE(IDD_ABOUT_LICENSE), - dlgData->hTabCtrl, + hDlg, About_LicenseDlgProc); // Init tab pages + ResizeTabs(dlgData->hTabCtrl, dlgData->hTabs, ABOUT_TAB_COUNT); for (int i = 0; i < ABOUT_TAB_COUNT; ++i) { - HWND hCurTab = dlgData->hTabs[i]; - ShowWindow(hCurTab, SW_HIDE); - ResizeTab(dlgData->hTabCtrl, hCurTab); + ShowWindow(dlgData->hTabs[i], SW_HIDE); } - SwitchTab(dlgData, dlgData->hTabs[ABOUT_TAB_GENERAL]); HWND hTitle = GetDlgItem(hDlg, IDC_ABOUT_TITLE); diff --git a/WinMute/SettingsDlg.cpp b/WinMute/SettingsDlg.cpp index 931bef8..717fe1e 100644 --- a/WinMute/SettingsDlg.cpp +++ b/WinMute/SettingsDlg.cpp @@ -60,6 +60,8 @@ extern INT_PTR CALLBACK Settings_GeneralDlgProc(HWND, UINT, WPARAM, LPARAM); extern INT_PTR CALLBACK Settings_MuteDlgProc(HWND, UINT, WPARAM, LPARAM); extern INT_PTR CALLBACK Settings_GeneralWifiDlgProc(HWND, UINT, WPARAM, LPARAM); +extern HINSTANCE hglobInstance; + static void InsertTabItem(HWND hTabCtrl, UINT id, const TCHAR* itemName) { constexpr int bufSize = 50; @@ -81,14 +83,46 @@ static void SwitchTab(SettingsDlgData* dlgData, HWND hNewTab) } dlgData->hActiveTab = hNewTab; ShowWindow(dlgData->hActiveTab, SW_SHOW); + //SetFocus(dlgData->hActiveTab); } -static void ResizeTab(HWND hTabCtrl, HWND hTabPage) +static void ResizeTabs(HWND hTabCtrl, HWND* hTabs, int tabCount) { - RECT r = { 0 }; - GetClientRect(hTabPage, &r); - TabCtrl_AdjustRect(hTabCtrl, FALSE, &r); - MoveWindow(hTabPage, r.left, r.top, r.right, r.bottom, TRUE); + RECT tabCtrlRect = { 0 }; + GetWindowRect(hTabCtrl, &tabCtrlRect); + POINT tabCtrlPos = { 0 }; + tabCtrlPos.x = tabCtrlRect.left; + tabCtrlPos.y = tabCtrlRect.top; + ScreenToClient(GetParent(hTabCtrl), &tabCtrlPos); + + GetClientRect(hTabCtrl, &tabCtrlRect); + TabCtrl_AdjustRect(hTabCtrl, FALSE, &tabCtrlRect); + tabCtrlRect.left += tabCtrlPos.x; + tabCtrlRect.top += tabCtrlPos.y; + + HDWP hdwp = BeginDeferWindowPos(tabCount); + if (hdwp == NULL) { + PrintWindowsError(_T("BeginDeferWindowPos"), GetLastError()); + } else { + for (int i = 0; i < tabCount; ++i) { + HDWP newHdwp = DeferWindowPos( + hdwp, + hTabs[i], + HWND_TOP, + tabCtrlRect.left, + tabCtrlRect.top, + tabCtrlRect.right - tabCtrlRect.left, + tabCtrlRect.bottom - tabCtrlRect.top, + 0); + if (hdwp == NULL) { + PrintWindowsError(_T("DeferWindowPos"), GetLastError()); + break; + } else { + hdwp = newHdwp; + } + } + EndDeferWindowPos(hdwp); + } } INT_PTR CALLBACK SettingsDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) @@ -110,35 +144,35 @@ INT_PTR CALLBACK SettingsDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lPar InsertTabItem(dlgData->hTabCtrl, SETTINGS_TAB_WIFI, _T("WLAN")); dlgData->hTabs[SETTINGS_TAB_GENERAL] = CreateDialogParam( - nullptr, + hglobInstance, MAKEINTRESOURCE(IDD_SETTINGS_GENERAL), - dlgData->hTabCtrl, + hDlg, Settings_GeneralDlgProc, reinterpret_cast(settings)); dlgData->hTabs[SETTINGS_TAB_MUTE] = CreateDialogParam( - nullptr, + hglobInstance, MAKEINTRESOURCE(IDD_SETTINGS_MUTE), - dlgData->hTabCtrl, + hDlg, Settings_MuteDlgProc, reinterpret_cast(settings)); dlgData->hTabs[SETTINGS_TAB_QUIETHOURS] = CreateDialogParam( - nullptr, + hglobInstance, MAKEINTRESOURCE(IDD_SETTINGS_QUIETHOURS), - dlgData->hTabCtrl, + hDlg, Settings_QuietHoursDlgProc, reinterpret_cast(settings)); dlgData->hTabs[SETTINGS_TAB_WIFI] = CreateDialogParam( - nullptr, + hglobInstance, MAKEINTRESOURCE(IDD_SETTINGS_WIFI), - dlgData->hTabCtrl, + hDlg, Settings_GeneralWifiDlgProc, reinterpret_cast(settings)); // Init tab pages + ResizeTabs(dlgData->hTabCtrl, dlgData->hTabs, SETTINGS_TAB_COUNT); for (int i = 0; i < SETTINGS_TAB_COUNT; ++i) { HWND hCurTab = dlgData->hTabs[i]; ShowWindow(hCurTab, SW_HIDE); - ResizeTab(dlgData->hTabCtrl, hCurTab); } HICON hIcon = LoadIcon( diff --git a/WinMute/WinMute.rc b/WinMute/WinMute.rc index 107aa43..4c201d7 100644 --- a/WinMute/WinMute.rc +++ b/WinMute/WinMute.rc @@ -52,6 +52,7 @@ END IDD_ABOUT DIALOGEX 0, 0, 313, 269 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTROLPARENT | WS_EX_APPWINDOW CAPTION "About WinMute" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN @@ -63,6 +64,7 @@ END IDD_SETTINGS DIALOGEX 0, 0, 269, 253 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTROLPARENT | WS_EX_APPWINDOW CAPTION "Settings" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN @@ -73,6 +75,7 @@ END IDD_SETTINGS_GENERAL DIALOGEX 0, 0, 233, 179 STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD +EXSTYLE WS_EX_CONTROLPARENT FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN CONTROL "Start WinMute on system startup",IDC_RUNONSTARTUP, @@ -82,7 +85,7 @@ BEGIN END IDD_SETTINGS_QUIETHOURS DIALOGEX 0, 0, 246, 198 -STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD +STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN LTEXT "During Quiet Hours WinMute automatically mutes your PC volumes and unmutes it afterwards.",IDC_STATIC,7,9,232,22 @@ -98,27 +101,27 @@ BEGIN END IDD_ABOUT_LICENSE DIALOGEX 0, 0, 300, 181 -STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD +STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN EDITTEXT IDC_LICENSETEXT,7,7,286,167,ES_CENTER | ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER | WS_VSCROLL END IDD_ABOUT_WINMUTE DIALOGEX 0, 0, 298, 176 -STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD +STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN - EDITTEXT IDC_ABOUTTEXT,7,14,182,155,ES_MULTILINE | ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER CONTROL "Author Site: www.lx-s.de",IDC_LINK_HOMEPAGE, "SysLink",WS_TABSTOP,197,14,94,14 CONTROL "Project Site && Code",IDC_LINK_PROJECT, "SysLink",WS_TABSTOP,197,32,94,14 CONTROL "Support",IDC_LINK_TICKETS, "SysLink",WS_TABSTOP,197,49,94,14 + EDITTEXT IDC_ABOUTTEXT,7,14,182,155,ES_MULTILINE | ES_AUTOHSCROLL | ES_NOHIDESEL | ES_READONLY | NOT WS_BORDER END IDD_SETTINGS_MUTE DIALOGEX 0, 0, 242, 205 -STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD +STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN GROUPBOX "General",IDC_STATIC,7,7,228,31 @@ -143,7 +146,7 @@ BEGIN END IDD_SETTINGS_WIFI DIALOGEX 0, 0, 242, 204 -STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD +STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN LISTBOX IDC_WIFI_LIST,7,66,170,110,LBS_SORT | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP @@ -359,8 +362,8 @@ END // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,9,9,3 - PRODUCTVERSION 1,9,9,3 + FILEVERSION 2,0,0,0 + PRODUCTVERSION 2,0,0,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -377,23 +380,23 @@ BEGIN BEGIN VALUE "CompanyName", "LX-Systems" VALUE "FileDescription", "WinMute" - VALUE "FileVersion", "1.9.9.3" + VALUE "FileVersion", "2.0.0.0" VALUE "InternalName", "WinMute.exe" VALUE "LegalCopyright", "Copyright (C) 2022, Alexander Steinhöfer" VALUE "OriginalFilename", "WinMute.exe" VALUE "ProductName", "WinMute" - VALUE "ProductVersion", "1.9.9.3" + VALUE "ProductVersion", "2.0.0.0" END BLOCK "040704b0" BEGIN VALUE "CompanyName", "LX-Systems" VALUE "FileDescription", "WinMute" - VALUE "FileVersion", "1.9.9.3" + VALUE "FileVersion", "2.0.0.0" VALUE "InternalName", "WinMute.exe" VALUE "LegalCopyright", "Copyright (C) 2022, Alexander Steinhöfer" VALUE "OriginalFilename", "WinMute.exe" VALUE "ProductName", "WinMute" - VALUE "ProductVersion", "1.9.9.3" + VALUE "ProductVersion", "2.0.0.0" END END BLOCK "VarFileInfo"