Workaround for windows
It could be much simpler without Menu
If you like it try to adapt it for your needs
Code: Select all
;#CAPTUREBLT = $40000000
Global hWnd,hhkLLMouse
Procedure MouseHook(nCode, wParam, lParam)
*p.MOUSEHOOKSTRUCT = lParam
If *p\pt\x >= WindowX(0) And *p\pt\x <= (WindowX(0)+WindowWidth(0)) And *p\pt\y >= WindowY(0) And *p\pt\y <= (WindowY(0)+WindowHeight(0))
ResizeWindow(1,0,0,0,0)
SetForegroundWindow_(WindowID(0))
Else
BringWindowToTop_(WindowID(1))
ResizeWindow(1,WindowX(0)-4,WindowY(0)-4,414,340)
EndIf
ProcedureReturn CallNextHookEx_(0, nCode, wParam, lParam)
EndProcedure
OpenWindow(0,0,0,400,300,"",#PB_Window_SystemMenu| #PB_Window_MaximizeGadget| #PB_Window_ScreenCentered)
If CreateMenu(0, WindowID(0))
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
ButtonGadget(1,10,200,80,22,"Test #1")
ButtonGadget(2,10,225,80,22,"Test #2")
DisableGadget(1,1)
DisableGadget(2,1)
Delay(300)
GetWindowRect_(WindowID(0),r.RECT)
hBitmap = CreateImage(0, 418,340)
hdc = StartDrawing(ImageOutput(0))
SelectObject_(hdc, hBitmap)
BitBlt_(hdc, 0,0,418,340, GetDC_(GetDesktopWindow_()), r\left-4, r\top-4, #SRCCOPY);| #CAPTUREBLT)
StopDrawing()
DeleteDC_(hdc)
;SaveImage(0,"e:\imagetest.bmp")
OpenWindow(1,WindowX(0),WindowY(0),400,300,"", #PB_Window_BorderLess)
ImageGadget(3,0,0,418,310,ImageID(0))
DisableGadget(1,0)
DisableGadget(2,0)
hhkLLMouse = SetWindowsHookEx_(#WH_MOUSE_LL, @MouseHook(), GetModuleHandle_(0), 0)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Quit = 1
Case #PB_Event_Gadget
Select EventGadget()
Case 1
Debug "# 1"
Case 2
Debug "# 2"
EndSelect
EndSelect
Until Quit = 1
UnhookWindowsHookEx_(hhkLLMouse)
End
# 2 :
Press START to begin
Code: Select all
#CAPTUREBLT = $40000000
Global hWnd,hhkLLMouse,Run
Procedure MouseHook(nCode, wParam, lParam)
*p.MOUSEHOOKSTRUCT = lParam
If *p\pt\x >= WindowX(0) And *p\pt\x <= (WindowX(0)+WindowWidth(0)) And *p\pt\y >= WindowY(0) And *p\pt\y <= (WindowY(0)+WindowHeight(0))
If IsWindow(1)
CloseWindow(1)
Run = 0
EndIf
SendMessage_(#HWND_BROADCAST, #WM_SYSCOMMAND, #SC_HOTKEY, WindowID(0))
Else
SmartWindowRefresh(0,1)
If Run = 0 And IsImage(0)
Run +1
OpenWindow(1,WindowX(0)-4,WindowY(0)-4,415,340,"", #PB_Window_BorderLess)
ImageGadget(3,0,0,415,310,ImageID(0))
EndIf
SmartWindowRefresh(0,0)
EndIf
ProcedureReturn CallNextHookEx_(0, nCode, wParam, lParam)
EndProcedure
OpenWindow(0,0,0,400,300,"",#PB_Window_SystemMenu| #PB_Window_MaximizeGadget| #PB_Window_ScreenCentered)
If CreateMenu(0, WindowID(0))
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
ButtonGadget(1,10,200,80,22,"START")
ButtonGadget(2,10,225,80,22,"Test #2")
;Delay(300)
hhkLLMouse = SetWindowsHookEx_(#WH_MOUSE_LL, @MouseHook(), GetModuleHandle_(0), 0)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Quit = 1
Case #PB_Event_Gadget
Select EventGadget()
Case 1
GetWindowRect_(WindowID(0),r.RECT)
hBitmap = CreateImage(0, 418,340)
hdc = StartDrawing(ImageOutput(0))
SelectObject_(hdc, hBitmap)
BitBlt_(hdc, 0,0,418,340, GetDC_(GetDesktopWindow_()), r\left-4, r\top-4, #SRCCOPY| #CAPTUREBLT)
StopDrawing()
DeleteDC_(hdc)
Case 2
Debug "# 2"
EndSelect
EndSelect
Until Quit = 1
UnhookWindowsHookEx_(hhkLLMouse)
End
Edit : # 2 bugs fixed for windows 7