void CListCtrlEx::auto_size() { if (!GetSafeHwnd() || !GetHeaderCtrl()) return; for (int i = 0; i < GetHeaderCtrl()->GetItemCount(); i++) SetColumnWidth(i, LVSCW_AUTOSIZE_USEHEADER); }
//控件绑定 void CHappyGoDlgT::PreSubclassWindow() { if(GetHeaderCtrl()) m_ListHeader.SubclassWindow(GetHeaderCtrl()->GetSafeHwnd()); CListCtrl::PreSubclassWindow(); }
BOOL CReportCtrl::SetHeaderImage(int nColumn, int nImageIndex, BOOL bLeftSide) { if(GetHeaderCtrl()->GetImageList() == NULL) { CListCtrl :: GetHeaderCtrl()->SetImageList(GetImageList()); } HDITEM hi; :: memset(&hi, 0, sizeof(HDITEM)); hi.mask = HDI_FORMAT; if(!GetHeaderCtrl()->GetItem(nColumn, &hi)) { return(FALSE); } hi.mask |= HDI_IMAGE; hi.fmt |= HDF_IMAGE; if(!bLeftSide) { hi.fmt |= HDF_BITMAP_ON_RIGHT; // draw the image on right side of text } hi.iImage = nImageIndex; return(CListCtrl :: GetHeaderCtrl()->SetItem(nColumn, &hi)); }
void CReportCtrl::DrawSortArrow(int Col, int Desc) { if (Col < 0) return; #if _MFC_VER < 0x0700 // if MFC 6 HDITEM hdi; hdi.mask = HDI_IMAGE | HDI_FORMAT; GetHeaderCtrl()->GetItem(Col, &hdi); if (Desc < 0) { // erase hdi.mask = HDI_FORMAT; hdi.fmt &= ~HDF_IMAGE; } else { hdi.mask = HDI_FORMAT | HDI_IMAGE; hdi.fmt |= HDF_IMAGE | HDF_BITMAP_ON_RIGHT; hdi.iImage = Desc; } #else // .NET; use sort header format flags instead of image list HDITEM hdi; hdi.mask = HDI_FORMAT; GetHeaderCtrl()->GetItem(Col, &hdi); hdi.mask = HDI_FORMAT; if (Desc < 0) // erase hdi.fmt &= ~(HDF_SORTUP | HDF_SORTDOWN); else { if (Desc) hdi.fmt |= HDF_SORTDOWN; else hdi.fmt |= HDF_SORTUP; } #endif GetHeaderCtrl()->SetItem(Col, &hdi); }
void CSortingListControl::SortItems() { VERIFY(CListCtrl::SortItems(&_CompareFunc, (DWORD_PTR)&m_sorting)); HDITEM hditem; ZeroMemory(&hditem, sizeof(hditem)); if (m_indicatedColumn != -1) { CString text; hditem.mask= HDI_TEXT; hditem.pszText= text.GetBuffer(256); hditem.cchTextMax= 256; GetHeaderCtrl()->GetItem(m_indicatedColumn, &hditem); text.ReleaseBuffer(); text= text.Mid(2); hditem.pszText= (LPTSTR)(LPCTSTR)text; GetHeaderCtrl()->SetItem(m_indicatedColumn, &hditem); } CString text; hditem.mask= HDI_TEXT; hditem.pszText= text.GetBuffer(256); hditem.cchTextMax= 256; GetHeaderCtrl()->GetItem(m_sorting.column1, &hditem); text.ReleaseBuffer(); text= (m_sorting.ascending1 ? _T("< ") : _T("> ")) + text; hditem.pszText= (LPTSTR)(LPCTSTR)text; GetHeaderCtrl()->SetItem(m_sorting.column1, &hditem); m_indicatedColumn= m_sorting.column1; }
void CListCtrlEx::PreSubclassWindow() { if(GetHeaderCtrl()) { m_HeaderCtrl.SubclassWindow(GetHeaderCtrl()->m_hWnd); } CListCtrl::PreSubclassWindow(); }
void CHappyGoDlgT::OnShowWindow(BOOL bShow, UINT nStatus) { CListCtrl::OnShowWindow(bShow, nStatus); // TODO: 在此处添加消息处理程序代码 if(GetHeaderCtrl()) m_ListHeader.SubclassWindow(GetHeaderCtrl()->m_hWnd); }
void CFishListCtrl::PreSubclassWindow() { // TODO: Add your specialized code here and/or call the base class if(GetHeaderCtrl()) { m_ctrlHeader.SubclassWindow(GetHeaderCtrl()->m_hWnd); } CListCtrl::PreSubclassWindow(); }
void CRTListCtrl::PreSubclassWindow() { if(GetHeaderCtrl() != NULL) { m_HeaderCtrl.SubclassWindow(GetHeaderCtrl()->m_hWnd); } m_Container.Create(this); CListCtrl::PreSubclassWindow(); }
void CListCtrlEx::ReadState(LPCSTR pszName) { CHeaderCtrl* pHdr = GetHeaderCtrl (); int *piWidthes; Initialize (); LPBYTE pbW, pbI; UINT uSizeI, uSizeW; CString strIndexes = pszName, strWidthes = pszName; strIndexes += 'I'; strWidthes += 'W'; if (_App.GetProfileBinary (_T ("Settings\\View\\ListViews"), strIndexes, &pbI, &uSizeI) && _App.GetProfileBinary (_T ("Settings\\View\\ListViews"), strWidthes, &pbW, &uSizeW) && uSizeI == m_cTotalCols * sizeof (int) && uSizeW == m_cTotalCols * sizeof (int)) { CopyMemory (m_aIndex, pbI, m_cTotalCols * sizeof (int)); piWidthes = (int*) pbW; int i = m_cTotalCols - 1; for (i = m_cTotalCols - 1; i >= 0; i--) if (m_aIndex [i] == -1) DeleteColumn (i); int aOrder [LISTEX_MAXCOLUMNS]; int iCorr = 0; for (i = 0; i < m_cTotalCols; i++) { if (m_aIndex [i] != -1) aOrder [m_aIndex [i]] = i - iCorr; else iCorr ++; } pHdr->SetOrderArray (GetHeaderCtrl ()->GetItemCount (), (int*) aOrder); RebuildAIndex (); for (i = 0; i < m_cTotalCols; i++) { if (piWidthes [i] > 0) SetColumnWidth (aOrder [m_aIndex [i]], piWidthes [i]); } delete [] pbW; delete [] pbI; } }
void CListCtrlEx::InsertHdrItem(int iCol) { int cCols = GetHeaderCtrl ()->GetItemCount (); InsertColumn (cCols, m_appszCols [iCol], LVCFMT_LEFT, 80); HDITEM item; item.mask = HDI_LPARAM; item.lParam = iCol; GetHeaderCtrl ()->SetItem (cCols, &item); RebuildAIndex (); OnForceUpdate (); }
/******************************************************************************* Function Name : GetFirstVisibleColumn Input(s) : - Output : int Functionality : Returns an integer valuie of the index of first visible column. Member of : CRxMsgList Author(s) : Arunkumar K Date Created : 20-05-2010 Modifications : *******************************************************************************/ int CRxMsgList::GetFirstVisibleColumn() { int nColCount = GetHeaderCtrl()->GetItemCount(); for(int i = 0; i < nColCount; ++i) { int nCol = GetHeaderCtrl()->OrderToIndex(i); if (IsColumnVisible(nCol)) { return nCol; } } return -1; }
void CRichListCtrl::DrawItem(CDC* pDC, int nItem, CRect &rcItem) { if (nItem < 0 || nItem >= (int)m_vctItem.size()) { return; } bool bSelected = false; if (GetItemState(nItem, LVIS_SELECTED)) { bSelected = true; } bool bFocus = false; CWnd *pWndFocus = GetFocus(); if (IsChild(pWndFocus) || pWndFocus == this) { bFocus = true; } int pos = GetScrollPos(SB_HORZ); int nColumnCount = GetHeaderCtrl()->GetItemCount(); CRect rcSubItem; for (int j = 0; j < nColumnCount; ++j) { GetHeaderCtrl()->GetItemRect(j, &rcSubItem); rcSubItem.top = rcItem.top; rcSubItem.bottom = rcItem.bottom; rcSubItem.OffsetRect(-pos, 0); if(rcSubItem.right < rcItem.left || rcSubItem.left > rcItem.right) { continue; } map<int, ListSubItem*>::iterator it = m_vctItem[nItem].find(j); if (it == m_vctItem[nItem].end() || it->second->itemType == CTRL_STATIC) { DrawSubItem(pDC, nItem, j, rcSubItem, bSelected, bFocus); } else if (it->second->itemType == CTRL_BUTTON) { CButton *pButton = (CButton*)(it->second->pItem); if (pButton != NULL) { pButton->ShowWindow(SW_SHOW); pButton->MoveWindow(rcSubItem); } } } }
void CFileBrowserListCtrl::DrawSortArrow(int Col, int Dir) { HDITEM hdi; hdi.mask = HDI_IMAGE | HDI_FORMAT; GetHeaderCtrl()->GetItem(Col, &hdi); if (Dir < 0) { // erase arrow hdi.mask = HDI_FORMAT; hdi.fmt &= ~HDF_IMAGE; } else { hdi.mask = HDI_FORMAT | HDI_IMAGE; hdi.fmt |= HDF_IMAGE | HDF_BITMAP_ON_RIGHT; hdi.iImage = Dir; } GetHeaderCtrl()->SetItem(Col, &hdi); }
void CListCtrlEx::Initialize() { m_cTotalCols = GetHeaderCtrl ()->GetItemCount (); HDITEM item; item.mask = HDI_LPARAM; for (int i = 0; i < m_cTotalCols; i++) { item.lParam = i; GetHeaderCtrl ()->SetItem (i, &item); } RebuildAIndex (); }
//建立消息 int CSkinListCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (__super::OnCreate(lpCreateStruct)==-1) return -1; m_SkinHeadCtrl.SubclassWindow(GetHeaderCtrl()->GetSafeHwnd()); SetExtendedStyle(LIST_STYTE); return 0; }
//控件绑定 void CSkinListCtrl::PreSubclassWindow() { __super::PreSubclassWindow(); m_SkinHeadCtrl.SubclassWindow(GetHeaderCtrl()->GetSafeHwnd()); SetExtendedStyle(LIST_STYTE); return; }
void HHideListCtrl::PreSubclassWindow() { ASSERT( GetStyle() & LVS_REPORT ); CListCtrl::PreSubclassWindow(); VERIFY( m_ctlHeader.SubclassWindow( GetHeaderCtrl()->GetSafeHwnd() ) ); }
void CListCtrlEx::UpdateStatusDownload(int iIndex, int iStatus) { CString strStatus; strStatus.Format(_T("%d%%"), iStatus); m_ProgressList[iIndex]->SetWindowText(strStatus.GetBuffer()); m_ProgressList[iIndex]->SetMarquee(false, 1); m_ProgressList[iIndex]->SetPos(iStatus); m_ProgressList[iIndex]->Invalidate(TRUE); if(iStatus >= 100) { SetItemText(iIndex, 2, strStatus); } CHeaderCtrl* pHeader=GetHeaderCtrl(); CRect ColRt; pHeader->GetItemRect(m_iProgressColumn,&ColRt); CRect rt; GetItemRect(iIndex, &rt, LVIR_LABEL); rt.top += 1; rt.bottom -= 1; rt.left += ColRt.left; int Width = ColRt.Width(); rt.right = rt.left + Width - 4; rt.left = ColRt.left +1 ; rt.right = ColRt.right-1; m_ProgressList[iIndex]->MoveWindow(&rt, TRUE); }
/******************************************************************************* Function Name : OnHeaderEndDrag Input(s) : pNMHDR, pResult Output : BOOL Functionality : Event is fired after column Drag is ended. Member of : CRxMsgList Author(s) : Arunkumar K Date Created : 20-05-2010 Modifications : *******************************************************************************/ BOOL CRxMsgList::OnHeaderEndDrag(UINT, NMHDR* pNMHDR, LRESULT* /*pResult*/) { NMHEADER* pNMH = (NMHEADER*)pNMHDR; if (pNMH->pitem->mask & HDI_ORDER) { // Correct iOrder so it is just after the last hidden column int nColCount = GetHeaderCtrl()->GetItemCount(); int* pOrderArray = new int[nColCount]; VERIFY( GetColumnOrderArray(pOrderArray, nColCount) ); if(pNMH->iItem == 0 ) { pNMH->pitem->iOrder = 0; return FALSE; } for(int i = 0; i < nColCount ; ++i) { if (IsColumnVisible(pOrderArray[i])) { pNMH->pitem->iOrder = max(pNMH->pitem->iOrder,i); if(pNMH->pitem->iOrder == 0) pNMH->pitem->iOrder++; break; } } delete [] pOrderArray; } return FALSE; }
void CListCtrlEx::InsertProgresCtrl(int iIndex, int iStatus) { CHeaderCtrl* pHeader = GetHeaderCtrl(); CRect ColRt; pHeader->GetItemRect(m_iProgressColumn, &ColRt); //get the rect CRect rt; GetItemRect(iIndex, &rt, LVIR_LABEL); rt.top += 1; rt.bottom -= 1; rt.left += ColRt.left; int Width = ColRt.Width(); rt.right = rt.left + Width - 4; rt.left = ColRt.left+1; rt.right = ColRt.right-1; CProgressCtrl *pControl = new CProgressCtrl; pControl->Create(WS_CHILD|WS_VISIBLE, rt, this, IDC_PROGRESS_LIST + iIndex); pControl->SetRange(0, 100); pControl->SetPos(iStatus); pControl->ShowWindow(SW_SHOWNOACTIVATE); //add them to the list m_ProgressList.push_back(pControl); }
DWORD CReportCtrl::_GetHeaderTextFormat(int nColumn) const { if(!HasColumnHeader()) { return(ES_LEFT); } HDITEM hd; hd.mask = HDI_FORMAT; if(!GetHeaderCtrl()->GetItem(nColumn, &hd)) { return(ES_LEFT); } if(hd.fmt & HDF_CENTER) { return(ES_CENTER); } else if(hd.fmt & HDF_RIGHT) { return(ES_RIGHT); } else { return(ES_LEFT); } }
BOOL CVarListCtrl::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult) { HD_NOTIFY *pHDN = (HD_NOTIFY*)lParam; if((pHDN->hdr.code == HDN_BEGINTRACKW || pHDN->hdr.code == HDN_BEGINTRACKA) && pHDN->iItem == 1) // Prevent only first (col# 0) from resizing { *pResult = TRUE; // disable tracking return TRUE; // Processed message } else if ((pHDN->hdr.code == HDN_ENDTRACKA) || (pHDN->hdr.code == HDN_ENDTRACKW)) { CHeaderCtrl* pHeader = GetHeaderCtrl(); if (pHeader) { int nColumnCount = pHeader->GetItemCount(); if (nColumnCount > 0) SetColumnWidth(nColumnCount-1, LVSCW_AUTOSIZE_USEHEADER); } } return CListCtrl::OnNotify(wParam, lParam, pResult); }
// // [virtual] ODBCGridCtrl::OnSetups // void ODBCGridCtrl::OnSetup() { /* SELECT INC.UID, INC.ORDER_N, INC.CLIENT_UID, (SELECT NAME FROM AXSYS_CONTACT WHERE UID = INC.CLIENT_UID ) AS CLIENT_NAME, INC.OUTPUT_DATE, INC.PAYMENT, INC.REAL_PAYMENT, INC.NATIVE_PAYMENT, INC.CLOSED FROM AXSYS_OUTPUT INC ORDER BY INC.UID; */ NONCLIENTMETRICS ncm; ncm.cbSize = sizeof(NONCLIENTMETRICS); SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &ncm, NULL); m_pFont = new CFont(); m_pFont->CreateFontIndirect(&ncm.lfCaptionFont); SetFont(m_pFont); // SubclassHeader(); // GetFlatHeaderCtrl()->ShowSortArrow(FALSE); CHeaderCtrl* pHdr = GetHeaderCtrl(); if( pHdr ) pHdr->SetFont(m_pFont); SetCellSelectionMode(FALSE); }
void CKadSearchListCtrl::Localize() { CHeaderCtrl* pHeaderCtrl = GetHeaderCtrl(); HDITEM hdi; hdi.mask = HDI_TEXT; CString strRes; for (int icol = 0; icol < pHeaderCtrl->GetItemCount(); icol++) { switch (icol) { case colNum: strRes = GetResString(IDS_NUMBER); break; case colKey: strRes = GetResString(IDS_KEY); break; case colType: strRes = GetResString(IDS_TYPE); break; case colName: strRes = GetResString(IDS_SW_NAME); break; case colStop: strRes = GetResString(IDS_STATUS); break; case colResponses: strRes = GetResString(IDS_RESPONSES); break; case colLoad: strRes = GetResString(IDS_THELOAD); break; case colPacketsSent: strRes = GetResString(IDS_PACKSENT); break; default: strRes.Empty(); break; } hdi.pszText = const_cast<LPTSTR>((LPCTSTR)strRes); pHeaderCtrl->SetItem(icol, &hdi); } int iItems = GetItemCount(); for (int i = 0; i < iItems; i++) SearchRef((Kademlia::CSearch *)GetItemData(i)); UpdateKadSearchCount(); }
void CKadContactListCtrl::Localize() { CHeaderCtrl* pHeaderCtrl = GetHeaderCtrl(); HDITEM hdi; hdi.mask = HDI_TEXT; CString strRes; for (int icol=0;icol< pHeaderCtrl->GetItemCount() ;icol++) { switch (icol) { case colID: strRes = GetResString(IDS_ID); break; case colType: strRes = GetResString(IDS_TYPE); break; case colDistance: strRes = GetResString(IDS_KADDISTANCE); break; } hdi.pszText = strRes.GetBuffer(); pHeaderCtrl->SetItem(icol, &hdi); strRes.ReleaseBuffer(); } int iItems = GetItemCount(); for (int i = 0; i < iItems; i++) UpdateContact(i, (Kademlia::CContact*)GetItemData(i), true); }
/******************************************************************************* Function Name : vSetSortableMsgColumns Input(s) : sHdrColStruct, eBusType Output : - Functionality : Sets the Sortable message window columns for current bus eBusType. Member of : CRxMsgList Author(s) : Arunkumar K Date Created : 20-05-2010 Modifications : *******************************************************************************/ void CRxMsgList::vSetSortableMsgColumns(SMSGWNDHDRCOL& sHdrColStruct, ETYPE_BUS eBusType) { int nColCount = GetHeaderCtrl()->GetItemCount(); nColCount--; //Reduce the size by 1 for the Blank column. m_pbSortableColumn = (bool*)malloc(sizeof(bool) * nColCount); m_pbAscendingOrder = (bool*)malloc(sizeof(bool) * nColCount); if( m_pbSortableColumn == NULL || m_pbAscendingOrder == NULL) { AfxMessageBox(_T("Failed to create Memory for Sortable Column.")); return; } for(int i=0;i < nColCount; i++) { m_pbSortableColumn[i] = false; m_pbAscendingOrder[i] = true; } //Set the Sortable Columns as true. if(eBusType == CAN) //If the BUS is CAN ,Set the Time field, Channel and ID fields as Sortable { m_pbSortableColumn[sHdrColStruct.m_byTimePos] = true; m_pbSortableColumn[sHdrColStruct.m_byChannel] = true; m_pbSortableColumn[sHdrColStruct.m_byIDPos] = true; } }
int CReportCtrl::GetHeaderImage(int nColumn) const { HDITEM hi; ::memset(&hi, 0, sizeof(HDITEM)); hi.mask = HDI_IMAGE; return !GetHeaderCtrl()->GetItem(nColumn, &hi) ? hi.iImage : -1; }
void CSortingListControl::LoadPersistentAttributes() { CArray<int, int> arr; arr.SetSize(GetHeaderCtrl()->GetItemCount()); GetColumnOrderArray(arr.GetData(), arr.GetSize()); CPersistence::GetColumnOrder(m_name, arr); SetColumnOrderArray(arr.GetSize(), arr.GetData()); for (int i=0; i < arr.GetSize(); i++) arr[i]= GetColumnWidth(i); CPersistence::GetColumnWidths(m_name, arr); for (i=0; i < arr.GetSize(); i++) { // To avoid "insane" settings we set the column width to // maximal twice the default width. int maxWidth= GetColumnWidth(i) * 2; int w= min(arr[i], maxWidth); SetColumnWidth(i, w); } // Not so good: CPersistence::GetSorting(m_name, GetHeaderCtrl()->GetItemCount(), m_sorting.column1, m_sorting.ascending1, m_sorting.column2, m_sorting.ascending2); // We refrain from saving the sorting because it is too likely, that // users start up with insane settings and don't get it. }
void CQueueListCtrl::Localize() { CHeaderCtrl* pHeaderCtrl = GetHeaderCtrl(); HDITEM hdi; hdi.mask = HDI_TEXT; if(pHeaderCtrl->GetItemCount() != 0) { CString strRes; strRes = GetResString(IDS_QL_USERNAME); hdi.pszText = strRes.GetBuffer(); pHeaderCtrl->SetItem(0, &hdi); strRes.ReleaseBuffer(); strRes = GetResString(IDS_FILE); hdi.pszText = strRes.GetBuffer(); pHeaderCtrl->SetItem(1, &hdi); strRes.ReleaseBuffer(); strRes = GetResString(IDS_FILEPRIO); hdi.pszText = strRes.GetBuffer(); pHeaderCtrl->SetItem(2, &hdi); strRes.ReleaseBuffer(); strRes = GetResString(IDS_QL_RATING); hdi.pszText = strRes.GetBuffer(); pHeaderCtrl->SetItem(3, &hdi); strRes.ReleaseBuffer(); strRes = GetResString(IDS_SCORE); hdi.pszText = strRes.GetBuffer(); pHeaderCtrl->SetItem(4, &hdi); strRes.ReleaseBuffer(); strRes = GetResString(IDS_ASKED); hdi.pszText = strRes.GetBuffer(); pHeaderCtrl->SetItem(5, &hdi); strRes.ReleaseBuffer(); strRes = GetResString(IDS_LASTSEEN); hdi.pszText = strRes.GetBuffer(); pHeaderCtrl->SetItem(6, &hdi); strRes.ReleaseBuffer(); strRes = GetResString(IDS_ENTERQUEUE); hdi.pszText = strRes.GetBuffer(); pHeaderCtrl->SetItem(7, &hdi); strRes.ReleaseBuffer(); strRes = GetResString(IDS_BANNED); hdi.pszText = strRes.GetBuffer(); pHeaderCtrl->SetItem(8, &hdi); strRes.ReleaseBuffer(); strRes = GetResString(IDS_UPSTATUS); hdi.pszText = strRes.GetBuffer(); pHeaderCtrl->SetItem(9, &hdi); strRes.ReleaseBuffer(); } }