![]() |
CXTPListCtrl / Can't have more than one and sort |
Post Reply ![]() |
Author | |
rhfritz ![]() Groupie ![]() Joined: 19 September 2014 Status: Offline Points: 9 |
![]() ![]() ![]() ![]() ![]() Posted: 16 November 2017 at 3:45pm |
There's a bug in XTP that is reproducible using ListCtrl_vc150 example code. The platform is Win10 Enterprise. Visual Studio 2017. Xtreme ToolkitPro v18.0.1. I've attached a screen snapshot of the problem, which is that if you have more than one CXTPListCtrl on a window, the OnNotify event does not let you differentiate which one you attempted to sort. ![]() The work around is that when the list control of interest is getting focus and the column-header is clicked, both wParam and pHDNotify->hdr.idFrom are valid, but pHDNotify->hdr.code is not HDN_ITEMCLICKA. So by trapping the idFrom, we can determine which list control generated the event. Here is the work around code that fixes the example: void CListCtrlDlg::SortColumn(CXTPListCtrl *pListCtrl, int iCol, bool bAsc) { m_bAscending = bAsc; // each list control needs a unique instance m_nSortedCol = iCol; // each list control needs a unique instance // set sort image for header and sort column. pListCtrl->SetSortImage(m_nSortedCol, m_bAscending); CXTPSortClass csc(pListCtrl, m_nSortedCol); csc.Sort(m_bAscending, xtpSortString); } BOOL CListCtrlDlg::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult) { HD_NOTIFY *pHDNotify = (HD_NOTIFY*)lParam; #pragma region XTP_NOTIFY_BUG // There's a bug in XTP. The OnNotify events received *just prior* to pHDNotify->hdr.code == HDN_ITEMCLICKA // have the wParam and idFrom set to the proper control. But at the time of the HDN_ITEMCLICKA, both are always zero. // So we save the idFrom and use it instead. static UINT idFrom = 0; if (wParam && wParam == pHDNotify->hdr.idFrom) idFrom = pHDNotify->hdr.idFrom; #pragma endregion if (pHDNotify->hdr.code == HDN_ITEMCLICKA || pHDNotify->hdr.code == HDN_ITEMCLICKW) { switch (idFrom) { case IDC_LIST_CTRL: if (pHDNotify->iItem == m_nSortedCol) SortColumn(&m_listCtrl, pHDNotify->iItem, !m_bAscending); else SortColumn(&m_listCtrl, pHDNotify->iItem, BoolType(m_header.GetAscending())); break; case IDC_LIST_CTRL2: if (pHDNotify->iItem == m_nSortedCol) SortColumn(&m_listCtrl2, pHDNotify->iItem, !m_bAscending); else SortColumn(&m_listCtrl2, pHDNotify->iItem, BoolType(m_header.GetAscending())); break; } } return CXTPResizeDialog::OnNotify(wParam, lParam, pResult); } |
|
![]() |
Post Reply ![]() |
|
Tweet
|
Forum Jump | Forum Permissions ![]() You cannot post new topics in this forum You cannot reply to topics in this forum You cannot delete your posts in this forum You cannot edit your posts in this forum You cannot create polls in this forum You cannot vote in polls in this forum |