Dies ist bei Vista so, bei XP bzw. Windows 7 wird es wohl ähnlich sein.
Für alle die den Rahmen nicht wollen, aber dennoch optisch sehen wollen, welcher Button den Focus hat, einfach alle Buttongadgets als Toggleschalter definieren und via Callback umschalten.
Code: Alles auswählen
Procedure.i ButtonGadgetCB(hWnd, Msg, wParam, lParam)
;hwnd ist hier gleich der ID vom Gadget
Protected nr = GetDlgCtrlID_(hwnd)
Protected lp = GetWindowLongPtr_(hWnd, #GWL_USERDATA)
Select msg
Case #WM_LBUTTONUP: SetGadgetState(nr, 0)
Case #WM_SETFOCUS: SetGadgetState(nr, 1)
Case #WM_KILLFOCUS: SetGadgetState(nr, 0)
EndSelect
ProcedureReturn CallWindowProc_(lp, hWnd, msg, wParam, lParam)
EndProcedure
; Zeigt mögliche Flags des ButtonGadget in Aktion...
If OpenWindow(0, 0, 0, 222, 200, "ButtonGadgets", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ButtonGadget(0, 10, 10, 200, 20, "&Standard", #PB_Button_Toggle)
ButtonGadget(1, 10, 40, 200, 20, "Left Button", #PB_Button_Left|#PB_Button_Toggle)
ButtonGadget(2, 10, 70, 200, 20, "Right Button", #PB_Button_Right|#PB_Button_Toggle)
ButtonGadget(3, 10,100, 200, 60, "Multiline Button (längerer Text wird automatisch umgebrochen)", #PB_Button_MultiLine|#PB_Button_Toggle)
ButtonGadget(4, 10,170, 200, 20, "Toggle Button", #PB_Button_Toggle)
For j = 0 To 4
lp = SetWindowLongPtr_(GadgetID(j), #GWL_WNDPROC, @ButtonGadgetCB())
SetWindowLongPtr_(GadgetID(j), #GWL_USERDATA, lp)
Next
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf