By Benjamin I. Williams (biwillia76)
The attached patch completely fixes the flicker problem when
creating combo boxes. It also will make it elementary to
remove flicker during the creation of other controls
(although all the other controls are flicker free, AFAIK).
It does this by adding an optional 'visible' parameter to
the internal MSWCreateControl method, whereby the caller can
create a control invisibly by default, perform some
complicated sizing calculations, and then finally show the
control before the Create finished.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@16676
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
locale/*.po
locale/*.mo
+locale/Makefile
art/*.xpm
art/motif/*.xpm
rem Now copy some binary files to 'bin'
if not isdir bin mkdir bin
copy %src\bin\dialoged.exe bin
+copy %src\bin\dialoged.hlp bin
+copy %src\bin\dialoged.chm bin
copy %src\bin\tex2rtf.exe bin
+copy %src\bin\tex2rtf.hlp bin
+copy %src\bin\tex2rtf.cnt bin
copy %src\bin\dbgview.* bin
copy %src\bin\widgets.exe bin
copy %src\bin\widgets.exe.manifest bin
virtual wxSize DoGetBestSize() const;
+
// create the control of the given Window class
bool MSWCreateControl(const wxChar *classname,
const wxString& label,
const wxPoint& pos,
const wxSize& size,
- long style);
+ long style,
+ bool visible = true);
+
// NB: the method below is deprecated now, with MSWGetStyle() the method
// above should be used instead! Once all the controls are updated to
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
const wxString& label = wxEmptyString,
- WXDWORD exstyle = (WXDWORD)-1);
+ WXDWORD exstyle = (WXDWORD)-1,
+ bool visible = true);
// default style for the control include WS_TABSTOP if it AcceptsFocus()
virtual WXDWORD MSWGetStyle(long style, WXDWORD *exstyle) const;
// and now create the MSW control
- if ( !MSWCreateControl(_T("COMBOBOX"), msStyle) )
+ if ( !MSWCreateControl(_T("COMBOBOX"), msStyle, pos, size, wxEmptyString, (WXDWORD)-1, false) )
return FALSE;
// A choice/combobox normally has a white background (or other, depending
);
}
+ // finally, show the combo box
+ Show(true);
+
return TRUE;
}
const wxString& label,
const wxPoint& pos,
const wxSize& size,
- long style)
+ long style,
+ bool visible)
{
WXDWORD exstyle;
WXDWORD msStyle = MSWGetStyle(style, &exstyle);
- return MSWCreateControl(classname, msStyle, pos, size, label, exstyle);
+ return MSWCreateControl(classname, msStyle, pos, size, label, exstyle, visible);
}
bool wxControl::MSWCreateControl(const wxChar *classname,
const wxPoint& pos,
const wxSize& size,
const wxString& label,
- WXDWORD exstyle)
+ WXDWORD exstyle,
+ bool visible)
{
// want3D tells us whether or not the style specified a 3D border.
// If so, under WIN16 we can use Ctl3D to give it an appropriate style.
// all controls should have these styles (wxWindows creates all controls
// visible by default)
- style |= WS_CHILD | WS_VISIBLE;
+ style |= WS_CHILD;
+
+ // sometimes, controls will defer showing the window until
+ // all configuration, sizing, and positioning is completed
+ if (!visible)
+ {
+ m_isShown = FALSE;
+ }
+ else
+ {
+ style |= WS_VISIBLE;
+ }
int x = pos.x == -1 ? 0 : pos.x,
y = pos.y == -1 ? 0 : pos.y,