Seite 1 von 1

WinAPI

Verfasst: 16.05.2018 18:40
von lite
Hallo

Suche eine Möglichkeit wie man bei Labels die Hintergrundfarbe ändert und Icons transparent dargestellt.
Es sollen keine Purebasic Befehle wie SetGadgetColor verwendet werden, sondern nur reines Winapi.

Code: Alles auswählen


Procedure WindowCallback(hWnd, Msg, wParam, lParam)
  Shared hButton
  
  Select Msg
    Case #WM_COMMAND

    Case #WM_CLOSE 
      DestroyWindow_(hWnd) 
    Case #WM_DESTROY 
      PostQuitMessage_(0) : Result  = 0 
    Default 
      Result  = DefWindowProc_(hWnd, Msg, wParam, lParam) 
  EndSelect 
  
  ProcedureReturn Result 
EndProcedure  
 
        InitCommonControls_()
        
        #Style  = #WS_VISIBLE | #WS_CAPTION | #WS_SYSMENU
        DefaultFont = GetStockObject_(#DEFAULT_GUI_FONT)
 
        WindowClass.s    = "My_Win" 
        wc.WNDCLASSEX 
        wc\cbsize        = SizeOf(WNDCLASSEX) 
        wc\lpfnWndProc   = @WindowCallback() 
        wc\hCursor       = LoadCursor_(0, #IDC_ARROW) 
        wc\hbrBackground = #COLOR_WINDOW
        wc\lpszClassName = @WindowClass 
        RegisterClassEx_(@wc) 
 
        Win_x=GetSystemMetrics_(#SM_CXSCREEN)/2-100
        Win_y=GetSystemMetrics_(#SM_CYSCREEN)/2-50
 
        hWndMain  = CreateWindowEx_(0, WindowClass, "WinAPI", #Style, Win_x, Win_y, 300, 200, 0, 0, 0, 0)
 
        Text.s="Label"
        hText=CreateWindowEx_(0,"Static", Text, #WS_CHILD | #WS_VISIBLE, 10,10,180,54, hWndMain, 0, 0, 0)
        SendMessage_(hText, #WM_SETFONT, DefaultFont, 1)
 
  
     
         Text.s=""
         hText1=CreateWindowEx_(#WS_EX_TRANSPARENT,"Static", "", #WS_CHILD | #WS_VISIBLE|#SS_ICON|#WS_DISABLED|#SS_CENTERIMAGE, 10,80,104,60, hWndMain, 0, 0, 0)
      ; : SendMessage_(hText, #WM_SETFONT, DefaultFont, 1)
 
      ;   hBrush2 = CreateSolidBrush_(RGB(255, 255, 255)) 
      ;  SetClassLong_(hText1, #GCL_HBRBACKGROUND, hBrush2) 


      ;SetWinColor(hText,RGB(233,95,85))
      ; InvalidateRect_(hText1,#False,#True)
      ; UpdateWindow_(hText1)
  
       num_icons = ExtractIconEx_("shell32.dll", 3, @ico, #Null, 1)
      ; Debug num_icons
    ;   SendMessage_( hText1, #STM_SETIMAGE, #IMAGE_BITMAP, Ergebnis)
       SendMessage_( hText1, #STM_SETIMAGE, #IMAGE_ICON, ico)
       ; SendMessage_(hText1, #WM_SETICON, 1, ico)
       ;#ima
        
        ShowWindow_(hWndMain,  #SW_SHOWDEFAULT) 
        UpdateWindow_(hWndMain); 
 
        While GetMessage_(msg.MSG, #Null, 0, 0 ) 
          TranslateMessage_(msg) 
          DispatchMessage_(msg) 
        Wend 
End


Re: WinAPI

Verfasst: 16.05.2018 19:20
von _JON_
Also hier auf meinem Win10 ist das Symbol transparent.
Die Hintergrundfarbe des Lables kann man mit WM_CTLCOLORSTATIC ändern.

Code: Alles auswählen

Global hText

Procedure WindowCallback(hWnd, Msg, wParam, lParam)
  Shared hButton
  
  Select Msg
    Case #WM_COMMAND
      
    Case #WM_CTLCOLORSTATIC
      If lParam = hText
        ;SetTextColor_(wParam, $FF00FF)
        SetBkColor_(wparam, $00FF00)
        ProcedureReturn CreateSolidBrush_($00FF00)
      Else
        ProcedureReturn DefWindowProc_(hWnd, Msg, wParam, lParam)
      EndIf      
      
      
    Case #WM_CLOSE 
      DestroyWindow_(hWnd) 
    Case #WM_DESTROY 
      PostQuitMessage_(0) : Result  = 0 
    Default 
      Result  = DefWindowProc_(hWnd, Msg, wParam, lParam) 
  EndSelect 
  
  ProcedureReturn Result 
EndProcedure  
 
        InitCommonControls_()
        
        #Style  = #WS_VISIBLE | #WS_CAPTION | #WS_SYSMENU
        DefaultFont = GetStockObject_(#DEFAULT_GUI_FONT)
 
        WindowClass.s    = "My_Win" 
        wc.WNDCLASSEX 
        wc\cbsize        = SizeOf(WNDCLASSEX) 
        wc\lpfnWndProc   = @WindowCallback() 
        wc\hCursor       = LoadCursor_(0, #IDC_ARROW) 
        wc\hbrBackground = #COLOR_WINDOW
        wc\lpszClassName = @WindowClass 
        
        RegisterClassEx_(@wc) 

        
        Win_x=GetSystemMetrics_(#SM_CXSCREEN)/2-100
        Win_y=GetSystemMetrics_(#SM_CYSCREEN)/2-50
 
        hWndMain  = CreateWindowEx_(0, WindowClass, "WinAPI", #Style, Win_x, Win_y, 300, 200, 0, 0, 0, 0)
 
        Text.s="Label"
        hText=CreateWindowEx_(0,"Static", Text, #WS_CHILD | #WS_VISIBLE, 10,10,180,54, hWndMain, 0, 0, 0)
        SendMessage_(hText, #WM_SETFONT, DefaultFont, 1)
 
  
     
         Text.s=""
         hText1=CreateWindowEx_(#WS_EX_TRANSPARENT,"Static", "", #WS_CHILD | #WS_VISIBLE|#SS_ICON|#WS_DISABLED|#SS_CENTERIMAGE, 10,80,104,60, hWndMain, 0, 0, 0)
      ; : SendMessage_(hText, #WM_SETFONT, DefaultFont, 1)
 
      ;   hBrush2 = CreateSolidBrush_(RGB(255, 255, 255)) 
      ;  SetClassLong_(hText1, #GCL_HBRBACKGROUND, hBrush2) 


      ;SetWinColor(hText,RGB(233,95,85))
      ; InvalidateRect_(hText1,#False,#True)
      ; UpdateWindow_(hText1)
  
       num_icons = ExtractIconEx_("shell32.dll", 3, @ico, #Null, 1)
      ; Debug num_icons
    ;   SendMessage_( hText1, #STM_SETIMAGE, #IMAGE_BITMAP, Ergebnis)
       SendMessage_( hText1, #STM_SETIMAGE, #IMAGE_ICON, ico)
       ; SendMessage_(hText1, #WM_SETICON, 1, ico)
       ;#ima
        
        ShowWindow_(hWndMain,  #SW_SHOWDEFAULT) 
        UpdateWindow_(hWndMain); 
 
        While GetMessage_(msg.MSG, #Null, 0, 0 ) 
          TranslateMessage_(msg) 
          DispatchMessage_(msg) 
        Wend 
End


Re: WinAPI

Verfasst: 17.05.2018 06:26
von lite
Danke _Jon_, es funktioniert. :allright: