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.

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

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