Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

  • Autor

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

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.

  • Autor

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 Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.