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
This commit is contained in:
Vadim Zeitlin
2012-12-04 00:39:37 +00:00
parent 3fb8a2bcfb
commit 176da26d22

View File

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