use LVM_SETITEMSTATE instead of LVM_SETITEM for virtual controls

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@11055 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2001-07-14 21:01:43 +00:00
parent 784164e176
commit 8dff2b5cf8

View File

@@ -72,8 +72,17 @@
// private functions // private functions
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
static void wxConvertToMSWListItem(const wxListCtrl *ctrl, wxListItem& info, LV_ITEM& tvItem); // convert our state and mask flags to LV_ITEM constants
static void wxConvertFromMSWListItem(const wxListCtrl *ctrl, wxListItem& info, LV_ITEM& tvItem, HWND getFullInfo = 0); static void wxConvertToMSWFlags(long state, long mask, LV_ITEM& lvItem);
// convert wxListItem to LV_ITEM
static void wxConvertToMSWListItem(const wxListCtrl *ctrl,
const wxListItem& info, LV_ITEM& lvItem);
// convert LV_ITEM to wxListItem
static void wxConvertFromMSWListItem(HWND hwndListCtrl,
wxListItem& info,
/* const */ LV_ITEM& lvItem);
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// events // events
@@ -660,7 +669,7 @@ bool wxListCtrl::GetItem(wxListItem& info) const
} }
else else
{ {
wxConvertFromMSWListItem(this, info, lvItem); wxConvertFromMSWListItem(GetHwnd(), info, lvItem);
} }
if (lvItem.pszText) if (lvItem.pszText)
@@ -745,14 +754,22 @@ int wxListCtrl::GetItemState(long item, long stateMask) const
// Sets the item state // Sets the item state
bool wxListCtrl::SetItemState(long item, long state, long stateMask) bool wxListCtrl::SetItemState(long item, long state, long stateMask)
{ {
wxListItem info; // NB: don't use SetItem() here as it doesn't work with the virtual list
// controls
LV_ITEM lvItem;
wxZeroMemory(lvItem);
info.m_mask = wxLIST_MASK_STATE; wxConvertToMSWFlags(state, stateMask, lvItem);
info.m_state = state;
info.m_stateMask = stateMask;
info.m_itemId = item;
return SetItem(info); if ( !::SendMessage(GetHwnd(), LVM_SETITEMSTATE,
(WPARAM)item, (LPARAM)&lvItem) )
{
wxLogLastError(_T("ListView_SetItemState"));
return FALSE;
}
return TRUE;
} }
// Sets the item image // Sets the item image
@@ -1407,7 +1424,7 @@ bool wxListCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result)
{ {
eventType = wxEVT_COMMAND_LIST_BEGIN_LABEL_EDIT; eventType = wxEVT_COMMAND_LIST_BEGIN_LABEL_EDIT;
LV_DISPINFO *info = (LV_DISPINFO *)lParam; LV_DISPINFO *info = (LV_DISPINFO *)lParam;
wxConvertFromMSWListItem(this, event.m_item, info->item, GetHwnd()); wxConvertFromMSWListItem(GetHwnd(), event.m_item, info->item);
event.m_itemIndex = event.m_item.m_itemId; event.m_itemIndex = event.m_item.m_itemId;
} }
break; break;
@@ -1440,7 +1457,7 @@ bool wxListCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result)
{ {
eventType = wxEVT_COMMAND_LIST_END_LABEL_EDIT; eventType = wxEVT_COMMAND_LIST_END_LABEL_EDIT;
LV_DISPINFO *info = (LV_DISPINFO *)lParam; LV_DISPINFO *info = (LV_DISPINFO *)lParam;
wxConvertFromMSWListItem(this, event.m_item, info->item); wxConvertFromMSWListItem(GetHwnd(), event.m_item, info->item);
if ( info->item.pszText == NULL || info->item.iItem == -1 ) if ( info->item.pszText == NULL || info->item.iItem == -1 )
return FALSE; return FALSE;
@@ -1452,7 +1469,7 @@ bool wxListCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result)
{ {
eventType = wxEVT_COMMAND_LIST_SET_INFO; eventType = wxEVT_COMMAND_LIST_SET_INFO;
LV_DISPINFO *info = (LV_DISPINFO *)lParam; LV_DISPINFO *info = (LV_DISPINFO *)lParam;
wxConvertFromMSWListItem(this, event.m_item, info->item, GetHwnd()); wxConvertFromMSWListItem(GetHwnd(), event.m_item, info->item);
} }
break; break;
@@ -1918,7 +1935,9 @@ void wxListItem::ClearAttributes()
m_attr = NULL; m_attr = NULL;
} }
static void wxConvertFromMSWListItem(const wxListCtrl *WXUNUSED(ctrl), wxListItem& info, LV_ITEM& lvItem, HWND getFullInfo) static void wxConvertFromMSWListItem(HWND hwndListCtrl,
wxListItem& info,
LV_ITEM& lvItem)
{ {
info.m_data = lvItem.lParam; info.m_data = lvItem.lParam;
info.m_mask = 0; info.m_mask = 0;
@@ -1929,7 +1948,7 @@ static void wxConvertFromMSWListItem(const wxListCtrl *WXUNUSED(ctrl), wxListIte
long oldMask = lvItem.mask; long oldMask = lvItem.mask;
bool needText = FALSE; bool needText = FALSE;
if (getFullInfo != 0) if (hwndListCtrl != 0)
{ {
if ( lvItem.mask & LVIF_TEXT ) if ( lvItem.mask & LVIF_TEXT )
needText = FALSE; needText = FALSE;
@@ -1941,9 +1960,8 @@ static void wxConvertFromMSWListItem(const wxListCtrl *WXUNUSED(ctrl), wxListIte
lvItem.pszText = new wxChar[513]; lvItem.pszText = new wxChar[513];
lvItem.cchTextMax = 512; lvItem.cchTextMax = 512;
} }
// lvItem.mask |= TVIF_HANDLE | TVIF_STATE | TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_CHILDREN | TVIF_PARAM;
lvItem.mask |= LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM; lvItem.mask |= LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM;
::SendMessage(getFullInfo, LVM_GETITEM, 0, (LPARAM)& lvItem); ::SendMessage(hwndListCtrl, LVM_GETITEM, 0, (LPARAM)& lvItem);
} }
if ( lvItem.mask & LVIF_STATE ) if ( lvItem.mask & LVIF_STATE )
@@ -2000,7 +2018,37 @@ static void wxConvertFromMSWListItem(const wxListCtrl *WXUNUSED(ctrl), wxListIte
lvItem.mask = oldMask; lvItem.mask = oldMask;
} }
static void wxConvertToMSWListItem(const wxListCtrl *ctrl, wxListItem& info, LV_ITEM& lvItem) static void wxConvertToMSWFlags(long state, long stateMask, LV_ITEM& lvItem)
{
if (stateMask & wxLIST_STATE_CUT)
{
lvItem.stateMask |= LVIS_CUT;
if (state & wxLIST_STATE_CUT)
lvItem.state |= LVIS_CUT;
}
if (stateMask & wxLIST_STATE_DROPHILITED)
{
lvItem.stateMask |= LVIS_DROPHILITED;
if (state & wxLIST_STATE_DROPHILITED)
lvItem.state |= LVIS_DROPHILITED;
}
if (stateMask & wxLIST_STATE_FOCUSED)
{
lvItem.stateMask |= LVIS_FOCUSED;
if (state & wxLIST_STATE_FOCUSED)
lvItem.state |= LVIS_FOCUSED;
}
if (stateMask & wxLIST_STATE_SELECTED)
{
lvItem.stateMask |= LVIS_SELECTED;
if (state & wxLIST_STATE_SELECTED)
lvItem.state |= LVIS_SELECTED;
}
}
static void wxConvertToMSWListItem(const wxListCtrl *ctrl,
const wxListItem& info,
LV_ITEM& lvItem)
{ {
lvItem.iItem = (int) info.m_itemId; lvItem.iItem = (int) info.m_itemId;
@@ -2014,30 +2062,8 @@ static void wxConvertToMSWListItem(const wxListCtrl *ctrl, wxListItem& info, LV_
if (info.m_mask & wxLIST_MASK_STATE) if (info.m_mask & wxLIST_MASK_STATE)
{ {
lvItem.mask |= LVIF_STATE; lvItem.mask |= LVIF_STATE;
if (info.m_stateMask & wxLIST_STATE_CUT)
{ wxConvertToMSWFlags(info.m_state, info.m_stateMask, lvItem);
lvItem.stateMask |= LVIS_CUT;
if (info.m_state & wxLIST_STATE_CUT)
lvItem.state |= LVIS_CUT;
}
if (info.m_stateMask & wxLIST_STATE_DROPHILITED)
{
lvItem.stateMask |= LVIS_DROPHILITED;
if (info.m_state & wxLIST_STATE_DROPHILITED)
lvItem.state |= LVIS_DROPHILITED;
}
if (info.m_stateMask & wxLIST_STATE_FOCUSED)
{
lvItem.stateMask |= LVIS_FOCUSED;
if (info.m_state & wxLIST_STATE_FOCUSED)
lvItem.state |= LVIS_FOCUSED;
}
if (info.m_stateMask & wxLIST_STATE_SELECTED)
{
lvItem.stateMask |= LVIS_SELECTED;
if (info.m_state & wxLIST_STATE_SELECTED)
lvItem.state |= LVIS_SELECTED;
}
} }
if (info.m_mask & wxLIST_MASK_TEXT) if (info.m_mask & wxLIST_MASK_TEXT)