Win32 Ownerdraw Subclassed Button kein Tooltip?
-
Vielen Dank für die Antwort,
wie würdest du den das mit den Fonts machen wenn nicht Herstellen und dann wieder löschen?Vielen Dank für deine Hilfe!
Johannes
-
Recycling.
-
Wie soll ich das jetzt bitte interpretieren??? Soll ich globale Variablen erstellen?
-
Und noch eine kurze Frage, weiss den jetzt irgendjemand warum das mit dem Tooltip nicht fuktioniert?
Nochmals Danke
Johannes
-
Evtl. durch Deine falsche Behandlung von WM_MOUSELEAVE!
-
Hallo Johannes,
in der WinMsgHandler-Prozedur gibst Du nur in den wenigsten Fällen einen Wert zurück.
Somit verbleibt in R/EAX dann meist der Rückgabewert des letzten Funktionsaufrufs, wenn direkt danach ein break kommt.Ich würde tippen, dass dort der Hund begraben ist.
Sieh in der Doku nach, welchen Rückgabewert die jeweiligen Nachrichten verlangen.Grüße
Greenhornp.s. warum ist dieser Thread so bescheiden formatiert ?
p.p.s. Deinen Geburtstag haben Deine Eltern geschickt geplant, gell
-
Hallo,
Vielen Dank für eure Hilfe! Leider funktioniert es noch immer nicht... Jetzt geben alle Messages einen Wert zurück, habe in der MSDN nachgeschaut. Und das WM_MOUSELEAVE habe ich jetzt durch WM_USER ausgetauscht.Also jetzt sied das ganze so aus:
CHyperlink::WndProcLinkButton
case WM_MOUSELEAVE: { PostMessage(GetParent(hWndLinkButton),WM_USER,0,0); DefWindowProc( GetParent(GetParent(hWndLinkButton)), WM_SETCURSOR, 0, 0 ); return 0; break; }
CHyperlink::WinMsgHandler
case WM_USER: { HFONT CurFont = (HFONT)SendMessage(GetDlgItem(hwnd,1), WM_GETFONT, 0, 0); LOGFONT lf = {0}; GetObject(CurFont, sizeof(lf), &lf); lf.lfUnderline = (BYTE) FALSE; HFONT NewFont = CreateFontIndirect(&lf); SendMessage(GetDlgItem(hwnd,1),WM_SETFONT, (WPARAM) NewFont, TRUE); if(bMouseOverLinkButton) { bMouseOverLinkButton = FALSE; if(bVisited)cActual = cVisited; else cActual = cNormal; InvalidateRect(GetDlgItem(hwnd,1), 0, FALSE); } return 0; break; }
Und wenn ich die Fonts immer mit DeleteObject lösche, dan ändert er mir die Font(Ich glaube auf die WIndows-DefaultFont), und tut sie nicht nur einfach "Underlinen", habe ich da dann ewentuell auch irgendwo noch einen Fehler?
Und mir ist gerade aufgefallen das unter Windows XP meine Icons einfach verschwunden sind, und da jetzt der default AppIcon überall ist, unter Windows 7 zeigt er sie ohne Probleme an...
Vielen Dank
Johannes
-
Hallo,
das mit den Icons auf XP habe ich jezt gelöhst, hatte versehendlich ein 256x256 icon benutzt.
Aber für die anderen beiden Probleme habe ich noch keine Lösung...
-
Diu kannst Fonts nicht löschen, wenn Du sie noch irgendwo benutzt. Genaugenommen muss das Parent den Font erzeugen. Für seine Child sezen und das Handler erst entsorgen wenn alle Kinder gestorben sind.
Also brauchst Du den Font als Variable in dem Fenster zu seiner Lebenszeit.
-
Hallo,
danke für die Antwort, wenn ich das richtig verstanden habe dan soll ich einfach in meiner Klasse eine Variable definieren mit dem Font, richtig? Und die dan immer benutzen? Wenn ja, das hatte ich schon mal ausprobiert habe es aber danach wieder rückgängig gemacht weil da hatte ich auch Probleme mit den Fonts: er hat mir auch die Font einfach geändert, ich glaube zwar nicht in die Default, aber einfach eine andere!Um genauer zu beschreiben was ich gemacht habe:
- Ich habe eine Variable mit der Font die ich am Anfang initialisiere mit so zu sagen "meiner Default Font".
- Dan in WM_CREATE weise ich diesen Font meinem Button zu(Bis hier klappts).
- Aber danach sobald ich auf den Button komme mit der Maus, also beim Underlinen, ändert er mir die Font! Und ab dem Zeitpunkt bleibt es die Andere (Underlined oder nicht).Vielen Dank
Johannes