Fix text selection in combo boxes of find/replace dialog problem on resize

Fixes #3367, closes #3416
pull/3495/merge
Roman Artiukhin 8 years ago committed by Don HO
parent 3aa8535d5d
commit 0d90ad1374

@ -713,16 +713,28 @@ void FindReplaceDlg::resizeDialogElements(LONG newWidth)
IDREPLACE, IDREPLACEALL,IDC_REPLACE_OPENEDFILES, IDD_FINDINFILES_FIND_BUTTON, IDD_FINDINFILES_REPLACEINFILES, IDC_FINDPREV, IDOK, IDCANCEL,
};
_deltaWidth = newWidth - _initialClientWidth;
auto addWidth = _deltaWidth - _lastDeltaWidth;
_lastDeltaWidth = _deltaWidth;
const UINT flags = SWP_NOZORDER | SWP_NOOWNERZORDER | SWP_NOACTIVATE | SWP_NOCOPYBITS;
auto newDeltaWidth = newWidth - _initialClientWidth;
auto addWidth = newDeltaWidth - _deltaWidth;
_deltaWidth = newDeltaWidth;
RECT rc;
for (int id : resizeWindowIDs)
{
HWND resizeHwnd = ::GetDlgItem(_hSelf, id);
::GetClientRect(resizeHwnd, &rc);
::SetWindowPos(resizeHwnd, NULL, 0, 0, rc.right + addWidth, rc.bottom, SWP_NOMOVE | SWP_NOZORDER);
// Combo box for some reasons selects text on resize. So let's check befor resize if selection is present and clear it manually after resize.
DWORD endSelection = 0;
SendMessage(resizeHwnd, CB_GETEDITSEL, 0, (LPARAM)&endSelection);
::SetWindowPos(resizeHwnd, NULL, 0, 0, rc.right + addWidth, rc.bottom, SWP_NOMOVE | flags);
if (endSelection == 0)
{
SendMessage(resizeHwnd, CB_SETEDITSEL, 0, 0);
}
}
for (int moveWndID : moveWindowIDs)
@ -731,15 +743,14 @@ void FindReplaceDlg::resizeDialogElements(LONG newWidth)
::GetWindowRect(moveHwnd, &rc);
::MapWindowPoints(NULL, _hSelf, (LPPOINT)&rc, 2);
::SetWindowPos(moveHwnd, NULL, rc.left + addWidth, rc.top, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
::InvalidateRect(moveHwnd, NULL, TRUE);
::SetWindowPos(moveHwnd, NULL, rc.left + addWidth, rc.top, 0, 0, SWP_NOSIZE | flags);
}
auto additionalWindowHwndsToResize = { _tab.getHSelf() , _statusBar.getHSelf() };
for (HWND resizeHwnd : additionalWindowHwndsToResize)
{
::GetClientRect(resizeHwnd, &rc);
::SetWindowPos(resizeHwnd, NULL, 0, 0, rc.right + addWidth, rc.bottom, SWP_NOMOVE | SWP_NOZORDER);
::SetWindowPos(resizeHwnd, NULL, 0, 0, rc.right + addWidth, rc.bottom, SWP_NOMOVE | flags);
}
}

@ -346,7 +346,6 @@ protected :
private :
RECT _initialWindowRect;
LONG _lastDeltaWidth;
LONG _deltaWidth;
LONG _initialClientWidth;

Loading…
Cancel
Save