// click if needed
if ( processed )
{
- int htFlags = 0;
- wxTreeItemId item = HitTest(wxPoint(x, y), htFlags);
-
- if ( htFlags & wxTREE_HITTEST_ONITEMSTATEICON )
+ if ( tvht.flags & TVHT_ONITEMSTATEICON )
{
m_triggerStateImageClick = true;
}
{
wxLoadedDLL dllComCtl32(wxT("comctl32.dll"));
if ( dllComCtl32.IsLoaded() )
+ {
wxDL_INIT_FUNC(s_pfn, ImageList_Copy, dllComCtl32);
+ loaded = true;
+ }
}
if ( !s_pfnImageList_Copy )
DoSetItem(&tvItem);
}
+// ----------------------------------------------------------------------------
+// Update locking.
+// ----------------------------------------------------------------------------
+
+// Using WM_SETREDRAW with the native control is a bad idea as it's broken in
+// some Windows versions (see http://support.microsoft.com/kb/130611) and
+// doesn't seem to do anything in other ones (e.g. under Windows 7 the tree
+// control keeps updating its scrollbars while the items are added to it,
+// resulting in horrible flicker when adding even a couple of dozen items).
+// So we hide it instead of freezing -- this still flickers, but actually not
+// as badly as it would if we didn't do it.
+
+void wxTreeCtrl::DoFreeze()
+{
+ // Notice that we don't call wxWindow::Hide() here as we want the window to
+ // remain shown from wxWidgets point of view and also because
+ // wxWindowMSW::Show() calls Do{Freeze,Thaw}() itself, so we'd get into
+ // infinite recursion this way.
+ if ( IsShown() )
+ ::ShowWindow(GetHwnd(), SW_HIDE);
+}
+
+void wxTreeCtrl::DoThaw()
+{
+ if ( IsShown() )
+ ::ShowWindow(GetHwnd(), SW_SHOW);
+}
+
#endif // wxUSE_TREECTRL