From: Vadim Zeitlin Date: Tue, 4 Dec 2012 00:39:37 +0000 (+0000) Subject: Explicitly set margins for single line text controls in wxMSW. X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/176da26d22b03c7444ccb6d02675fcbf644c8bb4?ds=inline Explicitly set margins for single line text controls in wxMSW. The margin used by them was inconsistent and depended on the initial size the control was created with for some reason. Call EM_SETMARGINS explicitly to ensure consistent appearance in all cases. Closes #2438. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@73126 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/msw/textctrl.cpp b/src/msw/textctrl.cpp index 4245b58125..fcdb1ab111 100644 --- a/src/msw/textctrl.cpp +++ b/src/msw/textctrl.cpp @@ -499,7 +499,23 @@ bool wxTextCtrl::MSWCreateText(const wxString& value, SetWindowPos(GetHwnd(), NULL, 0, 0, 0, 0, SWP_NOZORDER|SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE| SWP_FRAMECHANGED); -#endif + + if ( IsSingleLine() ) + { + // If we don't set the margins explicitly, their size depends on the + // control initial size, see #2438. So explicitly set them to something + // consistent. And for this we have 2 candidates: EC_USEFONTINFO (which + // sets the left margin to 3 pixels, at least under Windows 7) or 0. We + // use the former because it looks like it was meant to be used as the + // default (what else would it be there for?) and 0 looks bad in + // classic mode, i.e. without themes. Also, the margin can be reset to + // 0 easily by calling SetMargins() explicitly but setting it to the + // default value is not currently supported. + ::SendMessage(GetHwnd(), EM_SETMARGINS, + EC_LEFTMARGIN | EC_RIGHTMARGIN, + MAKELPARAM(EC_USEFONTINFO, EC_USEFONTINFO)); + } +#endif // !__WXWINCE__ return true; }