Somebody have a sample using FIREIMAGE control with SCROLL?
I was found this code but using GRAPHIC but i not know how adapter to FIREIMAGE control:
#DIM ALL
#INCLUDE "win32API.inc"
GLOBAL hHook???
FUNCTION HookGFXWindow(BYVAL lMsg AS DWORD, BYVAL wParam AS DWORD, BYVAL lParam AS LONG) AS LONG
IF lMsg = %HCBT_CREATEWND THEN ' wParam = handle of Window about to be created
UnhookWindowsHookEx hHook
SetWindowLong wParam, %GWL_STYLE, (GetWindowLong (wParam, %GWL_STYLE) OR %WS_VSCROLL OR %WS_HSCROLL)
END IF
FUNCTION = 0
END FUNCTION
'------------------/HookGFXWindow
FUNCTION GWProc(BYVAL hWnd AS DWORD, BYVAL wMsg AS DWORD, _
BYVAL wParam AS DWORD, BYVAL lParam AS LONG) AS LONG
LOCAL oldProc AS DWORD
STATIC hBmp AS DWORD
STATIC GW AS Rect
STATIC BmpSz, GWSz, siLn AS POINTAPI
STATIC hsi AS SCROLLINFO, vsi AS SCROLLINFO
SELECT CASE AS LONG wMsg
CASE %WM_USER + 1000
GetClientRect hWnd, GW ' Get Graphic Window size
GWSz.x = GW.nRight : GWSz.y = GW.nBottom
hBmp = wParam ' BitMap Handle and Size (passed from PBMain)
BmpSz.x = LO(WORD, lParam) : BmpSz.y = HI(WORD, lParam)
siLn.X = 0.1 * GWSz.x ' 10% of page ' define 'line width' ie move increment
siLn.Y = 0.1 * GWSz.y ' 10% of page
hsi.cbsize = SIZEOF(hsi)
hsi.nMin = 0
hsi.nPage = GWSz.x
hsi.fMask = %SIF_ALL '%SIF_Range Or %SIF_Page
hsi.nMax = BmpSz.x
SetScrollInfo hWnd, %SB_HORZ, hsi, 1 ' initialize Horizontal ScrollInfo structure
vsi = hsi
vsi.nPage = GWSz.y
vsi.nMax = BmpSz.y
SetScrollInfo hWnd, %SB_VERT, vsi, 1 ' initialize Vertical ScrollInfo structure
GRAPHIC ATTACH hWnd, 0
GRAPHIC COPY hBmp, 0, (hsi.nPos, vsi.nPos)-(hsi.nPos + GWSz.x-1, vsi.nPos + GWSz.y-1) TO (0,0)
CASE %WM_HSCROLL
SELECT CASE LO(WORD, wParam)
CASE %SB_LINELEFT : hsi.nPos = hsi.nPos - siLn.X
CASE %SB_LINERIGHT : hsi.nPos = hsi.nPos + siLn.X
CASE %SB_PAGELEFT : hsi.nPos = hsi.nPos - GWSz.x
CASE %SB_PAGERIGHT : hsi.nPos = hsi.nPos + GWSz.x
CASE %SB_LEFT : hsi.nPos = 0
CASE %SB_RIGHT : hsi.nPos = BmpSz.x - GWSz.x
CASE %SB_THUMBTRACK : hsi.nPos = HI(WORD, wParam)
CASE ELSE : EXIT FUNCTION
END SELECT
hsi.nPos = MAX(hsi.nPos, 0): hsi.nPos = MIN(hsi.nPos, BmpSz.x - GWSz.x)
hsi.fMask = %SIF_POS
SetScrollInfo hWnd, %SB_HORZ, hsi, 1
GRAPHIC ATTACH hWnd, 0
GRAPHIC COPY hBmp, 0, (hsi.nPos, vsi.nPos)-(hsi.nPos + GWSz.x-1, vsi.nPos + GWSz.y-1) TO (0,0)
CASE %WM_VSCROLL
SELECT CASE LO(WORD, wParam)
CASE %SB_LINEUP : vsi.nPos = vsi.nPos - siLn.Y
CASE %SB_LINEDOWN : vsi.nPos = vsi.nPos + siLn.Y
CASE %SB_PAGEUP : vsi.nPos = vsi.nPos - GWSz.y
CASE %SB_PAGEDOWN : vsi.nPos = vsi.nPos + GWSz.y
CASE %SB_THUMBTRACK : vsi.nPos = HI(WORD, wParam)
CASE ELSE : EXIT FUNCTION
END SELECT
vsi.nPos = MAX(vsi.nPos, 0): vsi.nPos = MIN(vsi.nPos, BmpSz.y - GWSz.y)
vsi.fMask = %SIF_POS
SetScrollInfo hWnd, %SB_VERT, vsi, 1
GRAPHIC ATTACH hWnd, 0
GRAPHIC COPY hBmp, 0, (hsi.nPos, vsi.nPos)-(hsi.nPos + GWSz.x-1, vsi.nPos + GWSz.y-1) TO (0,0)
CASE %WM_MOUSEWHEEL
LOCAL zDelta AS INTEGER
zDelta = HI(WORD, wParam)
IF (LO(WORD, wParam) AND %MK_CONTROL) = %MK_CONTROL THEN ' horizontal scroll (Ctrl key down)
IF zDelta > 0 THEN ' scroll to the left
SendMessage hWnd, %WM_HSCROLL, MAK(LONG, %SB_LINELEFT, 0), 0
ELSE ' scroll to the right
SendMessage hWnd, %WM_HSCROLL, MAK(LONG, %SB_LINERIGHT, 0), 0
END IF
ELSE ' vertical scroll
IF zDelta > 0 THEN ' scroll upwards
SendMessage hWnd, %WM_VSCROLL, MAK(LONG, %SB_LINEUP, 0), 0
ELSE ' scroll downwards
SendMessage hWnd, %WM_VSCROLL, MAK(LONG, %SB_LINEDOWN, 0), 0
END IF
END IF
END SELECT
oldProc = GetProp (hWnd, "OldGWProc")
FUNCTION = CallWindowProc(oldProc, hWnd, wMsg, wParam, lParam)
END FUNCTION
'------------------/GWProc
FUNCTION PBMAIN() AS LONG
LOCAL BmpSz AS POINTAPI
LOCAL hBmp, hGWin AS DWORD
LOCAL xSize&, ySize&, ImageFile$, nFile&, k$
xSize& = 400 : ySize& = 400 ' Graphic Window size
ImageFile$ = "C:\sample.bmp" ' <<- select an image bigger than the window for scrolling to work.
nFile& = FREEFILE
OPEN ImageFile$ FOR BINARY ACCESS READ AS nFile& ' get the size of the image
GET #nFile&, 19, BmpSz.x
GET #nFile&, 23, BmpSz.y
CLOSE nFile&
' Create a Graphic Bitmap and load the image
GRAPHIC BITMAP LOAD ImageFile$, BmpSz.x, BmpSz.y TO hBmp
' create a window to display the part image in the screen (hook it to add scrollbars)
hHook = SetWindowsHookEx(%WH_CBT, CODEPTR(HookGFXWindow), GetModuleHandle(""), 0)
GRAPHIC WINDOW "Test - Graphic Window scrolling", 200, 200, ySize&, xSize& TO hGWin
' SubClass the GW to get access to scroll info
SetProp hGWin, "OldGWProc", SetWindowLong(hGWin, %GWL_WNDPROC, CODEPTR(GWProc))
' Pass hBmp and size to GWProc, set up SCROLLINFO structures
PostMessage hGWin, %WM_USER + 1000, hBmp, MAK(LONG, BmpSz.x, BmpSz.y)
GRAPHIC ATTACH hGWin, 0
GRAPHIC PRINT "No bitmap loaded"
WHILE ISWIN(hGWin)
GRAPHIC INKEY$ TO k$ ' Capture arrow keys etc
SELECT CASE LEN(k$)
CASE 0 ' No keys pressed
DIALOG DOEVENTS
CASE 1 ' ASCII Key pressed
IF k$ = $ESC OR k$="q" OR k$="Q" THEN
EXIT LOOP
END IF
CASE 2 ' Extended key pressed - NB not number pad *
LOCAL vScroll??, hScroll??, wScrollNotify??
SELECT CASE ASC(RIGHT$(k$,1))
CASE 72 : vScroll = 1 : hScroll = 0 : wScrollNotify = %SB_LINEUP ' Up Arrow
CASE 80 : vScroll = 1 : hScroll = 0 : wScrollNotify = %SB_LINEDOWN ' Down arrow
CASE 73 : vScroll = 1 : hScroll = 0 : wScrollNotify = %SB_PAGEUP ' Page up *
CASE 81 : vScroll = 1 : hScroll = 0 : wScrollNotify = %SB_PAGEDOWN ' Page down *
CASE 77 : hScroll = 1 : vScroll = 0 : wScrollNotify = %SB_LINERIGHT ' Right arrow
CASE 75 : hScroll = 1 : vScroll = 0 : wScrollNotify = %SB_LINELEFT ' Left arrow
CASE 71 : hScroll = 1 : vScroll = 0 : wScrollNotify = %SB_LEFT ' Home *
CASE 79 : hScroll = 1 : vScroll = 0 : wScrollNotify = %SB_RIGHT ' End *
END SELECT
IF vScroll THEN SendMessage(hGWin, %WM_VSCROLL, MAK(LONG, wScrollNotify, 0), 0)
IF hScroll THEN SendMessage(hGWin, %WM_HSCROLL, MAK(LONG, wScrollNotify, 0), 0)
END SELECT
WEND
RemoveProp hGWin, "OldGWroc"
GRAPHIC ATTACH hBmp, 0
GRAPHIC BITMAP END
END FUNCTION
Israel
No, this control has not scroll features, but Paul is going to add a dedicated graphic control to Firefly using my graphic control. It is resizable, stretchable and scrollable (scrollbars appear and disappear as needed) and GDI+ aware.
A little example:
' ########################################################################################
' Microsoft Windows
' File: CW_GraphCtxSkeleton.pbtpl
' Contents: Template - CWindow Graphic Control Skeleton
' Compilers: PBWIN 10.02+, PBCC 6.02+
' Headers: Windows API headers 2.03+
' Copyright (c) 2011 Jose Roca. Freeware. Use at your own risk.
' THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
' EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
' MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.
' ########################################################################################
#COMPILE EXE
#DIM ALL
%UNICODE = 1
' // Header files for imported files
%USEGRAPHCTX = 1
#INCLUDE ONCE "CWindow.inc" ' // CWindow class
%IDC_GRCTX = 1001
' ========================================================================================
' Main
' ========================================================================================
FUNCTION WinMain (BYVAL hInstance AS DWORD, BYVAL hPrevInstance AS DWORD, BYVAL lpszCmdLine AS WSTRINGZ PTR, BYVAL nCmdShow AS LONG) AS LONG
' // Set process DPI aware
IF AfxGetWindowsVersion => 6 THEN SetProcessDPIAware
' // Create an instance of the CWindow class
LOCAL pWindow AS IWindow
pWindow = CLASS "CWindow"
IF ISNOTHING(pWindow) THEN EXIT FUNCTION
' // Create the main window
pWindow.CreateWindow(%NULL, "CWindow Graphic Control Skeleton", 0, 0, 0, 0, 0, 0, CODEPTR(WindowProc))
' // Set the client size
pWindow.SetClientSize 600, 350
' // Center the window
pWindow.CenterWindow
' // Add a GDI+ aware graphic control
LOCAL hCtl AS DWORD
hCtl = pWindow.AddGraphCtx(pWindow.hwnd, %IDC_GRCTX, "", 0, 0, pWindow.ClientWidth, pWindow.ClientHeight)
SetFocus hCtl
' // Capture the desktop window and display it in the control
LOCAL hBitmap AS DWORD
hBitmap = AfxCaptureDesktopWindow
GraphCtx_SetVirtualBufferSize(hCtl, AfxGetBitmapWidth(hBitmap), AfxGetBitmapHeight(hBitmap))
AfxDrawBitmap(GraphCtx_GetDc(hCtl), 0, 0, hBitmap)
DeleteObject hBitmap
' // Default message pump (you can replace it with your own)
pWindow.DoEvents(nCmdShow)
END FUNCTION
' ========================================================================================
' ========================================================================================
' Main callback function.
' ========================================================================================
FUNCTION WindowProc (BYVAL hwnd AS DWORD, BYVAL uMsg AS DWORD, BYVAL wParam AS DWORD, BYVAL lParam AS LONG) AS LONG
STATIC hInstance AS DWORD ' // Instance handle
STATIC lpc AS CREATESTRUCT PTR ' // Pointer to the creation parameters
STATIC pWindow AS IWindow ' // Reference to the IWindow interface
SELECT CASE uMsg
CASE %WM_CREATE
' // Pointer to the creation parameters
lpc = lParam
' // Instance handle
hInstance = @lpc.hInstance
' // Get a reference to the IWindow interface from the CREATESTRUCT structure
pWindow = CWindow_GetObjectFromCreateStruct(lParam)
EXIT FUNCTION
CASE %WM_COMMAND
SELECT CASE LO(WORD, wParam)
CASE %IDCANCEL
' // If the Escape key has been pressed...
IF HI(WORD, wParam) = %BN_CLICKED THEN
' // ... close the application by sending a WM_CLOSE message
SendMessage hwnd, %WM_CLOSE, 0, 0
END IF
END SELECT
CASE %WM_SIZE
' // If the window isn't minimized, resize it
IF wParam <> %SIZE_MINIMIZED THEN
pWindow.MoveWindow GetDlgItem(hwnd, %IDC_GRCTX), 0, 0, pWindow.ClientWidth, pWindow.ClientHeight, %TRUE
END IF
CASE %WM_DESTROY
' // End the application
PostQuitMessage 0
EXIT FUNCTION
END SELECT
' // Pass unprocessed messages to Windows
FUNCTION = DefWindowProc(hwnd, uMsg, wParam, lParam)
END FUNCTION
' ========================================================================================
Hey thats nice Jose! Where can i learn more about your control?
In the help file for my headers. It has been available for years.
Thanks Jose...you control es very nice...
Only I have a question...where I can catch message for capture a region or select a portion of image and sent to clipboard ?
I put this code into of WindowProc but I can't catch this messages:
' Microsoft Windows
' File: CW_GraphCtxSkeleton.pbtpl
' Contents: Template - CWindow Graphic Control Skeleton
' Compilers: PBWIN 10.02+, PBCC 6.02+
' Headers: Windows API headers 2.03+
' Copyright (c) 2011 Jose Roca. Freeware. Use at your own risk.
' THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
' EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
' MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.
' ########################################################################################
#COMPILE EXE
#DIM ALL
%UNICODE = 1
' // Header files for imported files
%USEGRAPHCTX = 1
#INCLUDE ONCE "CWindow.inc" ' // CWindow class
%IDC_GRCTX = 1001
' ========================================================================================
' Main
' ========================================================================================
FUNCTION WINMAIN (BYVAL hInstance AS DWORD, BYVAL hPrevInstance AS DWORD, BYVAL lpszCmdLine AS WSTRINGZ PTR, BYVAL nCmdShow AS LONG) AS LONG
' // Set process DPI aware
IF AfxGetWindowsVersion => 6 THEN SetProcessDPIAware
' // Create an instance of the CWindow class
LOCAL pWindow AS IWindow
pWindow = CLASS "CWindow"
IF ISNOTHING(pWindow) THEN EXIT FUNCTION
' // Create the main window
pWindow.CreateWindow(%NULL, "CWindow Graphic Control Skeleton", 0, 0, 0, 0, 0, 0, CODEPTR(WindowProc))
' // Set the client size
pWindow.SetClientSize 600, 350
' // Center the window
pWindow.CenterWindow
' // Add a GDI+ aware graphic control
LOCAL hCtl AS DWORD
hCtl = pWindow.AddGraphCtx(pWindow.hwnd, %IDC_GRCTX, "", 0, 0, pWindow.ClientWidth, pWindow.ClientHeight)
SetFocus hCtl
LOCAL hBitmap AS DWORD
'hBitmap = AfxCaptureDesktopWindow
LOCAL BmpSz AS POINTAPI
LOCAL hBmp, hGWin AS DWORD
LOCAL xSize&, ySize&, ImageFile$, nFile&, k$
xSize& = 400 : ySize& = 400 ' Graphic Window size
ImageFile$ = "C:\fotosel\anei_magdalena.bmp" ' <<- select an image bigger than the window for scrolling to work.
nFile& = FREEFILE
OPEN ImageFile$ FOR BINARY ACCESS READ AS nFile& ' get the size of the image
GET #nFile&, 19, BmpSz.x
GET #nFile&, 23, BmpSz.y
CLOSE nFile&
' Create a Graphic Bitmap and load the image
hBitmap = LoadImage( 0, IMAGEFILE$ + CHR$(0), 0, BMPSZ.X,BMPSZ.Y, %LR_LOADFROMFILE)
GraphCtx_SetVirtualBufferSize(hCtl, AfxGetBitmapWidth(hBitmap), AfxGetBitmapHeight(hBitmap))
AfxDrawBitmap(GraphCtx_GetDc(hCtl), 0, 0, hBitmap)
DeleteObject hBitmap
' // Default message pump (you can replace it with your own)
pWindow.DoEvents(nCmdShow)
END FUNCTION
' ========================================================================================
%IDM_CLIPBOARD = 1001
%IDM_PRINTER = 1002
%IDM_CANCEL = 1003
' ========================================================================================
' Main callback function.
' ========================================================================================
FUNCTION WindowProc (BYVAL hwnd AS DWORD, BYVAL uMsg AS DWORD, BYVAL wParam AS DWORD, BYVAL lParam AS LONG) AS LONG
LOCAL hWndRC AS Rect
LOCAL newRC AS Rect
LOCAL Current AS POINTAPI
LOCAL nWidth AS LONG
LOCAL nHeight AS LONG
LOCAL hMemDC AS LONG
LOCAL hBmpx AS LONG
LOCAL hBmpOld AS LONG
LOCAL PopupMenu AS DWORD
LOCAL lRet AS LONG
LOCAL hDC_Printer AS DWORD
LOCAL Window_Y AS LONG
LOCAL Printer_Y AS LONG
LOCAL Multiplier AS DOUBLE
STATIC DrawnOnce AS LONG
STATIC Drawing AS LONG
STATIC Start AS POINTAPI
STATIC OldRC AS Rect
LOCAL rc AS Rect
LOCAL pt AS POINTAPI
LOCAL hDC AS LONG
LOCAL i AS LONG
LOCAL PS AS PAINTSTRUCT
LOCAL result AS LONG
STATIC hInstance AS DWORD ' // Instance handle
STATIC lpc AS CREATESTRUCT PTR ' // Pointer to the creation parameters
STATIC pWindow AS IWindow ' // Reference to the IWindow interface
SELECT CASE uMsg
CASE %WM_CREATE
' // Pointer to the creation parameters
lpc = lParam
' // Instance handle
hInstance = @lpc.hInstance
' // Get a reference to the IWindow interface from the CREATESTRUCT structure
pWindow = CWindow_GetObjectFromCreateStruct(lParam)
EXIT FUNCTION
CASE %WM_LBUTTONDOWN
SetCapture HWND
Start.x=LOINT(LPARAM)
Start.y=HIINT(LPARAM)
Drawing=%TRUE
CASE %WM_MOUSEMOVE
IF ISTRUE(Drawing) THEN
hDC=GetDC(HWND)
IF ISTRUE(DrawnOnce) THEN
DrawFocusRect hDC, oldRC
END IF
Current.x=LOINT(LPARAM)
Current.y=HIINT(LPARAM)
IF Current.x<=Start.x THEN
rc.nLeft=Current.x
rc.nRight=Start.x
ELSE
rc.nLeft=Start.x
rc.nRight=Current.x
END IF
IF Current.y<=Start.y THEN
rc.nTop=Current.y
rc.nBottom=Start.y
ELSE
rc.nTop=Start.y
rc.nBottom=Current.y
END IF
GetClientRect HWND, hWndRC
IF rc.nLeft<hWndRC.nLeft THEN rc.nLeft=hWndRC.nLeft
IF rc.nTop<hWndRC.nTop THEN rc.nTop=hWndRC.nTop
IF rc.nRight>hWndRC.nRight THEN rc.nRight=hWndRC.nRight
IF rc.nBottom>hWndRC.nBottom THEN rc.nBottom=hWndRC.nBottom
DrawFocusRect hDC, rc
TYPE SET oldRC=rc
DrawnOnce=%TRUE
ReleaseDC HWND, hDC
END IF
CASE %WM_LBUTTONUP
IF ISTRUE(Drawing) THEN
hDC=GetDC(HWND)
DrawFocusRect hDC, oldRC
nWidth=oldRC.nRight-oldRC.nLeft
nHeight=oldRC.nBottom-oldRC.nTop
hMemDC=CreateCompatibleDC(hDC)
hBmpx=CreateCompatibleBitmap(hDC, nWidth, nHeight)
hBmpOld=SelectObject(hMemDC, hBmpx)
BitBlt hMemDC, 0, 0, nWidth, nHeight, hDC, oldRC.nLeft, oldRC.nTop, %SRCCOPY
RESET DrawnOnce
RESET Start
RESET OldRC
RESET Drawing
Window_Y=GetDeviceCaps(hDC, %LOGPIXELSY)
pt.x=LOINT(LPARAM)
pt.y=HIINT(LPARAM)
MapWindowPoints HWND, %HWND_DESKTOP, pt, 1
PopupMenu=CreatePopupMenu()
InsertMenu PopupMenu, 1, %MF_BYCOMMAND OR %MF_ENABLED, %IDM_CLIPBOARD, "Copiar a Memoria"
InsertMenu PopupMenu, 2, %MF_BYCOMMAND OR %MF_ENABLED, %IDM_PRINTER, "Imprimir"
InsertMenu PopupMenu, 3, %MF_SEPARATOR, 0, "-"
InsertMenu PopupMenu, 4, %MF_BYCOMMAND OR %MF_ENABLED, %IDM_CANCEL, "Cancelar"
lRet=TrackPopupMenuEx(PopupMenu, %TPM_LEFTALIGN OR %TPM_RETURNCMD, pt.x, pt.y, HWND, BYVAL %Null)
DestroyMenu PopupMenu
SELECT CASE lRet
CASE %IDM_CLIPBOARD
IF OpenClipboard(HWND) THEN
EmptyClipboard
SetClipboardData %CF_BITMAP, hBmpx
CloseClipboard
ELSE
MSGBOX "Error opening clipboard.", %MB_ICONERROR, "Copy Screen Section"
END IF
CASE %IDM_PRINTER
XPRINT ATTACH CHOOSE
IF XPRINT$<>"" THEN
XPRINT GET DC TO hDC_Printer
Printer_Y=GetDeviceCaps(hDC_Printer, %LOGPIXELSY)
Multiplier=Printer_Y/Window_Y
StretchBlt hDC_Printer, 0, 0, nWidth*Multiplier, nHeight*Multiplier, hMemDC, 0, 0, nWidth, nHeight, %SRCCOPY
XPRINT FORMFEED
XPRINT CLOSE
END IF
CASE %IDM_CANCEL
' Do Nothing
END SELECT
SelectObject hMemDC, hBmpOld
DeleteDC hMemDC
DeleteObject hBmpx
ReleaseDC HWND, hDC
ReleaseCapture
END IF
CASE %WM_COMMAND
SELECT CASE LO(WORD, wParam)
CASE %IDCANCEL
' // If the Escape key has been pressed...
IF HI(WORD, wParam) = %BN_CLICKED THEN
' // ... close the application by sending a WM_CLOSE message
SendMessage hwnd, %WM_CLOSE, 0, 0
END IF
END SELECT
CASE %WM_SIZE
' // If the window isn't minimized, resize it
IF wParam <> %SIZE_MINIMIZED THEN
pWindow.MoveWindow GetDlgItem(hwnd, %IDC_GRCTX), 0, 0, pWindow.ClientWidth, pWindow.ClientHeight, %TRUE
END IF
CASE %WM_DESTROY
' // End the application
PostQuitMessage 0
EXIT FUNCTION
END SELECT
' // Pass unprocessed messages to Windows
FUNCTION = DefWindowProc(hwnd, uMsg, wParam, lParam)
END FUNCTION
Messages are sent as notification messages:
' // Notification messages
'%NM_CLICK = %NM_FIRST - 2
'%NM_DBLCLK = %NM_FIRST - 3
'%NM_RCLICK = %NM_FIRST - 5
'%NM_RDBLCLK = %NM_FIRST - 6
'%NM_SETFOCUS = %NM_FIRST - 7
'%NM_KILLFOCUS = %NM_FIRST - 8
' // Process them in the main window callback as follows:
'
' CASE %WM_NOTIFY
' LOCAL phdr AS NMHDR PTR
' phdr = lParam
' IF wParam = %IDC_GRCTX THEN
' SELECT CASE @phdr.code
' CASE %NM_CLICK
' ' Left button clicked
' CASE %NM_RCLICK
' ' Right button clicked
' CASE %NM_SETFOCUS
' ' The control has gained focus
' CASE %NM_KILLFOCUS
' ' The control has lost focus
' END SELECT
' END IF
Quote from: Jose Roca on July 29, 2012, 02:17:17 AM
No, this control has not scroll features, but Paul is going to add a dedicated graphic control to Firefly using my graphic control. It is resizable, stretchable and scrollable (scrollbars appear and disappear as needed) and GDI+ aware.
I have most of the new Graphic control implemented. Just need to add support for the notification messages (and ask Haakon nicely for a new ToolBox graphic for the control) :)
I wrote it because the DDT graphic control can't be used wth SDK applicaions. As it is GDIP+ aware, you can use both GDI and GDIP+ with it, so you aren't restricted to use bitmaps. Besides, I have complete reference guides in .chm format for GDI and GDI+. Just forget all these DDT GRAPHIC XXX statements.