Guybrush Threepwood Geschrieben 15. Oktober 2014 Geschrieben 15. Oktober 2014 Gibt es eine einfachere Möglichkeit einzelne Einträge in einer ListView Fett darzustellen als LVS_OWNERDRAWFIXED anzugeben und das komplette Item selbst zeichnen zu müssen? LVITEM scheint da ja leider kein Flag für zu haben. Zitieren
Klotzkopp Geschrieben 15. Oktober 2014 Geschrieben 15. Oktober 2014 Du kannst NM_CUSTOMDRAW im Parent-Fenster behandeln. About Custom Draw (Windows) Zitieren
Guybrush Threepwood Geschrieben 15. Oktober 2014 Autor Geschrieben 15. Oktober 2014 Ja das hab ich auch vorhin gefunden und scheint weniger umständlich zu sein. Was ich aber da gerade nicht verstehe ist folgendes: Ich hab im Resourceeditor einen Eventhandler für CustomDraw hinzugefügt. Daraufhin hat mir Visual Studio in der Header Datei NOTIFY_HANDLER(IDC_LIST1, NM_CUSTOMDRAW, OnNMCustomDraw) ... LRESULT OnNMCustomDraw(int /*idCtrl*/, LPNMHDR pNMHDR, BOOL& /*bHandled*/); [/PHP] und in der cpp Datei [PHP] LRESULT CMyClass::OnNMCustomDraw(int /*idCtrl*/, LPNMHDR pNMHDR, BOOL& /*bHandled*/) { LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR); return 0; } hinzugefügt. Laut NM_CUSTOMDRAW (list view) notification code (Windows) müsste ich aber statt einem LPNMHDR einen LPNMLVCUSTOMDRAW Pointer bekommen warum steht da LPNMHDR? Und anscheind ist das ja auch gar kein Pointer auf NMHDR sondern auf eine NMCUSTOMDRAW Struktur, sonst würde der cast ja nicht funktionieren. Ich bin verwirrt... Zitieren
Klotzkopp Geschrieben 16. Oktober 2014 Geschrieben 16. Oktober 2014 warum steht da LPNMHDR?Weil das die Signatur für einen Notify-Handler ist. NMHDR ist sozusagen die Basisklasse für alle WM_NOTIFY-Strukturen. Du könntest theoretisch diesen einen Handler für alle möglichen Arten von WM_NOTIFY-Nachrichten für verschiedenste Steuerelemente benutzen. Dann müsstest du über die Member von pNMHDR prüfen, welche NM_-Nachricht es ist, ggf. über idCtrl prüfen, um was für eine Art Steuerelement es sich handelt, und dann pNMHDR auf den richtigen Typ casten. Und anscheind ist das ja auch gar kein Pointer auf NMHDR sondern auf eine NMCUSTOMDRAW Struktur, sonst würde der cast ja nicht funktionieren.Ein reinterpret_cast "funktioniert" immer, das ist die Holzhammermethode. Wenn der Typ nicht passt, und du auf die Member zugreifst, passieren eben seltsame Dinge. In diesem Fall musst du den Cast auf LPNMLVCUSTOMDRAW ändern. Zitieren
Guybrush Threepwood Geschrieben 16. Oktober 2014 Autor Geschrieben 16. Oktober 2014 Wenn der Typ nicht passt, und du auf die Member zugreifst, passieren eben seltsame Dinge. Das meinte ich doch mit "nicht funktionieren" Ich hab es jetzt nach einigem rumprobieren so LRESULT CDocImport::OnNMCustomDraw(int /*idCtrl*/, LPNMHDR pNMHDR, BOOL& /*bHandled*/) { LPNMLVCUSTOMDRAW pCD = reinterpret_cast<LPNMLVCUSTOMDRAW >(pNMHDR); NMCUSTOMDRAW pNMCD = pCD->nmcd; if (pCD->nmcd.dwDrawStage == CDDS_PREPAINT) { return CDRF_NOTIFYITEMDRAW; } if (pCD->nmcd.dwDrawStage == CDDS_ITEMPREPAINT) { return CDRF_NOTIFYSUBITEMDRAW; } if (pNMCD.dwDrawStage== (CDDS_ITEMPREPAINT|CDDS_SUBITEM)) { HFONT hFont = CreateFont(8, 0,0,0, FW_BOLD, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, FF_DONTCARE, "MS Sans Serif"); HFONT hFontOld = (HFONT)SelectObject( pCD->nmcd.hdc, hFont ); return CDRF_NEWFONT; } return CDRF_DODEFAULT; } [/PHP] Und die Einträge werden alle fett geschrieben. Sobald man sie jedoch anklickt werden sie wieder normal geschrieben. Ich vermute mal das es daran liegt das sie beim bloßen anklicken nicht neu gezeichnet werden ob wohl ja dann der blaue Hintergrund dazukommt und er deshalb nicht oben durch den Code läuft. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.