Rahmen fehlt bei einem Buttongadget wenn es den Focus hat

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Rahmen fehlt bei einem Buttongadget wenn es den Focus hat

Beitrag 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
Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer