Seite 1 von 1

Rahmen fehlt bei einem Buttongadget wenn es den Focus hat

Verfasst: 22.02.2011 01:17
von hjbremer
Wer in der "Systemsteuerung/erleichterte Bedienung/Bedienung der Tastatur" bei "Tastenkombinationen und unterstreichen" keinen Haken hat, der hat bei dem Button, der den Focus hat, keinen gestrichelten Rahmen.
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