My Special Window (Windows)

Share your advanced PureBasic knowledge/code with the community.
RASHAD
PureBasic Expert
PureBasic Expert
Posts: 4664
Joined: Sun Apr 12, 2009 6:27 am

My Special Window (Windows)

Post by RASHAD »

Simple code full of tips and tricks
- Your own caption height
- Your own windows border width (even no border)
- Invisible Size Box
- Windows menu at your position(DWM menu at the same position and the caption area at the same height as normal window)
- Compatible with XP ,Windows 7 & Window 8 (Tested)
- Ascii ,Unicode, x86 and x64

Have fun

Code: Select all

UsePNGImageDecoder()

Global Maxx,Scale.f,wr.RECT,CH,BW,SB

#ERROR_NONE = 0
#KEY_WOW64_64KEY=$100
#KEY_WOW64_32KEY=$200

Procedure BrightnessRGB(RGB_Color.l, Delta.w)
  !XOR Edx, Edx 
  !XOR Ebx, Ebx
  !XOR Ecx, Ecx
  !MOV BX, Word [p.v_Delta]
  !MOV Eax, dWord [p.v_RGB_Color]
  !MOV DL, AL
  !CALL .adddelta
  !MOV CL, DL
  !MOV DL, AH 
  !CALL .adddelta
  !MOV CH, DL
  !BSWAP Eax 
  !MOV DL, AH
  !CALL .adddelta
  !MOV AH, DL
  !BSWAP Eax 
  !MOV AX, CX 
  !JMP .ready
  !.adddelta:
  !ADD DX, BX
  !BT DX, 15 
  !JC .negativ 
  !CMP DX, $FF
  !JBE .inrange
  !.bigger:
  !MOV DX, $00FF
  !JMP .inrange 
  !.negativ:
  !XOR Edx, Edx
  !.inrange:
  !RET
  !.ready:
  ProcedureReturn 
EndProcedure

Procedure.l QueryValueEx(lhkey.l, szValueName$)
      Shared vValue$
      cch    = 255
      sValue$ = Space(255)
      lrc    = RegQueryValueEx_(lhkey, szValueName$, 0, @lType, @sValue$, @cch)
      If lrc = #ERROR_NONE
        vValue$ = Left(sValue$, cch - 1)
      Else
        vValue$ = "Empty"
      EndIf
      ProcedureReturn lrc
EndProcedure

Procedure IsMouseOver(hWnd) 
    GetWindowRect_(hWnd,r.RECT) 
    GetCursorPos_(p.POINT) 
    Result = PtInRect_(r,p\y << 32 + p\x) 
    ProcedureReturn Result 
EndProcedure

Procedure WndProc(hwnd, uMsg, wParam, lParam)
 result = #PB_ProcessPureBasicEvents 
 Select uMsg
    Case #WM_NCACTIVATE
              Result = 1              
           
    Case #WM_MOVE,#WM_SIZE ,#WM_PAINT
            GetWindowRect_(WindowID(0),r.RECT)
            MoveWindow_(WindowID(1),r\left+SB ,r\top+SB,r\right-r\left-2*SB,r\bottom-r\top-2*SB,1)
            MoveWindow_(WindowID(2),r\left+BW+SB ,r\top+CH+SB,r\right-r\left-BW*2-2*SB,r\bottom-r\top-CH-BW-2*SB,1)
            MoveWindow_(GadgetID(0),(r\right-r\left)/2-80,2,140,24,1)
            If OSVersion() >= #PB_OS_Windows_8
                 ResizeGadget(2,r\right-r\left-105,2,90,24)
            Else
                 ResizeGadget(2,r\right-r\left-90,10,90,24) 
            EndIf
            SetForegroundWindow_(WindowID(2))            
            
    Case #WM_SETTINGCHANGE;,#WM_PAINT
            If Maxx = 1
                SystemParametersInfo_(#SPI_GETWORKAREA, 0, r.RECT, 0)
                MoveWindow_(WindowID(0),r\left-SB,r\top-SB,r\right-r\left+2*SB,r\bottom-r\top+2*SB,1)
                If OSVersion() >= #PB_OS_Windows_8
                     MoveWindow_(GadgetID(2),r\right-r\left-105,2,90,24,1)
                Else
                     MoveWindow_(GadgetID(2),r\right-r\left-105,10,90,24,1) 
                EndIf
                SetForegroundWindow_(WindowID(2))
            EndIf

    Case #WM_LBUTTONDOWN
            If IsMouseOver(WindowID(0)) = 1 And Maxx = 0
                 SendMessage_(WindowID(0), #WM_NCLBUTTONDOWN, #HTCAPTION, 0)
            EndIf
            
  EndSelect
   
 ProcedureReturn result 
EndProcedure

If OSVersion() >= #PB_OS_Windows_Vista
        dll=OpenLibrary(#PB_Any,"user32.dll")
        If dll
           *IsProcessDPIAware=GetFunction(dll,"IsProcessDPIAware")
         If *IsProcessDPIAware
          dpiaware=CallFunctionFast(*IsProcessDPIAware)
         EndIf
         If Not dpiaware
            *SetProcessDPIAware=GetFunction(dll,"SetProcessDPIAware")
            If *SetProcessDPIAware
             CallFunctionFast(*SetProcessDPIAware)
                 dpiaware=CallFunctionFast(*IsProcessDPIAware)
            EndIf
         EndIf
        EndIf
 EndIf

Scale = 1

If OSVersion() >= #PB_OS_Windows_XP  And OSVersion() < #PB_OS_Windows_Vista
    dc=GetDC_(0)
    Scale = GetDeviceCaps_(dc,#LOGPIXELSX)/96
    ReleaseDC_(0,dc)
ElseIf OSVersion() >= #PB_OS_Windows_Vista And OSVersion() < #PB_OS_Windows_8
      sValueName$ = "LogPixels"
      lRetVal = RegConnectRegistry_("", #HKEY_CURRENT_USER, @lHKeyhandle)
      lRetVal = RegOpenKeyEx_(lHKeyhandle, "Control Panel\DeskTop", 0,#KEY_READ|#KEY_WOW64_64KEY, @lhkey)
      lRetVal = QueryValueEx(lhkey, sValueName$)
      RegCloseKey_(lhkey)
      If vValue$ = Chr(120)
          Scale = 1.25
      ElseIf vValue$ = Chr(144)
          Scale = 1.50
      EndIf   
ElseIf OSVersion() >=#PB_OS_Windows_8
      sValueName$ = "DesktopDPIOverride"
      lRetVal = RegConnectRegistry_("", #HKEY_CURRENT_USER, @lHKeyhandle)
      lRetVal = RegOpenKeyEx_(lHKeyhandle, "Control Panel\DeskTop", 0,#KEY_READ|#KEY_WOW64_64KEY, @lhkey)
      lRetVal = QueryValueEx(lhkey, sValueName$)
      RegCloseKey_(lhkey)
      If vValue$ = "1"
          Scale = 1.25
      ElseIf vValue$ = "2"
          Scale = 1.50
      EndIf
EndIf

LoadFont(0,"Georgia",14)

CatchImage(0,?Balls)
 
WW = 800          ;Default Window Width
WH  = 420          ;Default Window Height
CH   = 70            ;Caption Height

If CH < 35
    CH = 35
EndIf

BW  = 20            ;Border Width
SB   = 4              ;SizeBox Border Width
Color = 0            ;Window Color
; If SB >= GetSystemMetrics_(#SM_CXFRAME)
;    SB = GetSystemMetrics_(#SM_CXFRAME) - 4
; EndIf
OpenWindow(0,0,0,2,2,"",#PB_Window_BorderLess| #WS_SIZEBOX)

 If Color = 0
      If OSVersion() >= #PB_OS_Windows_Vista
          hdc = GetWindowDC_(0)
          Color = GetPixel_(hdc,wr\left+2,wr\top+2)
          ReleaseDC_(0,hdc)
      Else
          Color = GetSysColor_(#COLOR_ACTIVECAPTION)
      EndIf
 EndIf
 
;Color = BrightnessRGB(Color,5)
SetWindowColor(0,Color)
WindowBounds(0,300,200, #PB_Default, #PB_Default)
SetWindowLongPtr_(WindowID(0),#GWL_EXSTYLE,#WS_EX_LAYERED)
SetLayeredWindowAttributes_(WindowID(0),0,2,#LWA_ALPHA) 

;If OSVersion() < #PB_OS_Windows_8
    Buff$ = Space(12)
    PokeS(@Buff$, "Window", -1, #PB_Unicode)
    hTheme = OpenThemeData_(WindowID(0),Buff$)
    
    CreateImage(3,20,20)
    hdc = StartDrawing(ImageOutput(3))
          SetRect_(tr.RECT,0,0,20,20)
          DrawThemeBackground_(hTheme,hdc,18,1,tr,0)
    StopDrawing()
    CreateImage(32,20,20)
    hdc = StartDrawing(ImageOutput(32))
          SetRect_(tr.RECT,0,0,20,20)
          DrawThemeBackground_(hTheme,hdc,18,2,tr,0)
    StopDrawing() 
    CreateImage(4,20,20)
    hdc = StartDrawing(ImageOutput(4))
          SetRect_(tr.RECT,0,0,20,20)
          DrawThemeBackground_(hTheme,hdc,17,1,tr,0)
    StopDrawing()
    CreateImage(42,20,20)
    hdc = StartDrawing(ImageOutput(42))
          SetRect_(tr.RECT,0,0,20,20)
          DrawThemeBackground_(hTheme,hdc,17,2,tr,0)
    StopDrawing() 
    CreateImage(5,20,20)
    hdc = StartDrawing(ImageOutput(5))
          SetRect_(tr.RECT,0,0,20,20)
          DrawThemeBackground_(hTheme,hdc,15,1,tr,0)
    StopDrawing()
    CreateImage(52,20,20)
    hdc = StartDrawing(ImageOutput(52))
          SetRect_(tr.RECT,0,0,20,20)
          DrawThemeBackground_(hTheme,hdc,15,2,tr,0)
    StopDrawing() 
    CreateImage(6,20,20)
    hdc = StartDrawing(ImageOutput(6))
          SetRect_(tr.RECT,0,0,20,20)
          DrawThemeBackground_(hTheme,hdc,21,1,tr,0)
    StopDrawing()
    CreateImage(62,20,20)
    hdc = StartDrawing(ImageOutput(62))
          SetRect_(tr.RECT,0,0,20,20)
          DrawThemeBackground_(hTheme,hdc,21,2,tr,0)
    StopDrawing()
    CloseThemeData_(hTheme)
;EndIf

SystemParametersInfo_(#SPI_GETWORKAREA,0,wr.RECT,0)
ResizeWindow(0,wr\Left + (wr\right-wr\left-WW)/2,wr\top+(wr\bottom-wr\top-WH)/2,WW,WH)

OpenWindow(1,0,0,0,0,"",#PB_Window_BorderLess)
SetWindowColor(1,Color)
SetWindowLongPtr_( WindowID(1), #GWL_HWNDPARENT,WindowID(0))
;Add Border to Window #1
SetWindowLongPtr_(WindowID(1),#GWL_STYLE,GetWindowLongPtr_(WindowID(1),#GWL_STYLE)|#WS_BORDER)

OpenWindow(2,0,0,0,0,"",#PB_Window_BorderLess)
SetWindowColor(2,$E6FCFE)
SetWindowLongPtr_( WindowID(2), #GWL_HWNDPARENT,WindowID(1))
;Add Border to Window #2
SetWindowLongPtr_(WindowID(2),#GWL_STYLE,GetWindowLongPtr_(WindowID(1),#GWL_STYLE)|#WS_BORDER)

SetActiveWindow(0)

UseGadgetList(WindowID(1))
TextGadget(0,0,0,140,24,"**RASHAD**")
SetGadgetFont(0,FontID(0))
SetGadgetColor(0,#PB_Gadget_BackColor,Color)
SetGadgetColor(0,#PB_Gadget_FrontColor,Color ! $FFFFFF)
ImageGadget(1,4,4,40,30,ImageID(0))
If OSVersion() >= #PB_OS_Windows_8
    LoadFont(1,"Marlett",12)
    ContainerGadget(2,0,0,90,24,#PB_Container_BorderLess)
    SetClassLongPtr_(GadgetID(2),#GCL_HBRBACKGROUND,GetStockObject_(#NULL_BRUSH))
    TextGadget(3,50,0,45,20,Chr($72),#SS_CENTERIMAGE | #SS_CENTER|#SS_NOTIFY)
    SetGadgetColor(3,#PB_Gadget_BackColor,$1F1FCC)
    SetGadgetColor(3,#PB_Gadget_FrontColor,#White)
    SetGadgetFont(3,FontID(1))
    TextGadget(4,24,0,24,20,Chr($31),#SS_CENTERIMAGE | #SS_CENTER|#SS_NOTIFY)
    SetGadgetColor(4,#PB_Gadget_BackColor,Color)
    SetGadgetFont(4,FontID(1))
    TextGadget(5,0,0,24,20,Chr($30),#SS_CENTER|#SS_NOTIFY)
    SetGadgetColor(5,#PB_Gadget_BackColor,Color)
    SetGadgetFont(5,FontID(1))
Else
    ContainerGadget(2,0,0,90,24,#PB_Container_BorderLess)
    SetClassLongPtr_(GadgetID(2),#GCL_HBRBACKGROUND,GetStockObject_(#NULL_BRUSH))
    ImageGadget(3,50,0,24,24,ImageID(3),#BS_FLAT)
    SetWindowTheme_(GadgetID(3), @null.w, @null.w) 
    ImageGadget(4,25,0,24,24,ImageID(4),#BS_FLAT)
    SetWindowTheme_(GadgetID(4), @null.w, @null.w) 
    ImageGadget(5,0,0,24,24,ImageID(5),#BS_FLAT)
    SetWindowTheme_(GadgetID(5), @null.w, @null.w)
EndIf

 UseGadgetList(WindowID(2))
 
  If CreateMenu(0, WindowID(2))
    MenuTitle("File")
      MenuItem( 1, "&Load...")
      MenuItem( 2, "Save")
      MenuItem( 3, "Save As...")
      MenuBar()
      OpenSubMenu("Recents")
        MenuItem( 5, "Pure.png")
        MenuItem( 6, "Basic.jpg")
        OpenSubMenu("Even more !")
          MenuItem( 12, "Yeah")
        CloseSubMenu()
        MenuItem( 13, "Rocks.tga")
      CloseSubMenu()
      MenuBar()
      MenuItem( 7, "&Quit")

    MenuTitle("Edition")
      MenuItem( 8, "Cut")
      MenuItem( 9, "Copy")
      MenuItem(10, "Paste")
      
    MenuTitle("?")
      MenuItem(11, "About")
  EndIf  
 
  TextGadget    (20,  10,  10, 300, 20, "ListIcon Standard", #PB_Text_Center)
  ListIconGadget(10,  10,  25, 300, 70, "Column 1", 100)
  TextGadget    (21,  10, 105, 300, 20, "ListIcon with Checkbox", #PB_Text_Center)
  ListIconGadget(11,  10, 120, 300, 70, "Column 1", 100, #PB_ListIcon_CheckBoxes)  ; ListIcon with checkbox
  TextGadget    (22,  10, 200, 300, 20, "ListIcon with Multi-Selection", #PB_Text_Center)
  ListIconGadget(12,  10, 215, 300, 70, "Column 1", 100, #PB_ListIcon_MultiSelect) ; ListIcon with multi-selection
  ; right column
  TextGadget    (23, 330,  10, 300, 20, "ListIcon with separator lines",#PB_Text_Center)
  ListIconGadget(13, 330,  25, 300, 70, "Column 1", 100, #PB_ListIcon_GridLines)
  TextGadget   (24, 330, 105, 300, 20, "ListIcon with FullRowSelect and AlwaysShowSelection",#PB_Text_Center)
  ListIconGadget(14, 330, 120, 300, 70, "Column 1", 100, #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection)
  TextGadget   (25, 330, 200, 300, 20, "ListIcon Standard with large icons",#PB_Text_Center)
  ListIconGadget(15, 330, 220, 300, 65, "", 200,#PB_ListIcon_GridLines)
  For a = 10 To 14            ; add columns to each of the first 5 listicons
    For b = 2 To 4          ; add 3 more columns to each listicon
      AddGadgetColumn(a, b, "Column " + Str(b), 65)
    Next
    For b = 0 To 2          ; add 4 items to each line of the listicons
      AddGadgetItem(a, b, "Item 1"+Chr(10)+"Item 2"+Chr(10)+"Item 3"+Chr(10)+"Item 4")
    Next
  Next
  
  SetGadgetAttribute(15, #PB_ListIcon_DisplayMode, #PB_ListIcon_LargeIcon)
  AddGadgetItem(15, 1, "Picture 1", ImageID(3))
  AddGadgetItem(15, 2, "Picture 2", ImageID(6))

SetWindowCallback(@WndProc())

Repeat
  Select WaitWindowEvent()
      Case #WM_MOUSEMOVE
          If OSVersion() >= #PB_OS_Windows_8
            If IsMouseOver(GadgetID(3))
                SetGadgetColor(3,#PB_Gadget_BackColor,$5959E5)
            Else
                SetGadgetColor(3,#PB_Gadget_BackColor,$1F1FCC)
            EndIf
            If IsMouseOver(GadgetID(4))
                SetGadgetColor(4,#PB_Gadget_BackColor,$FE5451)
                SetGadgetColor(4,#PB_Gadget_FrontColor,#White)
            Else
                SetGadgetColor(4,#PB_Gadget_BackColor,Color)
                SetGadgetColor(4,#PB_Gadget_FrontColor,#Black)
            EndIf 
            If IsMouseOver(GadgetID(5))
                SetGadgetColor(5,#PB_Gadget_BackColor,$FE5451)
                SetGadgetColor(5,#PB_Gadget_FrontColor,#White)
            Else
                SetGadgetColor(5,#PB_Gadget_BackColor,Color)
                SetGadgetColor(5,#PB_Gadget_FrontColor,#Black)
            EndIf
          EndIf
          If OSVersion() < #PB_OS_Windows_8
            If IsMouseOver(GadgetID(3))
                SetGadgetState(3,ImageID(32))
            Else
                SetGadgetState(3,ImageID(3))
            EndIf
            If IsMouseOver(GadgetID(4)) = 1 And Maxx = 1
                SetGadgetState(4,ImageID(62))
            ElseIf IsMouseOver(GadgetID(4)) = 0 And Maxx = 1
                SetGadgetState(4,ImageID(6))
            ElseIf IsMouseOver(GadgetID(4)) = 1 And Maxx = 0
                SetGadgetState(4,ImageID(42))
            ElseIf IsMouseOver(GadgetID(4)) = 0 And Maxx = 0
                SetGadgetState(4,ImageID(4))
            EndIf
            If IsMouseOver(GadgetID(5))
                SetGadgetState(5,ImageID(52))
            Else
                SetGadgetState(5,ImageID(5))
            EndIf
          EndIf
      
      Case #PB_Event_Menu

        Select EventMenu()  ; To see which menu has been selected

          Case 11 ; About
            MessageRequester("About", "Cool Menu example", 0)
            
          Default
            MessageRequester("Info", "MenuItem: "+Str(EventMenu()), 0)

        EndSelect
      
      Case #PB_Event_Gadget
          Select EventGadget()
          
              Case 3 
                     Quit = 1
;        
              Case 4
                    Select EventType()
                      Case #PB_EventType_LeftClick
                        Maxx ! 1                        
                        If Maxx = 1
                            WX = WindowX(0)
                            WY = WindowY(0)
                            WW = WindowWidth(0)
                            WH = WindowHeight(0)
                            SystemParametersInfo_(#SPI_GETWORKAREA,0,r.RECT,0)                                                         
                            MoveWindow_(WindowID(0),r\left-SB,r\top-SB,r\right-r\left+2*SB,r\bottom-r\top+2*SB,1)
                            If OSVersion() >= #PB_OS_Windows_8
                                SetGadgetText(4,Chr($32))
                            Else
                                SetGadgetState(4,ImageID(6))
                            EndIf
                        Else
                            MoveWindow_(WindowID(0),WX,WY,WW,WH,1)
                            If OSVersion() >= #PB_OS_Windows_8
                                SetGadgetText(4,Chr($31))
                                SetGadgetColor(4,#PB_Gadget_BackColor,Color)
                                SetGadgetColor(4,#PB_Gadget_FrontColor,#Black)
                            Else
                                SetGadgetState(4,ImageID(4))
                            EndIf
                        EndIf
                    EndSelect                    
   
              Case 5
                    SetWindowState(0,#PB_Window_Minimize)             
   
          EndSelect          
            
  EndSelect 

Until Quit = 1
End

DataSection
balls:
   Data.q $0A1A0A0D474E5089,$524448490D000000,$1E00000028000000,$5CDD5E0000000608,$414449AD090000DD
   Data.q $14507998C5C35854,$D64D98C4C1C71E57,$2B5DAD9B254C5635,$A211A8C49ABB5B5B,$8080821F7DC33D33
   Data.q $D00478231C249440,$31C8088D728880A0,$081103208820A0DC,$97373372E1C870C7,$70E7208CA08DCA22
   Data.q $4DD92549301EDDF8,$FAFDEA7C7F2A5988,$BF7BCDFA7F5EF3D7,$96F979B985B919EE,$8E2DFE6F815AB112
   Data.q $FE4CE16FB174D15F,$616350B1510ADCF9,$9C89EFDC801E417E,$8F7B9EEF99AF8F20,$E689708C7104D91B
   Data.q $5840F1BF1F6446C8,$93CD5305DDFA5028,$09ADCF02DC8FABAB,$8D13BC24042E3742,$ECE4C1EA462FB328
   Data.q $C2C834BF75A9B1A9,$BDC37FA4A0DC82E2,$1B1E1CFF242D8EC1,$9823FFF16CF8BF5A,$7C12B346B6693DB2
   Data.q $92E91079758846DD,$BC432B52A80DBA82,$3FCD83EE6E83CC62,$15ABCDEFA4A0C037,$0E2C35DE79412EB1
   Data.q $AE5060E0716461F3,$D3E8C392557A4577,$ECAEEE60B37FEB47,$61755AF4427DB6B1,$107BAB1E8967AAD0
   Data.q $6A1F68CA56C173E9,$E91EEE757FF77A1F,$155159D3EBE0277A,$57C4B222414C85CC,$67D8B42027E0C896
   Data.q $D0C9F87E33DB302E,$36BC6FB5C824DF86,$06CC7180A983D768,$DD0C6FD26486624D,$2F3110D93E689DD6
   Data.q $A5E74A3ADFF35F9D,$5C8BE79867F941F2,$788990BC420FC090,$797C20DC240473D1,$E2DBAF9E6842E0FD
   Data.q $EFCA0F72DD7F8BE2,$3AE53DBBAB32696F,$31E6834879C5E909,$7EED851A25027C75,$3CAF35B535EABECE
   Data.q $C407DB1D27ECF67B,$D9547A766B2EAD9B,$C1127C738189A7C1,$B1C61C34F80C7873,$1EFB9BD4B0580B42
   Data.q $D2F2D2C1617A6CF5,$80B47E96A6AAA675,$FCCD6CB6BCCD6C82,$2F451EA5605A008E,$F77777274513F14A
   Data.q $3BEB1D27F4A952CD,$56D94E76530D94AB,$44908605A781C2AB,$5A8D0E0B5F238CB4,$9247F47685425038
   Data.q $1F1C1617851ACEA6,$787837B36767971F,$3382B3B0F9C3FC79,$75745070C0E299C3,$AE97FF1F1F16DD73
   Data.q $6C6A787EDFB5AEAE,$704E555CCDEE55EC,$19DF995FB04E7FA8,$A9A4B85D00AF45D3,$E0FB7D138FAC45C3
   Data.q $B2F8C6FBD70C63D6,$75706095EA8708C3,$1617CEDD7EF728E7,$CF4DC82C2C54AEFC,$59E3F32F4F4DCB4C
   Data.q $F7A7B5FCDD6D681B,$D1586B4F338F3CE5,$0D0D392081495DE0,$BCC23CF7C6F889B1,$EE93510EC9B8200F
   Data.q $38AE234B857D8D60,$1DADD1BE2F846ADE,$8E7F059BF8DFEB1A,$A9D1CD7CFF3B7787,$10CB8482102FDCA8
   Data.q $8C888CB71C4227C7,$CD1CB060C0CAB965,$88E1F31B83EC5571,$B8D99D56A70D3899,$704D57E6EC83A666
   Data.q $FF2BE27D9E56767E,$0FC117999A067B1C,$2C591CF44490820C,$20399FD8E79135CB,$A9C49E9EE221B8E4
   Data.q $F5A6E2189305D361,$3EBE262526760767,$5364607F7F22792A,$A0D5A9BCB143AF15,$6DB9D456A755A9AC
   Data.q $7FCBB73FF593D1F0,$A4AD1CDC204FB051,$751C34470BF4B77A,$2C8E78224F849701,$C1CE02E63FA9266E
   Data.q $88B2384EF761702F,$8B4AAE84A2773D41,$967AEA2927A852A0,$5CA9418E99C2BC87,$CDE624CE4F1BC897
   Data.q $7D74BD1E94DFC679,$E0AD31795C999ED8,$28242F5BF0FF5748,$6CC770FB8C31CEC8,$BCD14D0CEA218E99
   Data.q $92335EC1127C14D7,$EBA8E123AB9658E5,$98FCED5836EB7A22,$A992BA09ACD2A54D,$FDA193BEF0798E82
   Data.q $F48CD252B8256901,$AB5C4BC4ABD2114A,$B263271EA0A12210,$22F539CAE27C6C17,$6714145FB4971FC5
   Data.q $3DEA847EB6D36DB1,$83AAAC4168A9E04A,$D12EE9A8741D3536,$A8DA2AB98F222246,$6A110FAFFC902454
   Data.q $95AD6B2B2B343FBA,$2B0918CF135B79CB,$8A942402A5890EAF,$71D9788EFE265090,$14AFBC1E1C891089
   Data.q $F2D4DE5C5435C742,$93AB99B8EC12AFF1,$5D17BBA05A615DB3,$6D0639FD67D08756,$925EE2C8E7C3C73E
   Data.q $C647D4D3C08703AE,$0B5464CFE5B8EDD6,$2E77B98F73D7DF3B,$86F908CDF9A102BD,$3F450A422102908F
   Data.q $73422E7C908040A4,$2EDCF41A6069F01B,$82C571BC7C3EF515,$16D3552DDE3BDB8F,$31A713A3C2B331DF
   Data.q $F2983E1E931671E6,$E596320983E2473C,$72059F7DA14F5C46,$1CBB6538DB86213F,$2BC0A7781987AF82
   Data.q $E6C9E09A379E16A3,$0FE11CCF005B33C1,$6CCAF0CDF3C9F361,$97F5B03E315C7380,$38B82C566C726446
   Data.q $A3BF74CFEED72F3F,$C1B313D27E38BC6B,$BF151A42C64690E1,$D03C276372CB190C,$C2B163A7468865A6
   Data.q $3768891F76F7CE96,$92EC0D527D86CFF0,$3CA9F619B577601B,$FB0F9527BE09A7D8,$72FEC234A7D85CAB
   Data.q $011180F8A5586C2D,$6B93A793F62C53E3,$B63607FAA7075C57,$499FACCC4BA43AD8,$D8B98B161A43CF3D
   Data.q $7B992CA4E1A425E4,$97D7128A02836E62,$ADCD2885FB877871,$23F42E4F8493918E,$CD31061EAA3F436E
   Data.q $4CB05E20C1E58830,$BA20C2E3993E0C9C,$C1285FA81AAC0601,$57799ECBB19763D6,$D4D60B15D7FBD9D4
   Data.q $224C5235EEDBCAD6,$DA4F4FF7740F3854,$9F5312F4E32CC11C,$A126697EDE80C11E,$E52A1461104661DA
   Data.q $E39C5BBEA65A5DB3,$0B5211042D9C7617,$1CA10947286688E5,$B6C4A856989502DD,$B32822D1C72EB491
   Data.q $16FFC1403587A078,$23E8460EC75DBAB6,$B364162B6DEE9DDE,$8D3B67B3DEEF2FD9,$8441094A10DA8E20
   Data.q $37459C40DD267966,$E508ECEB34270B68,$43D3A0863D1A551C,$E2ECDB414BD50469,$A0AB337748A65FFB
   Data.q $528C077251842713,$7BD38C01ED28C1EF,$4E30DD6BDB977A48,$6A4830BB94A30FBD,$3B1F1371E6DC925D
   Data.q $B15F7FBD9DF9BAB3,$232323E58FC7E3E0,$45494F7F3737375F,$C50A541A10429145,$9BB662950F6CC488
   Data.q $74E9F552A547D94A,$4E3607E696B6B2BA,$C3557A37D385146E,$01BC8C1F79999DC9,$9C31F0A9C30C1538
   Data.q $47E64A3453DF258A,$303D3976087F3870,$78E802EF0EC16C4C,$B15B5FC64A1E71A7,$4343471F2166D2E0
   Data.q $73726B7575757243,$62CABDA5A5A6D773,$292D7888888B5EB1,$CAEB1919190FE929,$1F9169696E5ECACA
   Data.q $BAE2AA2AC57D191C,$79E1FB721C13784A,$66A7C29FB7B3824B,$66A7C3BE676AE70A,$18D577809EFF3E1A
   Data.q $DB07729260478B5C,$F5DABD7B3B3E16CF,$346EC6BF6ABD82DB,$B35A8E37852A6B76,$B3CD21127B75E1FB
   Data.q $961EFC25114BE088,$D3F501149E308A40,$B43B62768519CA38,$FB7F25FBDBF1552F,$C2DCCCC22F336F55
   Data.q $BB933467DD25BE4B,$429035F8099CF6A5,$3ED490E75A122922,$E1CCB5C439B6C487,$D9FD833D5EE82912
   Data.q $8BD2D471B43BB08F,$7D7D7D35F9AE4965,$ECE941355C59B2F2,$13883795FC645CAC,$A5D6D303691AE189
   Data.q $2CDE59C59DA970D3,$B3D36723F3D9C9FC,$379C6066AB871669,$A9E0E7B6344B1A01,$87F3D72757468218
   Data.q $BD1515166F969696,$435E489122826AB4,$F52F6549422DFD43,$4D1E92E0B46BB753,$2A4C38C96F749F76
   Data.q $250AF404D6EFB127,$99DEA9A73B5254CF,$169D3A6CDB630977,$925271DB3724C246,$1D826AB0DAD2D2D0
   Data.q $C89B7A7ABAF21D1D,$554D18E7A590690B,$A8F52AFCFFEC4983,$153D4F5311E1097F,$564610E2F4754F55
   Data.q $208D3A68956574E9,$CD1A343E24C1E8E5,$7EB2626268A7EC91,$797979D16F6504D5,$ACACA9BC58585B2F
   Data.q $68F7C35920BC85BC,$A0B54A8D318A5411,$C96B2D6529158413,$66EC9184104E6AFA,$CEEFED4D4D5156C8
   Data.q $566B78F1E27FCECE,$EDEDEF22D9157FF5,$85C2E97FCFCFCB95,$F5F51FC60C18EB0B,$CA45BC68686A37F5
   Data.q $8EB6F243BCCA4DBC,$7570DEB67226CE8E,$AA95EA2A2A3D7D75,$8C6964891235AAAA,$386933A6959100FF
   Data.q $45490000000039A9,$826042AE444E
ballsend:

EndDataSection

Egypt my love
User avatar
VB6_to_PBx
Enthusiast
Enthusiast
Posts: 625
Joined: Mon May 09, 2011 9:36 am

Re: My Special Window (Windows)

Post by VB6_to_PBx »

Very nice , i greatly enjoy your Posts
Thank you very much for sharing your Code !!!
 
PureBasic .... making tiny electrons do what you want !

"With every mistake we must surely be learning" - George Harrison
User avatar
netmaestro
PureBasic Bullfrog
PureBasic Bullfrog
Posts: 8433
Joined: Wed Jul 06, 2005 5:42 am
Location: Fort Nelson, BC, Canada

Re: My Special Window (Windows)

Post by netmaestro »

Very fine piece of work RASHAD, hats off to a good job. Contains much instructive code. Thanks for sharing.
BERESHEIT
RASHAD
PureBasic Expert
PureBasic Expert
Posts: 4664
Joined: Sun Apr 12, 2009 6:27 am

Re: My Special Window (Windows)

Post by RASHAD »

Hi VB6_to_PBx
Thanks and you are welcome

Hi NM
Thanks
That is a considerable praise from a big man
Thanks again
Egypt my love
User avatar
Fangbeast
PureBasic Protozoa
PureBasic Protozoa
Posts: 4749
Joined: Fri Apr 25, 2003 3:08 pm
Location: Not Sydney!!! (Bad water, no goats)

Re: My Special Window (Windows)

Post by Fangbeast »

That is a considerable praise from a big man
He's over 8 foot tall now!!!
Amateur Radio, D-STAR/VK3HAF
RASHAD
PureBasic Expert
PureBasic Expert
Posts: 4664
Joined: Sun Apr 12, 2009 6:27 am

Re: My Special Window (Windows)

Post by RASHAD »

:mrgreen:
He deserve more Fang
You know when I came first to PureBasic playing yard my favorites were
Sparkie,netmaestro,Fluid Bytes,srod,Danilo and Fangbeast
So be careful mate you are one of them :P
Egypt my love
User avatar
Fangbeast
PureBasic Protozoa
PureBasic Protozoa
Posts: 4749
Joined: Fri Apr 25, 2003 3:08 pm
Location: Not Sydney!!! (Bad water, no goats)

Re: My Special Window (Windows)

Post by Fangbeast »

He deserve more Fang
Tue, he does. He doesn't say much unless asked but when he does, it's wizardly.
You know when I came first to PureBasic playing yard my favorites were Sparkie, netmaestro, Fluid Bytes, srod, Danilo
True. But I can add El_Choni and Rings to that as well. They helped me get started in databases.
Fangbeast
Me??? How on earth do you figure that?? I'm as dump as a dingo's dead donger!! Can't remember the last time I ever contributed something that wasn't crap and as I get older (and uglier), I need more help than I get! (You don't want to see the latest pile of steaming crap I am writing
So be careful mate you are one of them :P
yes, the question is: "What exactly am I???"

Heheheheh
Amateur Radio, D-STAR/VK3HAF
User avatar
Kwai chang caine
Always Here
Always Here
Posts: 5357
Joined: Sun Nov 05, 2006 11:42 pm
Location: Lyon - France

Re: My Special Window (Windows)

Post by Kwai chang caine »

Great RASHAD wrote:Hi NM
Thanks
That is a considerable praise from a big man
Thanks again
And now...after the congratulation of TOP of the TOP.... 8)
This is ...
The congratulation of the LOW ... :( the furuncle of this forum ....your servant KCC :mrgreen:

Splendid your windows :shock:
Thanks a lot for sharing .... 8)

Like usually, i'm always the better for have problem :oops:
I don't know if it's normal, but i have black square at the place of the 3 pictures in corner of window and in the gadget :|
I use v5.31 and W7
ImageThe happiness is a road...
Not a destination
RASHAD
PureBasic Expert
PureBasic Expert
Posts: 4664
Joined: Sun Apr 12, 2009 6:27 am

Re: My Special Window (Windows)

Post by RASHAD »

Hi KCC
No comment will be considered even NM until you sign the final report
Do not worry :)

Now search your windows for UxTheme.dll if it is there or not
Egypt my love
Amilcar Matos
User
User
Posts: 43
Joined: Thu Nov 27, 2014 3:10 pm
Location: San Juan, Puerto Rico

Re: My Special Window (Windows)

Post by Amilcar Matos »

Excellent!
Thank you.
User avatar
bbanelli
Enthusiast
Enthusiast
Posts: 543
Joined: Tue May 28, 2013 10:51 pm
Location: Europe
Contact:

Re: My Special Window (Windows)

Post by bbanelli »

RASHAD wrote:Now search your windows for UxTheme.dll if it is there or not
I have the same issue while using Windows Classic theme on W7. Take a look the difference between W7 Classic and W10. It also works fine on WXP with XP theme but looses graphics when switched to Windows Classic.

Image

Is there a way of forcing UxTheme.dll use regardles of the fact the currently activated theme is Windows Classic? Because, it is funny how when you run the code on non-classic theme you get buttons and graphics, but when you leave it open and switch theme, it still remains there...
"If you lie to the compiler, it will get its revenge."
Henry Spencer
https://www.pci-z.com/
User avatar
Kwai chang caine
Always Here
Always Here
Posts: 5357
Joined: Sun Nov 05, 2006 11:42 pm
Location: Lyon - France

Re: My Special Window (Windows)

Post by Kwai chang caine »

bbanelli wrote:I have the same issue while using Windows Classic theme on W7.
Yeeees !!!!! i'm not crazy...and mainly not alone !!! 8)

It's exactely that...me too i'm on the Windows Classic theme on W7.
I hate tinsel and christmas tree....and love W95 look (The more simple possible for KCC is really enough) :mrgreen:
Thanks bbanelli for your advice :wink:
ImageThe happiness is a road...
Not a destination
RASHAD
PureBasic Expert
PureBasic Expert
Posts: 4664
Joined: Sun Apr 12, 2009 6:27 am

Re: My Special Window (Windows)

Post by RASHAD »

Hi Amilcar Matos
Thanks

Hi KCC
Next time tell us your configuration :)

Hi bbanelli
Thanks for reporting

I will keep the first post as it is
Next is a modified version to compensate the classic mode and fixing some bugs too

Code: Select all

UsePNGImageDecoder()

Global Maxx,Scale.f,wr.RECT,CH,BW,SB,Theme

#ERROR_NONE = 0
#KEY_WOW64_64KEY=$100
#KEY_WOW64_32KEY=$200

Procedure BrightnessRGB(RGB_Color.l, Delta.w)
  !XOR Edx, Edx 
  !XOR Ebx, Ebx
  !XOR Ecx, Ecx
  !MOV BX, Word [p.v_Delta]
  !MOV Eax, dWord [p.v_RGB_Color]
  !MOV DL, AL
  !CALL .adddelta
  !MOV CL, DL
  !MOV DL, AH 
  !CALL .adddelta
  !MOV CH, DL
  !BSWAP Eax 
  !MOV DL, AH
  !CALL .adddelta
  !MOV AH, DL
  !BSWAP Eax 
  !MOV AX, CX 
  !JMP .ready
  !.adddelta:
  !ADD DX, BX
  !BT DX, 15 
  !JC .negativ 
  !CMP DX, $FF
  !JBE .inrange
  !.bigger:
  !MOV DX, $00FF
  !JMP .inrange 
  !.negativ:
  !XOR Edx, Edx
  !.inrange:
  !RET
  !.ready:
  ProcedureReturn 
EndProcedure

Procedure.l QueryValueEx(lhkey.l, szValueName$)
      Shared vValue$
      cch    = 255
      sValue$ = Space(255)
      lrc    = RegQueryValueEx_(lhkey, szValueName$, 0, @lType, @sValue$, @cch)
      If lrc = #ERROR_NONE
        vValue$ = Left(sValue$, cch - 1)
      Else
        vValue$ = "Empty"
      EndIf
      ProcedureReturn lrc
EndProcedure

Procedure IsMouseOver(hWnd) 
    GetWindowRect_(hWnd,r.RECT) 
    GetCursorPos_(p.POINT) 
    Result = PtInRect_(r,p\y << 32 + p\x) 
    ProcedureReturn Result 
EndProcedure

Procedure WndProc(hwnd, uMsg, wParam, lParam)
 result = #PB_ProcessPureBasicEvents 
 Select uMsg
    Case #WM_NCACTIVATE
              Result = 1
              
    Case #WM_ENTERSIZEMOVE
         If Theme = 0
            ;SendMessage_(WindowID(0),#WM_SETREDRAW,#False,0)
            LockWindowUpdate_(WindowID(0))
         EndIf
    
    Case #WM_EXITSIZEMOVE
         If Theme = 0
            ;SendMessage_(WindowID(0),#WM_SETREDRAW,#True,0)
            ;RedrawWindow_(WindowID(0),#Null,#Null,#RDW_INVALIDATE|#RDW_UPDATENOW|#RDW_ERASE)
            LockWindowUpdate_(0)
            UpdateWindow_(WindowID(0))
         EndIf              
           
    Case #WM_MOVE,#WM_SIZE,#WM_PAINT
            GetWindowRect_(WindowID(0),r.RECT)
            MoveWindow_(WindowID(1),r\left+SB ,r\top+SB,r\right-r\left-2*SB,r\bottom-r\top-2*SB,1)
            MoveWindow_(WindowID(2),r\left+BW+SB ,r\top+CH+SB,r\right-r\left-BW*2-2*SB,r\bottom-r\top-CH-BW-2*SB,1)
            MoveWindow_(GadgetID(0),(r\right-r\left)/2-80,2,140,24,1)
            If OSVersion() >= #PB_OS_Windows_8 Or (OSVersion() < #PB_OS_Windows_8 And Theme = 0)
                 ResizeGadget(2,r\right-r\left-105,2,90,24)
            Else
                 ResizeGadget(2,r\right-r\left-90,10,90,24) 
            EndIf
            SetForegroundWindow_(WindowID(2))            
            
    Case #WM_SETTINGCHANGE,#WM_PAINT
            If Maxx = 1
                SystemParametersInfo_(#SPI_GETWORKAREA, 0, r.RECT, 0)
                MoveWindow_(WindowID(0),r\left-SB,r\top-SB,r\right-r\left+2*SB,r\bottom-r\top+2*SB,1)
                If OSVersion() >= #PB_OS_Windows_8 Or (OSVersion() < #PB_OS_Windows_8 And Theme = 0)
                     MoveWindow_(GadgetID(2),r\right-r\left-105,2,90,24,1)
                Else
                     MoveWindow_(GadgetID(2),r\right-r\left-105,10,90,24,1) 
                EndIf
                SetForegroundWindow_(WindowID(2))
            EndIf

    Case #WM_LBUTTONDOWN
            If IsMouseOver(WindowID(0)) = 1 And Maxx = 0
                 SendMessage_(WindowID(0), #WM_NCLBUTTONDOWN, #HTCAPTION, 0)
            EndIf
            
  EndSelect
   
 ProcedureReturn result 
EndProcedure

Import "UxTheme.lib"    
  GetCurrentThemeName(*pszThemeFileName, dwMaxNameChars, *pszColorBuff, cchMaxColorChars, *pszSizeBuff, cchMaxSizeChars)
EndImport

*MemoryBuffer=AllocateMemory(2*(#MAX_PATH+1))
*AnsiBuff=AllocateMemory(#MAX_PATH)

CoInitialize_(0)
GetCurrentThemeName(*MemoryBuffer,#MAX_PATH,0,#MAX_PATH,0,0)
  
CompilerIf #PB_Compiler_Unicode
  pszThemeName.s = PeekS(*MemoryBuffer)    
CompilerElse  
  PokeS(*AnsiBuff,PeekS(*MemoryBuffer,-1,#PB_Unicode), -1, #PB_Ascii)
  pszThemeName.s = PeekS(*AnsiBuff)
CompilerEndIf  
  
If pszThemeName = ""
    Theme = 0
Else
    Theme = 1
EndIf

CoUninitialize_()
FreeMemory(*MemoryBuffer) 
FreeMemory(*AnsiBuff)

If OSVersion() >= #PB_OS_Windows_Vista
        dll=OpenLibrary(#PB_Any,"user32.dll")
        If dll
           *IsProcessDPIAware=GetFunction(dll,"IsProcessDPIAware")
         If *IsProcessDPIAware
          dpiaware=CallFunctionFast(*IsProcessDPIAware)
         EndIf
         If Not dpiaware
            *SetProcessDPIAware=GetFunction(dll,"SetProcessDPIAware")
            If *SetProcessDPIAware
             CallFunctionFast(*SetProcessDPIAware)
                 dpiaware=CallFunctionFast(*IsProcessDPIAware)
            EndIf
         EndIf
        EndIf
EndIf
 
Scale = 1

If OSVersion() >= #PB_OS_Windows_XP  And OSVersion() < #PB_OS_Windows_Vista
    dc=GetDC_(0)
    Scale = GetDeviceCaps_(dc,#LOGPIXELSX)/96
    ReleaseDC_(0,dc)
ElseIf OSVersion() >= #PB_OS_Windows_Vista And OSVersion() < #PB_OS_Windows_8
      sValueName$ = "LogPixels"
      lRetVal = RegConnectRegistry_("", #HKEY_CURRENT_USER, @lHKeyhandle)
      lRetVal = RegOpenKeyEx_(lHKeyhandle, "Control Panel\DeskTop", 0,#KEY_READ|#KEY_WOW64_64KEY, @lhkey)
      lRetVal = QueryValueEx(lhkey, sValueName$)
      RegCloseKey_(lhkey)
      If vValue$ = Chr(120)
          Scale = 1.25
      ElseIf vValue$ = Chr(144)
          Scale = 1.50
      EndIf   
ElseIf OSVersion() >=#PB_OS_Windows_8
      sValueName$ = "DesktopDPIOverride"
      lRetVal = RegConnectRegistry_("", #HKEY_CURRENT_USER, @lHKeyhandle)
      lRetVal = RegOpenKeyEx_(lHKeyhandle, "Control Panel\DeskTop", 0,#KEY_READ|#KEY_WOW64_64KEY, @lhkey)
      lRetVal = QueryValueEx(lhkey, sValueName$)
      RegCloseKey_(lhkey)
      If vValue$ = "1"
          Scale = 1.25
      ElseIf vValue$ = "2"
          Scale = 1.50
      EndIf
EndIf

LoadFont(0,"Georgia",14)

CatchImage(0,?Balls)
 
WW = 800          ;Default Window Width
WH  = 420          ;Default Window Height
CH   = 70            ;Caption Height

If CH < 35
    CH = 35
EndIf

BW  = 20            ;Border Width
SB   = 4              ;SizeBox Border Width
Color = 0            ;Window Color
; If SB >= GetSystemMetrics_(#SM_CXFRAME)
;    SB = GetSystemMetrics_(#SM_CXFRAME) - 4
; EndIf
SystemParametersInfo_(#SPI_GETWORKAREA,0,wr.RECT,0)
OpenWindow(0,wr\left,wr\top,2,2,"",#PB_Window_BorderLess| #WS_SIZEBOX)

 If Color = 0 And Theme = 1
      If OSVersion() >= #PB_OS_Windows_Vista
          hdc = GetWindowDC_(0)          
          Color = GetPixel_(hdc,wr\left+2,wr\top+2)
          ReleaseDC_(0,hdc)
      Else
          Color = GetSysColor_(#COLOR_ACTIVECAPTION)
      EndIf
ElseIf Color = 0 And Theme = 0
      Color = $D6D6D8
EndIf
 
;Color = BrightnessRGB(Color,5)
SetWindowColor(0,Color)
SetWindowLongPtr_(WindowID(0),#GWL_EXSTYLE,#WS_EX_LAYERED)
SetLayeredWindowAttributes_(WindowID(0),0,2,#LWA_ALPHA) 

If OSVersion() < #PB_OS_Windows_8 And Theme = 1
    Buff$ = Space(12)
    PokeS(@Buff$, "Window", -1, #PB_Unicode)
    hTheme = OpenThemeData_(WindowID(0),Buff$)
    
    CreateImage(3,20,20)
    hdc = StartDrawing(ImageOutput(3))
          SetRect_(tr.RECT,0,0,20,20)
          DrawThemeBackground_(hTheme,hdc,18,1,tr,0)
    StopDrawing()
    CreateImage(32,20,20)
    hdc = StartDrawing(ImageOutput(32))
          SetRect_(tr.RECT,0,0,20,20)
          DrawThemeBackground_(hTheme,hdc,18,2,tr,0)
    StopDrawing() 
    CreateImage(4,20,20)
    hdc = StartDrawing(ImageOutput(4))
          SetRect_(tr.RECT,0,0,20,20)
          DrawThemeBackground_(hTheme,hdc,17,1,tr,0)
    StopDrawing()
    CreateImage(42,20,20)
    hdc = StartDrawing(ImageOutput(42))
          SetRect_(tr.RECT,0,0,20,20)
          DrawThemeBackground_(hTheme,hdc,17,2,tr,0)
    StopDrawing() 
    CreateImage(5,20,20)
    hdc = StartDrawing(ImageOutput(5))
          SetRect_(tr.RECT,0,0,20,20)
          DrawThemeBackground_(hTheme,hdc,15,1,tr,0)
    StopDrawing()
    CreateImage(52,20,20)
    hdc = StartDrawing(ImageOutput(52))
          SetRect_(tr.RECT,0,0,20,20)
          DrawThemeBackground_(hTheme,hdc,15,2,tr,0)
    StopDrawing() 
    CreateImage(6,20,20)
    hdc = StartDrawing(ImageOutput(6))
          SetRect_(tr.RECT,0,0,20,20)
          DrawThemeBackground_(hTheme,hdc,21,1,tr,0)
    StopDrawing()
    CreateImage(62,20,20)
    hdc = StartDrawing(ImageOutput(62))
          SetRect_(tr.RECT,0,0,20,20)
          DrawThemeBackground_(hTheme,hdc,21,2,tr,0)
    StopDrawing()
    CloseThemeData_(hTheme)
    CloseLibrary(0)
EndIf

;SystemParametersInfo_(#SPI_GETWORKAREA,0,wr.RECT,0)
ResizeWindow(0,wr\Left + (wr\right-wr\left-WW)/2,wr\top+(wr\bottom-wr\top-WH)/2,WW,WH)

OpenWindow(1,0,0,0,0,"",#PB_Window_BorderLess)
SetWindowColor(1,Color)
SetWindowLongPtr_( WindowID(1), #GWL_HWNDPARENT,WindowID(0))
;Add Border to Window #1
SetWindowLongPtr_(WindowID(1),#GWL_STYLE,GetWindowLongPtr_(WindowID(1),#GWL_STYLE)|#WS_BORDER)

OpenWindow(2,0,0,0,0,"",#PB_Window_BorderLess)
SetWindowColor(2,$E6FCFE)
SetWindowLongPtr_( WindowID(2), #GWL_HWNDPARENT,WindowID(1))
;Add Border to Window #2
SetWindowLongPtr_(WindowID(2),#GWL_STYLE,GetWindowLongPtr_(WindowID(1),#GWL_STYLE)|#WS_BORDER)

SetActiveWindow(0)

UseGadgetList(WindowID(1))
TextGadget(0,0,0,140,24,"**RASHAD**")
SetGadgetFont(0,FontID(0))
SetGadgetColor(0,#PB_Gadget_BackColor,Color)
SetGadgetColor(0,#PB_Gadget_FrontColor,Color ! $FFFFFF)
ImageGadget(1,4,4,40,30,ImageID(0))
If OSVersion() >= #PB_OS_Windows_8 Or (OSVersion() < #PB_OS_Windows_8 And Theme = 0)
    LoadFont(1,"Marlett",12)
    ContainerGadget(2,0,0,90,24,#PB_Container_BorderLess)
        SetClassLongPtr_(GadgetID(2),#GCL_HBRBACKGROUND,GetStockObject_(#NULL_BRUSH))
        TextGadget(3,50,0,45,20,Chr($72),#SS_CENTERIMAGE | #SS_CENTER|#SS_NOTIFY)
        SetGadgetColor(3,#PB_Gadget_BackColor,$1F1FCC)
        SetGadgetColor(3,#PB_Gadget_FrontColor,#White)
        SetGadgetFont(3,FontID(1))
        TextGadget(4,24,0,24,20,Chr($31),#SS_CENTERIMAGE | #SS_CENTER|#SS_NOTIFY)
        SetGadgetColor(4,#PB_Gadget_BackColor,Color)
        SetGadgetFont(4,FontID(1))
        TextGadget(5,0,0,24,20,Chr($30),#SS_CENTER|#SS_NOTIFY)
        SetGadgetColor(5,#PB_Gadget_BackColor,Color)
        SetGadgetFont(5,FontID(1))
    CloseGadgetList()
Else
    ContainerGadget(2,0,0,90,24,#PB_Container_BorderLess)
        SetClassLongPtr_(GadgetID(2),#GCL_HBRBACKGROUND,GetStockObject_(#NULL_BRUSH))
        ImageGadget(3,50,0,24,24,ImageID(3),#BS_FLAT)
        SetWindowTheme_(GadgetID(3), @null.w, @null.w) 
        ImageGadget(4,25,0,24,24,ImageID(4),#BS_FLAT)
        SetWindowTheme_(GadgetID(4), @null.w, @null.w) 
        ImageGadget(5,0,0,24,24,ImageID(5),#BS_FLAT)
        SetWindowTheme_(GadgetID(5), @null.w, @null.w)
    CloseGadgetList()
EndIf

 UseGadgetList(WindowID(2))
 
  If CreateMenu(0, WindowID(2))
    MenuTitle("File")
      MenuItem( 1, "&Load...")
      MenuItem( 2, "Save")
      MenuItem( 3, "Save As...")
      MenuBar()
      OpenSubMenu("Recents")
        MenuItem( 5, "Pure.png")
        MenuItem( 6, "Basic.jpg")
        OpenSubMenu("Even more !")
          MenuItem( 12, "Yeah")
        CloseSubMenu()
        MenuItem( 13, "Rocks.tga")
      CloseSubMenu()
      MenuBar()
      MenuItem( 7, "&Quit")

    MenuTitle("Edition")
      MenuItem( 8, "Cut")
      MenuItem( 9, "Copy")
      MenuItem(10, "Paste")
      
    MenuTitle("?")
      MenuItem(11, "About")
  EndIf  
 
  TextGadget    (20,  10,  10, 300, 20, "ListIcon Standard", #PB_Text_Center)
  ListIconGadget(10,  10,  25, 300, 70, "Column 1", 100)
  TextGadget    (21,  10, 105, 300, 20, "ListIcon with Checkbox", #PB_Text_Center)
  ListIconGadget(11,  10, 120, 300, 70, "Column 1", 100, #PB_ListIcon_CheckBoxes)  ; ListIcon with checkbox
  TextGadget    (22,  10, 200, 300, 20, "ListIcon with Multi-Selection", #PB_Text_Center)
  ListIconGadget(12,  10, 215, 300, 70, "Column 1", 100, #PB_ListIcon_MultiSelect) ; ListIcon with multi-selection
  ; right column
  TextGadget    (23, 330,  10, 300, 20, "ListIcon with separator lines",#PB_Text_Center)
  ListIconGadget(13, 330,  25, 300, 70, "Column 1", 100, #PB_ListIcon_GridLines)
  TextGadget   (24, 330, 105, 300, 20, "ListIcon with FullRowSelect and AlwaysShowSelection",#PB_Text_Center)
  ListIconGadget(14, 330, 120, 300, 70, "Column 1", 100, #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection)
  TextGadget   (25, 330, 200, 300, 20, "ListIcon Standard with large icons",#PB_Text_Center)
  ListIconGadget(15, 330, 220, 300, 65, "", 200,#PB_ListIcon_GridLines)
  For a = 10 To 14            ; add columns to each of the first 5 listicons
    For b = 2 To 4          ; add 3 more columns to each listicon
      AddGadgetColumn(a, b, "Column " + Str(b), 65)
    Next
    For b = 0 To 2          ; add 4 items to each line of the listicons
      AddGadgetItem(a, b, "Item 1"+Chr(10)+"Item 2"+Chr(10)+"Item 3"+Chr(10)+"Item 4")
    Next
  Next
  
  SetGadgetAttribute(15, #PB_ListIcon_DisplayMode, #PB_ListIcon_LargeIcon)
  AddGadgetItem(15, 1, "Picture 1", ImageID(0))
  AddGadgetItem(15, 2, "Picture 2", ImageID(0))

SetWindowCallback(@WndProc())

Repeat
  Select WaitWindowEvent()
      Case #WM_MOUSEMOVE
          If OSVersion() >= #PB_OS_Windows_8 Or (OSVersion() < #PB_OS_Windows_8 And Theme = 0)
            If IsMouseOver(GadgetID(3))
                SetGadgetColor(3,#PB_Gadget_BackColor,$5959E5)
            Else
                SetGadgetColor(3,#PB_Gadget_BackColor,$1F1FCC)
            EndIf
            If IsMouseOver(GadgetID(4))
                SetGadgetColor(4,#PB_Gadget_BackColor,$FE5451)
                SetGadgetColor(4,#PB_Gadget_FrontColor,#White)
            Else
                SetGadgetColor(4,#PB_Gadget_BackColor,Color)
                SetGadgetColor(4,#PB_Gadget_FrontColor,#Black)
            EndIf 
            If IsMouseOver(GadgetID(5))
                SetGadgetColor(5,#PB_Gadget_BackColor,$FE5451)
                SetGadgetColor(5,#PB_Gadget_FrontColor,#White)
            Else
                SetGadgetColor(5,#PB_Gadget_BackColor,Color)
                SetGadgetColor(5,#PB_Gadget_FrontColor,#Black)
            EndIf
          EndIf
          If OSVersion() < #PB_OS_Windows_8 And Theme = 1
            If IsMouseOver(GadgetID(3))
                SetGadgetState(3,ImageID(32))
            Else
                SetGadgetState(3,ImageID(3))
            EndIf
            If IsMouseOver(GadgetID(4)) = 1 And Maxx = 1
                SetGadgetState(4,ImageID(62))
            ElseIf IsMouseOver(GadgetID(4)) = 0 And Maxx = 1
                SetGadgetState(4,ImageID(6))
            ElseIf IsMouseOver(GadgetID(4)) = 1 And Maxx = 0
                SetGadgetState(4,ImageID(42))
            ElseIf IsMouseOver(GadgetID(4)) = 0 And Maxx = 0
                SetGadgetState(4,ImageID(4))
            EndIf
            If IsMouseOver(GadgetID(5))
                SetGadgetState(5,ImageID(52))
            Else
                SetGadgetState(5,ImageID(5))
            EndIf
          EndIf
      
      Case #PB_Event_Menu

        Select EventMenu()  ; To see which menu has been selected

          Case 11 ; About
            MessageRequester("About", "Cool Menu example", 0)
            
          Default
            MessageRequester("Info", "MenuItem: "+Str(EventMenu()), 0)

        EndSelect
      
      Case #PB_Event_Gadget
          Select EventGadget()
          
              Case 3 
                     Quit = 1
;        
              Case 4
                    Select EventType()
                      Case #PB_EventType_LeftClick
                        Maxx ! 1                        
                        If Maxx = 1
                            WX = WindowX(0)
                            WY = WindowY(0)
                            WW = WindowWidth(0)
                            WH = WindowHeight(0)
                            SystemParametersInfo_(#SPI_GETWORKAREA,0,r.RECT,0)                                                         
                            MoveWindow_(WindowID(0),r\left-SB,r\top-SB,r\right-r\left+2*SB,r\bottom-r\top+2*SB,1)
                            If OSVersion() >= #PB_OS_Windows_8 Or (OSVersion() < #PB_OS_Windows_8 And Theme = 0)
                                SetGadgetText(4,Chr($32))
                            Else
                                SetGadgetState(4,ImageID(6))
                            EndIf
                        Else
                            MoveWindow_(WindowID(0),WX,WY,WW,WH,1)
                            If OSVersion() >= #PB_OS_Windows_8 Or (OSVersion() < #PB_OS_Windows_8 And Theme = 0)
                                SetGadgetText(4,Chr($31))
                                SetGadgetColor(4,#PB_Gadget_BackColor,Color)
                                SetGadgetColor(4,#PB_Gadget_FrontColor,#Black)
                            Else
                                SetGadgetState(4,ImageID(4))
                            EndIf
                        EndIf
                    EndSelect                    
   
              Case 5
                    SetWindowState(0,#PB_Window_Minimize)             
   
          EndSelect          
            
  EndSelect 

Until Quit = 1
End

DataSection
balls:
   Data.q $0A1A0A0D474E5089,$524448490D000000,$1E00000028000000,$5CDD5E0000000608,$414449AD090000DD
   Data.q $14507998C5C35854,$D64D98C4C1C71E57,$2B5DAD9B254C5635,$A211A8C49ABB5B5B,$8080821F7DC33D33
   Data.q $D00478231C249440,$31C8088D728880A0,$081103208820A0DC,$97373372E1C870C7,$70E7208CA08DCA22
   Data.q $4DD92549301EDDF8,$FAFDEA7C7F2A5988,$BF7BCDFA7F5EF3D7,$96F979B985B919EE,$8E2DFE6F815AB112
   Data.q $FE4CE16FB174D15F,$616350B1510ADCF9,$9C89EFDC801E417E,$8F7B9EEF99AF8F20,$E689708C7104D91B
   Data.q $5840F1BF1F6446C8,$93CD5305DDFA5028,$09ADCF02DC8FABAB,$8D13BC24042E3742,$ECE4C1EA462FB328
   Data.q $C2C834BF75A9B1A9,$BDC37FA4A0DC82E2,$1B1E1CFF242D8EC1,$9823FFF16CF8BF5A,$7C12B346B6693DB2
   Data.q $92E91079758846DD,$BC432B52A80DBA82,$3FCD83EE6E83CC62,$15ABCDEFA4A0C037,$0E2C35DE79412EB1
   Data.q $AE5060E0716461F3,$D3E8C392557A4577,$ECAEEE60B37FEB47,$61755AF4427DB6B1,$107BAB1E8967AAD0
   Data.q $6A1F68CA56C173E9,$E91EEE757FF77A1F,$155159D3EBE0277A,$57C4B222414C85CC,$67D8B42027E0C896
   Data.q $D0C9F87E33DB302E,$36BC6FB5C824DF86,$06CC7180A983D768,$DD0C6FD26486624D,$2F3110D93E689DD6
   Data.q $A5E74A3ADFF35F9D,$5C8BE79867F941F2,$788990BC420FC090,$797C20DC240473D1,$E2DBAF9E6842E0FD
   Data.q $EFCA0F72DD7F8BE2,$3AE53DBBAB32696F,$31E6834879C5E909,$7EED851A25027C75,$3CAF35B535EABECE
   Data.q $C407DB1D27ECF67B,$D9547A766B2EAD9B,$C1127C738189A7C1,$B1C61C34F80C7873,$1EFB9BD4B0580B42
   Data.q $D2F2D2C1617A6CF5,$80B47E96A6AAA675,$FCCD6CB6BCCD6C82,$2F451EA5605A008E,$F77777274513F14A
   Data.q $3BEB1D27F4A952CD,$56D94E76530D94AB,$44908605A781C2AB,$5A8D0E0B5F238CB4,$9247F47685425038
   Data.q $1F1C1617851ACEA6,$787837B36767971F,$3382B3B0F9C3FC79,$75745070C0E299C3,$AE97FF1F1F16DD73
   Data.q $6C6A787EDFB5AEAE,$704E555CCDEE55EC,$19DF995FB04E7FA8,$A9A4B85D00AF45D3,$E0FB7D138FAC45C3
   Data.q $B2F8C6FBD70C63D6,$75706095EA8708C3,$1617CEDD7EF728E7,$CF4DC82C2C54AEFC,$59E3F32F4F4DCB4C
   Data.q $F7A7B5FCDD6D681B,$D1586B4F338F3CE5,$0D0D392081495DE0,$BCC23CF7C6F889B1,$EE93510EC9B8200F
   Data.q $38AE234B857D8D60,$1DADD1BE2F846ADE,$8E7F059BF8DFEB1A,$A9D1CD7CFF3B7787,$10CB8482102FDCA8
   Data.q $8C888CB71C4227C7,$CD1CB060C0CAB965,$88E1F31B83EC5571,$B8D99D56A70D3899,$704D57E6EC83A666
   Data.q $FF2BE27D9E56767E,$0FC117999A067B1C,$2C591CF44490820C,$20399FD8E79135CB,$A9C49E9EE221B8E4
   Data.q $F5A6E2189305D361,$3EBE262526760767,$5364607F7F22792A,$A0D5A9BCB143AF15,$6DB9D456A755A9AC
   Data.q $7FCBB73FF593D1F0,$A4AD1CDC204FB051,$751C34470BF4B77A,$2C8E78224F849701,$C1CE02E63FA9266E
   Data.q $88B2384EF761702F,$8B4AAE84A2773D41,$967AEA2927A852A0,$5CA9418E99C2BC87,$CDE624CE4F1BC897
   Data.q $7D74BD1E94DFC679,$E0AD31795C999ED8,$28242F5BF0FF5748,$6CC770FB8C31CEC8,$BCD14D0CEA218E99
   Data.q $92335EC1127C14D7,$EBA8E123AB9658E5,$98FCED5836EB7A22,$A992BA09ACD2A54D,$FDA193BEF0798E82
   Data.q $F48CD252B8256901,$AB5C4BC4ABD2114A,$B263271EA0A12210,$22F539CAE27C6C17,$6714145FB4971FC5
   Data.q $3DEA847EB6D36DB1,$83AAAC4168A9E04A,$D12EE9A8741D3536,$A8DA2AB98F222246,$6A110FAFFC902454
   Data.q $95AD6B2B2B343FBA,$2B0918CF135B79CB,$8A942402A5890EAF,$71D9788EFE265090,$14AFBC1E1C891089
   Data.q $F2D4DE5C5435C742,$93AB99B8EC12AFF1,$5D17BBA05A615DB3,$6D0639FD67D08756,$925EE2C8E7C3C73E
   Data.q $C647D4D3C08703AE,$0B5464CFE5B8EDD6,$2E77B98F73D7DF3B,$86F908CDF9A102BD,$3F450A422102908F
   Data.q $73422E7C908040A4,$2EDCF41A6069F01B,$82C571BC7C3EF515,$16D3552DDE3BDB8F,$31A713A3C2B331DF
   Data.q $F2983E1E931671E6,$E596320983E2473C,$72059F7DA14F5C46,$1CBB6538DB86213F,$2BC0A7781987AF82
   Data.q $E6C9E09A379E16A3,$0FE11CCF005B33C1,$6CCAF0CDF3C9F361,$97F5B03E315C7380,$38B82C566C726446
   Data.q $A3BF74CFEED72F3F,$C1B313D27E38BC6B,$BF151A42C64690E1,$D03C276372CB190C,$C2B163A7468865A6
   Data.q $3768891F76F7CE96,$92EC0D527D86CFF0,$3CA9F619B577601B,$FB0F9527BE09A7D8,$72FEC234A7D85CAB
   Data.q $011180F8A5586C2D,$6B93A793F62C53E3,$B63607FAA7075C57,$499FACCC4BA43AD8,$D8B98B161A43CF3D
   Data.q $7B992CA4E1A425E4,$97D7128A02836E62,$ADCD2885FB877871,$23F42E4F8493918E,$CD31061EAA3F436E
   Data.q $4CB05E20C1E58830,$BA20C2E3993E0C9C,$C1285FA81AAC0601,$57799ECBB19763D6,$D4D60B15D7FBD9D4
   Data.q $224C5235EEDBCAD6,$DA4F4FF7740F3854,$9F5312F4E32CC11C,$A126697EDE80C11E,$E52A1461104661DA
   Data.q $E39C5BBEA65A5DB3,$0B5211042D9C7617,$1CA10947286688E5,$B6C4A856989502DD,$B32822D1C72EB491
   Data.q $16FFC1403587A078,$23E8460EC75DBAB6,$B364162B6DEE9DDE,$8D3B67B3DEEF2FD9,$8441094A10DA8E20
   Data.q $37459C40DD267966,$E508ECEB34270B68,$43D3A0863D1A551C,$E2ECDB414BD50469,$A0AB337748A65FFB
   Data.q $528C077251842713,$7BD38C01ED28C1EF,$4E30DD6BDB977A48,$6A4830BB94A30FBD,$3B1F1371E6DC925D
   Data.q $B15F7FBD9DF9BAB3,$232323E58FC7E3E0,$45494F7F3737375F,$C50A541A10429145,$9BB662950F6CC488
   Data.q $74E9F552A547D94A,$4E3607E696B6B2BA,$C3557A37D385146E,$01BC8C1F79999DC9,$9C31F0A9C30C1538
   Data.q $47E64A3453DF258A,$303D3976087F3870,$78E802EF0EC16C4C,$B15B5FC64A1E71A7,$4343471F2166D2E0
   Data.q $73726B7575757243,$62CABDA5A5A6D773,$292D7888888B5EB1,$CAEB1919190FE929,$1F9169696E5ECACA
   Data.q $BAE2AA2AC57D191C,$79E1FB721C13784A,$66A7C29FB7B3824B,$66A7C3BE676AE70A,$18D577809EFF3E1A
   Data.q $DB07729260478B5C,$F5DABD7B3B3E16CF,$346EC6BF6ABD82DB,$B35A8E37852A6B76,$B3CD21127B75E1FB
   Data.q $961EFC25114BE088,$D3F501149E308A40,$B43B62768519CA38,$FB7F25FBDBF1552F,$C2DCCCC22F336F55
   Data.q $BB933467DD25BE4B,$429035F8099CF6A5,$3ED490E75A122922,$E1CCB5C439B6C487,$D9FD833D5EE82912
   Data.q $8BD2D471B43BB08F,$7D7D7D35F9AE4965,$ECE941355C59B2F2,$13883795FC645CAC,$A5D6D303691AE189
   Data.q $2CDE59C59DA970D3,$B3D36723F3D9C9FC,$379C6066AB871669,$A9E0E7B6344B1A01,$87F3D72757468218
   Data.q $BD1515166F969696,$435E489122826AB4,$F52F6549422DFD43,$4D1E92E0B46BB753,$2A4C38C96F749F76
   Data.q $250AF404D6EFB127,$99DEA9A73B5254CF,$169D3A6CDB630977,$925271DB3724C246,$1D826AB0DAD2D2D0
   Data.q $C89B7A7ABAF21D1D,$554D18E7A590690B,$A8F52AFCFFEC4983,$153D4F5311E1097F,$564610E2F4754F55
   Data.q $208D3A68956574E9,$CD1A343E24C1E8E5,$7EB2626268A7EC91,$797979D16F6504D5,$ACACA9BC58585B2F
   Data.q $68F7C35920BC85BC,$A0B54A8D318A5411,$C96B2D6529158413,$66EC9184104E6AFA,$CEEFED4D4D5156C8
   Data.q $566B78F1E27FCECE,$EDEDEF22D9157FF5,$85C2E97FCFCFCB95,$F5F51FC60C18EB0B,$CA45BC68686A37F5
   Data.q $8EB6F243BCCA4DBC,$7570DEB67226CE8E,$AA95EA2A2A3D7D75,$8C6964891235AAAA,$386933A6959100FF
   Data.q $45490000000039A9,$826042AE444E
ballsend:

EndDataSection
Egypt my love
User avatar
Kwai chang caine
Always Here
Always Here
Posts: 5357
Joined: Sun Nov 05, 2006 11:42 pm
Location: Lyon - France

Re: My Special Window (Windows)

Post by Kwai chang caine »

Hi KCC
Next time tell us your configuration
You have right MASTER, i always forget i love W95 :oops:
It's not the first time i search a bug and see it's that the problem :?

That's works perfectly now....
You are the champion of the world !!! :D

Your bubles is very nice, it's a pity to not see it :mrgreen:

Again thanks to sharing this nice windows
Have a very good day 8)
ImageThe happiness is a road...
Not a destination
Post Reply