Buttons in calc.exe - Wie kann das sein???
-
Hi,
startet mal calc.exe und schaltet (wenn ihr WinXP habt) in den klassischen Windows-Modus. Ihr werdet sehen: die Buttons auf dem Rechner bekommen beim Focus kein FocusRect verpasst, und die Aufschrift des Buttons wird bei einem Klick drauf auch nicht verschoben. Ich dachte mir, dass sowas wohl nur mit Ownerdraw geht. Pustekuchen! Spy sagt mir, dass die Stile genau denen eines stinknormalen Buttons entsprechen. Wie kann das sein???
-
Subclassing
-
Und dann auf WM_PAINT reagieren, oder wie? Dann kann man's auch gleich OwnerDrawn machen.
-
vielleicht wußten die nicht wie das geht

-
Hab kein XP, aber hast du dieses Verhalten nur bei dieser einen Anwendung festgestellt?
-
Ja, aber dazu brauchst du kein XP. Schau doch selber mal nach.
-
calc (Rechner) gibts auf jedem Windows.
-
Hab ich aber nicht mitinstalliert
- und werde das auch nicht nur deswegen tun 
-
also bei sind es owner draw buttons (w2k)
-
uiiii. Sowas! Komisch.

-
Hier die Daten der Taste "7" meines XP Prof. "Taschenrechners":
(Quelle: Winspector Spy)Class Name:
ButtonText:
7Styles:
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | BS_TEXTStylesEx:
WS_EX_NOPARENTNOTIFY | WS_EX_LEFT | WS_EX_LTRREADING | WS_EX_RIGHTSCROLLBARRectangle:
844, 464, 880, 493Size:
36, 29Client Rectangle:
0, 0, 36, 29Client Size:
36, 29ID:
131Properties Atom:
#43288 0xFFFFFFFF (-1)Atom:
#43282 0x00010003 (65539)Class specific:
uncheckedOwner EXE:
C:\WINDOWS\system32\calc.exe
-
Ihr habt Probleme...


-
ja
-
Wie kann man denn herausfinden, ob da tatsächlich SubClassing betrieben wurde?
-
Mit Spy++ kann man die Adresse der Fensterprozedur sehen.
Allerdings ist die bei den Buttons in Calc genauso wie bei anderen Programmen.

-
Hööö? Billie verschweigt uns was! Meine Frage bleibt: Wie kann das sein???
-
Ich hab's nochmal mit dem Abbrechen-Button vom "Eigenschaften von Anzeige"-Dialog verglichen. Die WindowProc ist tatsächlich die gleiche. Aber es gibt da 2 Unterschiede, von denen ich nicht weiß, was sie bedeuten. Der erste ist der Wert der Fenster-Bytes und der zweite (und vielleicht wichtigere) ist in den Klassenstilen zu bemerken. Beim calc-Button ist CS_GLOBALCLASS dabei - beim Abbrechen-Button nicht...
-
-> RegisterClass
-
RegisterClass - Aha. Werd ich gleich mal versuchen...
-
Nach einigem Rumprobieren merke ich, dass ich beim besten Willen nicht verstehe, wie du das meinst.
-
Ich denke das die einfach die Klasse button registriert haben und in der WndProc dann das Nötige änderten.