Ich möchte in einem ListboxCtl ein ausgewähltes Element löschen und immer wenn eines gelöscht wurde soll das daruberliegende makiert werden. (In Listbox kein problem: SetCurSel())
Die einzige Möglichkeit ein (CListBoxCtl)Element farbig zu makieren die ich gefunden habe ist SetTextBkColor(), was aber für diesen Zweck nicht geeignet ist.
aber ich. Du musst die Liste von Hand zeichnen. Die methode OnCustomDraw ist da recht hilfreich. Hier mal mein Code incl. msdn-quellangabe. ich färbe die einträge in der liste je nach herkunft des Eintrages.
Wenn du fragen hast, meld dich ruhig.
C++:
/* this function is for drawing the listitems for details: http://msdn.microsoft.com/library/default.asp? url=/library/en-us/shellcc/platform/commctls/custdraw/custdraw.asp */ void testview::OnCustomdrawList1 ( NMHDR* pNMHDR, LRESULT* pResult ) { NMLVCUSTOMDRAW* pLVCD = reinterpret_cast < NMLVCUSTOMDRAW*>( pNMHDR ); *pResult = CDRF_DODEFAULT;
if ( CDDS_PREPAINT == pLVCD->nmcd.dwDrawStage ) { // call *pResult = CDRF_NOTIFYITEMDRAW; } else { if ( CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage ) { COLORREF crText; // gets the Number of the current item in list int iNrInListCtrl = pLVCD->nmcd.dwItemSpec;
// look up in Array 'm_oaAllLogEntries' (class testview) // to get the OriginFileNumber of this Entry LogEntry* leEntry; leEntry = (LogEntry*)m_oaAllLogEntries[iNrInListCtrl]; int iOriginFile = leEntry->GetOriginFile();
// get the color which is associated with the file CCompDoc* pDoc; pDoc = (CCompDoc*)GetDocument(); crText = pDoc->GetLogFile(iOriginFile)->GetFontColor();