WinAPI

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
lite
Beiträge: 122
Registriert: 27.08.2012 21:08

WinAPI

Beitrag 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

Benutzeravatar
_JON_
Beiträge: 389
Registriert: 30.03.2010 15:24

Re: WinAPI

Beitrag 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

PureBasic 5.46 LTS (Windows x86/x64) | windows 10 x64 Oktober failure
lite
Beiträge: 122
Registriert: 27.08.2012 21:08

Re: WinAPI

Beitrag von lite »

Danke _Jon_, es funktioniert. :allright:
Antworten