// Returns -1 if not found (which will happen if the item is new) int CWListRowItem::getRow(CListCtrl &clc) { LV_FINDINFO lvf; lvf.flags=LVFI_PARAM; lvf.lParam = (LPARAM) this; int iRow = clc.FindItem(&lvf); return iRow; }
int CALLBACK CompareFunction( LPARAM lParam1, LPARAM lParam2, LPARAM lParamData ) { CListCtrl *pListCtrl = (CListCtrl *)lParamData; fi.lParam = lParam1; int iItem1 = pListCtrl->FindItem(&fi); fi.lParam = lParam2; int iItem2 = pListCtrl->FindItem(&fi); if ((-1 == iItem1) || (-1 == iItem2)) return 0; CString strItem1 = pListCtrl->GetItemText(iItem1, s_iSortColumn); CString strItem2 = pListCtrl->GetItemText(iItem2, s_iSortColumn); if (_gbColumnNumber[s_iSortColumn]) return s_bSortAscending ? NumberCompare( strItem1, strItem2 ) : NumberCompare( strItem2, strItem1 ); else // text. return s_bSortAscending ? lstrcmp( strItem1, strItem2 ) : lstrcmp( strItem2, strItem1 ); }
int CALLBACK CLiveList::SortCallback(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort) { CListCtrl* pList = (CListCtrl*)lParamSort; ASSERT_VALID( pList ); int nColumn = (int)GetWindowLongPtr( pList->GetSafeHwnd(), GWLP_USERDATA ); LV_FINDINFO pFind; pFind.flags = LVFI_PARAM; pFind.lParam = lParam1; int nA = pList->FindItem( &pFind ); pFind.lParam = lParam2; int nB = pList->FindItem( &pFind ); CString sA( pList->GetItemText( nA, abs( nColumn ) - 1 ) ); CString sB( pList->GetItemText( nB, abs( nColumn ) - 1 ) ); return ( nColumn > 0 ) ? SortProc( sB, sA ) : SortProc( sA, sB ); }
int CALLBACK CompareFunc(LPARAM lParam1,LPARAM lParam2,LPARAM lParamSort) { ListSortData *p = (ListSortData *)lParamSort; CListCtrl* list = p->listctrl; int isub = p->isub; LVFINDINFO findInfo; findInfo.flags = LVFI_PARAM; findInfo.lParam = lParam1; int iItem1 = list->FindItem(&findInfo, -1); findInfo.lParam = lParam2; int iItem2 = list->FindItem(&findInfo, -1); CString strItem1 =list->GetItemText(iItem1,isub); CString strItem2 =list->GetItemText(iItem2,isub); if(p->seq) return _tcscmp(strItem2, strItem1); else return -_tcscmp(strItem2, strItem1); }
void CPropPage_Groups::OnButtonAdd() { CAddGroupDlg dlg; TCHAR szTT[256]; TCHAR szGroupName[128]; LVFINDINFO info; LV_ITEM lvi; int nIndex; if(dlg.DoModal() == IDOK) { dlg.m_GroupName.MakeLower(); strcpy(szGroupName, (LPCTSTR) dlg.m_GroupName); // Filter Newsgroups if(!CM_NewsgroupSelectionAllowed(szGroupName)) return; // See if it's in the list already CListCtrl* pListCtrl = (CListCtrl*) GetDlgItem(IDC_LIST_GROUPS); info.flags = LVFI_STRING; info.psz = szGroupName; nIndex = pListCtrl->FindItem(&info); if(nIndex != -1) { sprintf(szTT, "Newsgroups: %s\r\n\r\nUhh.. Listen..\r\nThat group is already in the list..", szGroupName); AfxMessageBox(szTT, MB_ICONINFORMATION); return; } // Ok, Add it... ::ZeroMemory(&lvi, sizeof(LV_ITEM)); lvi.mask=LVIF_TEXT | LVIF_PARAM | LVIF_IMAGE | LVIF_STATE; lvi.iItem = 0; lvi.pszText = (LPSTR) szGroupName; lvi.iImage=0; lvi.lParam = 0; lvi.stateMask=LVIS_STATEIMAGEMASK; lvi.state=INDEXTOSTATEIMAGEMASK(1); // Unchecked initially pListCtrl->InsertItem(&lvi); SetModified(TRUE); } }
void CNameTimeDisplay::UpdateProfile(PERFORMANCEPROFILERMAP &map, CListCtrl &listCtrl) { IToolBox *toolBox = EngineGetToolBox(); PERFORMANCEPROFILERMAP::iterator mapIter = map.begin(); for (; mapIter != map.end(); mapIter++) { const TCHAR *name = toolBox->GetHashString(mapIter->first); LVFINDINFO lvFindInfo; lvFindInfo.flags = LVFI_STRING; lvFindInfo.psz = name; LVITEM lvItem; lvItem.mask = LVIF_TEXT; int findResult = listCtrl.FindItem(&lvFindInfo); if (findResult == -1) { lvItem.iSubItem = 0; lvItem.iItem = listCtrl.GetItemCount(); lvItem.pszText = (TCHAR*)name; listCtrl.InsertItem(&lvItem); } else { lvItem.iItem = findResult; } // current time TCHAR buf[20]; float timeAdjust = mapIter->second * 1000.0f; _stprintf(buf, _T("%.2fms"), (timeAdjust)); lvItem.iSubItem = 1; lvItem.pszText = buf; listCtrl.SetItem(&lvItem); // avg time float insTime = 0.0f; AVGTIMEMAP::iterator avgIter = m_AvgTimes.find(mapIter->first); if (avgIter == m_AvgTimes.end()) { AVGTIMEVEC avgVec; avgVec.push_back(timeAdjust); insTime = timeAdjust; m_AvgTimes.insert(pair<DWORD, AVGTIMEVEC>(mapIter->first, avgVec)); } else { AVGTIMEVEC *avgVec = &avgIter->second; if (avgVec) { UINT vecSize = avgVec->size(); avgVec->push_back(timeAdjust); if (vecSize > m_iMaxAvgStep) { avgVec->erase(avgVec->begin()); } for (AVGTIMEVEC::iterator vecIter = avgVec->begin(); vecIter != avgVec->end(); vecIter++) { insTime += *vecIter; } if (vecSize > 0) { insTime /= (float)vecSize; } } } _stprintf(buf, _T("%.2fms"), (insTime)); lvItem.iSubItem = 2; lvItem.pszText = buf; listCtrl.SetItem(&lvItem); // peak time insTime = 0.0f; PEAKTIMEMAP::iterator peakIter = m_PeakTimes.find(mapIter->first); if (peakIter == m_PeakTimes.end()) { m_PeakTimes.insert(pair<DWORD, float>(mapIter->first, timeAdjust)); insTime = timeAdjust; } else { if (peakIter->second < timeAdjust) { peakIter->second = timeAdjust; } insTime = peakIter->second; } _stprintf(buf, _T("%.2fms"), (insTime)); lvItem.iSubItem = 3; lvItem.pszText = buf; listCtrl.SetItem(&lvItem); } }
void CLESampleGuiDlg::LeGapScanCallBack( unsigned char* pAddress, const int nSizeAddress, unsigned char* pPkt, const int nSizePkt, void* pUserData) { unsigned char RSSI; PADV_DATA advData = NULL; int advLen = 0; unsigned char nameArr[31] = {0}; CString address; CString nameStr; address.Format(_T("%02x%02x%02x%02x%02x%02x"),pAddress[5], pAddress[4], pAddress[3], pAddress[2], pAddress[1],pAddress[0]); if(nSizePkt > 1) { advLen = nSizePkt - 1; RSSI = *(pPkt + advLen); advData = (PADV_DATA)(pPkt); /** typedef struct _ADV_DATA{ unsigned char Length; unsigned char AdType; unsigned char AdData[0]; }ADV_DATA, *PADV_DATA; */ for(int i=advLen, templen = 0; i>0; ) { templen = advData->Length; switch(advData->AdType) { case AT_FLAGS: { //printf("AT_FLAGS: is 0x%x\n", advData->AdData); } break; case AT_MORE_16UUID: case AT_COMPLETE_16UUID: case AT_MORE_32UUID: case AT_COMPLETE_32UUID: case AT_MORE_128UUID: case AT_COMPLETE_128UUID: break; case AT_SHORTEN_LOCAL_NAME: case AT_COMPLETE_LOCAL_NAME: { memcpy(nameArr, advData->AdData, templen-1); //printf("Remote name: %s\n", nameArr); size_t nu = templen-1; size_t n =(size_t)MultiByteToWideChar(CP_ACP,0,(const char *)nameArr,int(nu),NULL,0); wchar_t* buffer; buffer = new wchar_t[n+1]; ::MultiByteToWideChar(CP_ACP,0,(const char *)nameArr,int(nu),buffer,int(n)); buffer[n] = '\0'; nameStr.Format(_T("%s"), buffer); } break; case AT_TX_POWER_LEVEL: case AT_CLASS_OF_DEVICE: case AT_SIMPLE_PAIR_HASH_C: case AT_SIMPLE_PAIR_RAND_R: case AT_TK_VALUE: case AT_OOB_FLAGS: case AT_SLAVE_CONNECTION_INTERVAL_RANGE: case AT_SERVICE_SOLICATION_UUID16: case AT_SERVICE_SOLICATION_UUID128: case AT_SERVICE_DATA: case AT_SERVICE_DATA_32: case AT_SERVICE_DATA_128: case AT_PUBLIC_TARGET_ADDRESS: case AT_RANDOM_TARGET_ADDRESS: case AT_APPEARANCE: case AT_ADVERTISING_INTERVAL: case AT_LE_BT_ADDRESS: case AT_LE_ROLE: case AT_SIMPLE_PAIR_HASH: case AT_SIMPLE_PAIR_Randomizer: case AT_3D_INROMATION_DATA: case AT_MANUFACTURE_SPEC_DATA: break; // More User defined AT type // default: break; //printf("unknown AT Data Type\n"); } i -= templen + 1; advData = (PADV_DATA)((char *)advData + templen + 1); } //pThis->m_scanList.insert(pair<CString, CString>(address, nameStr)); int Index; LVFINDINFO info; //pThis->m_scanList[address] = nameStr; info.flags = LVFI_PARTIAL|LVFI_STRING; info.psz = address.AllocSysString(); CListCtrl* lst = (CListCtrl*)pThis->GetDlgItem(IDC_DEVICE_LIST); if((Index = lst->FindItem(&info)) != -1) {// change the exist item if(pThis->m_scanList[address].IsEmpty() && !nameStr.IsEmpty()) { lst->SetItemText(Index, 1, nameStr.AllocSysString()); pThis->m_scanList[address] = nameStr; // only when str is empty, change it } } else {// add new item Index = lst->GetItemCount(); LV_ITEM lvItem; lvItem.mask = LVIF_TEXT ; lvItem.iItem = Index; lvItem.iSubItem = 0; lvItem.pszText = address.AllocSysString(); lst->InsertItem(&lvItem); if(!nameStr.IsEmpty() || pThis->m_scanList[address].IsEmpty()) {// cache is empty pThis->m_scanList[address] = nameStr; lst->SetItemText(Index, 1, nameStr.AllocSysString()); } else {// cache is not empty lst->SetItemText(Index, 1, pThis->m_scanList[address].AllocSysString()); } } } else { } }