Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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...

Geschrieben
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.

Geschrieben

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.

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...