Cute Jules!

p.s. BTW, can't take the credit, that belongs to Borje!
Regards,
Jules
CALLBACK FUNCTION LvSubClass SELECT CASE CBMSG CASE %WM_NCPAINT 'something triggered repaint, allow it to happen pbStep = 0 CASE %WM_ERASEBKGND IF pbStep THEN 'prevent repaints during progress FUNCTION = 1 : EXIT FUNCTION ELSE 'but sometimes need to ignore and repaint.. pbStep = 1 END IF END SELECT FUNCTION = CallWindowProc(OldLvProc, CBHNDL, CBMSG, CBWPARAM, CBLPARAM) END FUNCTION
'COLUMN.. the rest.. GetClientRect hListView, rc rc.nLeft = cw1 + cw2 + cw3 'add up column widths and see if we have something left to paint IF rc.nLeft < rc.nRight THEN FillRect @lpdis.hDC, rc, GetSysColorBrush(%COLOR_WINDOW)
' Click in ListView to add items and see action.. #Compile Exe #include "win32api.inc" #include "commctrl.inc" #Resource "c:\pbdll60\samples\tray\tray.pbr" GLOBAL pbStep AS LONG, OldLvProc AS LONG GLOBAL hListView AS LONG %LISTVIEW1 = 100 %MNU_LOAD_DOWNLOADLIST = 500 %MNU_OPTIONS = 501 %MNU_EXIT = 502 %WM_PRINT = &H317 TYPE UrlStruct sURL AS STRING * 512 nProgress AS LONG nSize AS LONG END TYPE GLOBAL gURL() AS UrlStruct '------------------------------------------------------------------------------ Sub LV_AddItem(hListView&, sTitle$, lMask&, lStateMask&, lPos&) Local azItemText As Asciiz * %MAX_PATH Local lvITEM As LV_ITEM azItemText = sTitle$ lvITEM.iImage = 0 lvITEM.iItem = ListView_GetItemCount(hListView) lvITEM.mask = %LVCF_FMT Or %LVCF_WIDTH Or %LVCF_TEXT Or %LVCF_SUBITEM lvITEM.stateMask = lStateMask& lvITEM.pszText = VarPtr(azItemText) lStatus& = ListView_InsertItem (hListView, lvITEM) End Sub '------------------------------------------------------------------------------ Sub LV_CreateColumn(hListView&, sTitle$, lMask&, lWidth&, lPos&) Local azTitle As Asciiz * 25 Local Column As LV_COLUMN azTitle = sTitle$ Column.mask = lMask& Column.fmt = %LVCFMT_LEFT Column.cx = lWidth& Column.pszText = VarPtr(azTitle) ListView_InsertColumn hListView, lPos&, Column End Sub '------------------------------------------------------------------------------ Function LVW_GetSelected(hListView&) As Long ListCount& = ListView_GetItemCount(hListView) For a& = 0 To ListCount& r& = ListView_GetItemState(hListView,a&,%LVIS_FOCUSED) If r& = %LVIS_FOCUSED Then Function = a& Exit Function End If Next End Function '------------------------------------------------------------------------------ FUNCTION GetURL(BYVAL x AS LONG) AS LONG LOCAL I AS LONG, zTxt AS ASCIIZ * 20 sText$ = TRIM$(gURL(x).sURL) & " " & FORMAT$(x) LV_AddItem hListView, BYCOPY sText$, %LVCF_FMT OR %LVCF_WIDTH OR %LVCF_TEXT OR %LVCF_SUBITEM, %LVIS_FOCUSED, 0 pbStep = 1 FOR I = 1 TO 100 zTxt = FORMAT$(I) ListView_SetItemText hListView, x, 1, zTxt SLEEP 20 NEXT 'pbStep = 0 ' ? END FUNCTION '------------------------------------------------------------------------------ SUB AddURL(URL$) STATIC qID& gURL(qID&).sURL = URL$ THREAD CREATE GetUrl(qID&) TO woot& THREAD CLOSE woot& TO woot& INCR qID& END SUB '------------------------------------------------------------------------------ Function WndProc (ByVal hWnd As Long, ByVal wMsg As Long, _ ByVal wParam As Long, ByVal lParam As Long) Export As Long Local rect As rect, zTxt AS ASCIIZ * 260 Local LV_LpLvNm As NM_LISTVIEW Ptr Select Case wMsg Case %WM_NOTIFY Select Case LoWrd(wParam) Case %LISTVIEW1 LV_LPLVNM = lParam Select Case @LV_LPLVNM.HDR.CODE Case %NM_CLICK AddURL "Yoga!" Case %NM_RCLICK 'debug_print "Right Mouse" Case %LVN_COLUMNCLICK 'debug_print "Column Click" End Select End Select Case %WM_CREATE 'Note: must create menu before using GetClientRect.. Menu New Bar To hMenu0& Menu New Popup To hMenu1& Menu Add Popup, hMenu0& ,"&File", hMenu1&, %MF_ENABLED Menu Add String, hMenu1&, "&Load Download List", %MNU_LOAD_DOWNLOADLIST, %MF_ENABLED Menu Add String, hMenu1&, "-", 0, %MF_ENABLED Menu Add String, hMenu1&, "Options", %MNU_OPTIONS, %MF_ENABLED Menu Add String, hMenu1&, "E&xit", %MNU_EXIT, %MF_ENABLED Menu Attach hMenu0&, hWnd GETCLIENTRECT hWnd, rect hListView = CREATEWINDOW ( "SysListView32", _ "", _ %WS_border Or %WS_Child Or %WS_visible Or _ %LVS_Report Or %LVS_SINGLESEL Or %LVS_SHOWSELALWAYS Or %LVS_OWNERDRAWFIXED, _ 0, _ 0, _ rect.nRight - 1, _ rect.nBottom - 1, _ hWnd, _ %LISTVIEW1, _ GETMODULEHANDLE(ByVal 0&), _ %Null ) OldLvProc = SetWindowLong(hListView, %GWL_WNDPROC, CODEPTR(LvSubClass)) LV_CreateColumn hListView, "Downloading", %LVCF_FMT Or %LVCF_WIDTH Or %LVCF_TEXT Or %LVCF_SUBITEM, 300, 0 LV_CreateColumn hListView, "Progress", %LVCF_FMT Or %LVCF_WIDTH Or %LVCF_TEXT Or %LVCF_SUBITEM, 200, 1 LV_CreateColumn hListView, "Size", %LVCF_FMT Or %LVCF_WIDTH Or %LVCF_TEXT Or %LVCF_SUBITEM, 100, 2 '================================================ Case %WM_DRAWITEM IF wParam = %LISTVIEW1 THEN LOCAL cw1 AS LONG, cw2 AS LONG, cw3 AS LONG, tw AS LONG, rc AS RECT LOCAL lpdis AS DRAWITEMSTRUCT PTR lpdis = lParam SELECT CASE @lpdis.itemAction CASE %ODA_DRAWENTIRE, %ODA_SELECT 'GET COORDINATES GetClientRect hListView, rc tw = rc.nRight 'total width ListView_GetItemRect hListView, @lpdis.itemID, rc, %LVIR_BOUNDS 'for item height cw1 = ListView_GetColumnWidth(hListView, 0) 'width, column 1 cw2 = ListView_GetColumnWidth(hListView, 1) 'width, column 2 cw3 = ListView_GetColumnWidth(hListView, 2) 'width, column 3 rc.nLeft = 0 : rc.nRight = cw1 'first column rect 'CLEAR BACKGROUND IF (@lpdis.itemState AND %ODS_SELECTED) THEN FillRect @lpdis.hDC, rc, GetSysColorBrush(%COLOR_HIGHLIGHT) SetBkColor @lpdis.hDC, GetSysColor(%COLOR_HIGHLIGHT) SetTextColor @lpdis.hDC, GetSysColor(%COLOR_HIGHLIGHTTEXT) ELSE FillRect @lpdis.hDC, rc, GetSysColorBrush(%COLOR_WINDOW) SetBkColor @lpdis.hDC, GetSysColor(%COLOR_WINDOW) SetTextColor @lpdis.hDC, GetSysColor(%COLOR_WINDOWTEXT) END IF 'COLUMN 1 zTxt = "" CALL ListView_GetItemText(hListView, @lpdis.itemID, 0, zTxt, SIZEOF(zTxt)) rc.nLeft = 2 'don't want text far out in corner DrawText @lpdis.hDC, zTxt, LEN(zTxt), rc, %DT_LEFT OR %DT_SINGLELINE OR %DT_VCENTER 'DRAW FOCUSRECT ON FIRST COLUMN (if control has focus) IF (@lpdis.itemState AND %ODS_SELECTED) AND GetFocus = hListView THEN 'if selected + focus rc.nLeft = 0 CALL DrawFocusRect(@lpdis.hDC, rc) 'draw focus rectangle END IF 'COLUMN 2 - PROGRESSBAR zTxt = "" CALL ListView_GetItemText(hListView, @lpdis.itemID, 1, zTxt, SIZEOF(zTxt)) IF VAL(zTxt) > 0 THEN rc.nLeft = cw1 rc.nRight = cw1 + cw2 * VAL(zTxt) / 100 FillRect @lpdis.hDC, rc, GetSysColorBrush(%COLOR_3DFACE) DrawEdge @lpdis.hDC, rc, %BDR_RAISEDINNER, %BF_RECT rc.nLeft = rc.nRight rc.nRight = cw1 + cw2 FillRect @lpdis.hDC, rc, GetSysColorBrush(%COLOR_WINDOW) rc.nLeft = cw1 SetBkMode @lpdis.hDC, %TRANSPARENT SetTextColor @lpdis.hDC, %BLUE zTxt = zTxt + "%" INCR rc.nTop DrawText @lpdis.hDC, zTxt, LEN(zTxt), rc, %DT_CENTER OR %DT_SINGLELINE OR %DT_VCENTER DECR rc.nTop END IF 'COLUMN 3 zTxt = "" CALL ListView_GetItemText(hListView, @lpdis.itemID, 2, zTxt, SIZEOF(zTxt)) rc.nLeft = rc.nRight rc.nRight = cw1 + cw2 + cw3 FillRect @lpdis.hDC, rc, GetSysColorBrush(%COLOR_WINDOW) IF LEN(zTxt) THEN DrawText @lpdis.hDC, zTxt, LEN(zTxt), rc, %DT_LEFT OR %DT_SINGLELINE OR %DT_VCENTER END IF 'COLUMN.. the rest.. rc.nLeft = rc.nRight rc.nRight = tw IF rc.nLeft < rc.nRight THEN FillRect @lpdis.hDC, rc, GetSysColorBrush(%COLOR_WINDOW) 'DRAW FOCUSRECT AROUND SELECTED ITEM (if control has focus) (moved up for test..) 'IF (@lpdis.itemState AND %ODS_SELECTED) AND GetFocus = hListView THEN 'if selected + focus ' CALL DrawFocusRect(@lpdis.hDC, @lpdis.rcItem) 'draw focus rectangle 'END IF FUNCTION = %TRUE : EXIT FUNCTION END SELECT END IF Case %WM_DESTROY IF OldLvProc THEN SETWINDOWLONG hListView, %GWL_WNDPROC, OldLvProc POSTQUITMESSAGE 0 End Select Function = DEFWINDOWPROC(hWnd, wMsg, wParam, lParam) End Function '------------------------------------------------------------------------------ Function WinMain (ByVal hInstance As Long, _ ByVal hPrevInstance As Long, _ lpCmdLine As Asciiz Ptr, _ ByVal iCmdShow As Long) As Long Local Msg As tagMsg Local wndclass As WndClassEx Local szClassName As Asciiz * 80 Local hWnd As Long Local CC1 As INIT_COMMON_CONTROLSEX REDIM gURL(10000) AS UrlStruct CC1.dwSize=SizeOf(CC1) CC1.dwICC=%ICC_WIN95_CLASSES INITCOMMONCONTROLSEX CC1 szClassName = "SDK_LISTVIEW" wndclass.cbSize = SizeOf(WndClass) wndclass.style = %CS_HREDRAW Or %CS_VREDRAW wndclass.lpfnWndProc = CodePtr( WndProc ) wndclass.cbClsExtra = 0 wndclass.cbWndExtra = 0 wndclass.hInstance = hInstance wndclass.hIcon = LOADICON( hInstance, "FACE1") wndclass.hCursor = LOADCURSOR( %NULL, ByVal %IDC_ARROW ) wndclass.hbrBackground = GETSTOCKOBJECT( %GRAY_BRUSH ) wndclass.lpszMenuName = %NULL wndclass.lpszClassName = VarPtr( szClassName ) wndclass.hIconSm = 0 REGISTERCLASSEX wndclass hWnd = CREATEWINDOWEX(%WS_EX_TOPMOST, _ szClassName, _ "WebGet 1.0", _ %DS_CENTER _ Or %WS_CAPTION _ Or %WS_SYSMENU , _ 0, _ 0, _ 700&, _ 300&, _ %NULL, _ %NULL, _ hInstance, _ ByVal %NULL) SHOWWINDOW hWnd, iCmdShow UPDATEWINDOW hWnd While IsTrue GETMESSAGE(Msg, %NULL, 0, 0) TRANSLATEMESSAGE msg DISPATCHMESSAGE msg Wend Sleep 1 Function = msg.wParam End Function '------------------------------------------------------------------------------ CALLBACK FUNCTION LvSubClass SELECT CASE CBMSG CASE %WM_NCPAINT 'something triggered repaint, allow it to happen pbStep = 0 CASE %WM_ERASEBKGND IF pbStep THEN 'prevent repaints during progress FUNCTION = 1 : EXIT FUNCTION ELSE 'but sometimes need to ignore and repaint.. pbStep = 1 END IF END SELECT FUNCTION = CallWindowProc(OldLvProc, CBHNDL, CBMSG, CBWPARAM, CBLPARAM) END FUNCTION
FUNCTION GetURL(BYVAL x AS LONG) AS LONG LOCAL I AS LONG sText$ = TRIM$(gURL(x).sURL) & " " & FORMAT$(x) LV_AddItem hListView&, BYCOPY sText$, %LVCF_FMT OR %LVCF_WIDTH OR %LVCF_TEXT OR %LVCF_SUBITEM, %LVIS_FOCUSED, 0 FOR I = 1 TO 100 DrawProgress hListView&, I, x SLEEP 1000 CALL CtrlRedraw(hListView&, 1) NEXT END FUNCTION SUB AddURL(URL$) STATIC qID& gURL(qID&).sURL = URL$ THREAD CREATE GetUrl(qID&) TO woot& INCR qID& END SUB FUNCTION CtrlRedraw( BYVAL hWnd AS LONG, BYVAL rDraw AS LONG) AS LONG CALL SendMessage(hWnd, %WM_SETREDRAW, rDraw, 0) IF rDraw THEN InvalidateRect hWnd, BYVAL %NULL, 0 UpdateWindow hWnd END IF END FUNCTION
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' Eliminate unnecessary macros for COMMCTRL.INC '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ %NOANIMATE = 1 %NOBUTTON = 1 %NOCOMBO = 1 %NODATETIMEPICK = 1 %NODRAGLIST = 1 %NOEDIT = 1 %NOFLATSBAPIS = 1 %NOHEADER = 1 %NOHOTKEY = 1 %NOIMAGELIST = 1 %NOIPADDRESS = 1 %NOLIST = 1 '%NOLISTVIEW = 1 %NOMONTHCAL = 1 %NONATIVEFONTCTL = 1 %NOPAGESCROLLER = 1 %NOPROGRESS = 1 %NOREBAR = 1 %NOSTATUSBAR = 1 %NOTABCONTROL = 1 %NOTOOLBAR = 1 %NOTOOLTIPS = 1 %NOTRACKBAR = 1 %NOTREEVIEW = 1 %NOUPDOWN = 1 '------------------------------------------------------------------------------ #COMPILE EXE #INCLUDE "WIN32API.INC" #INCLUDE "COMMCTRL.INC" #RESOURCE "c:\pbdll60\samples\tray\tray.pbr" '------------------------------------------------------------------------------ %LISTVIEW1 = 100 %MNU_LOAD_DOWNLOADLIST = 500 %MNU_OPTIONS = 501 %MNU_EXIT = 502 GLOBAL hListView& '------------------------------------------------------------------------------ TYPE UrlStruct sURL AS STRING * 512 nProgress AS LONG nSize AS LONG END TYPE DECLARE SUB DrawProgress(hListView&, Percentage&, lPos&) GLOBAL gURL() AS UrlStruct SUB LV_AddItem(hListView&, sTitle$, lMask&, lStateMask&, lPos&) LOCAL azItemText AS ASCIIZ * %MAX_PATH LOCAL lvITEM AS LV_ITEM azItemText = sTitle$ lvITEM.iImage = 0 lvITEM.iItem = ListView_GetItemCount(hListView&) lvITEM.mask = %LVCF_FMT OR %LVCF_WIDTH OR %LVCF_TEXT OR %LVCF_SUBITEM lvITEM.stateMask = lStateMask& lvITEM.pszText = VARPTR(azItemText) lStatus& = ListView_InsertItem (hListView&, lvITEM) END SUB SUB LV_CreateColumn(hListView&, sTitle$, lMask&, lWidth&, lPos&) LOCAL azTitle AS ASCIIZ * 25 LOCAL Column AS LV_COLUMN azTitle = sTitle$ Column.mask = lMask& Column.fmt = %LVCFMT_LEFT Column.cx = lWidth& Column.pszText = VARPTR(azTitle) ListView_InsertColumn hListView&, lPos&, Column END SUB FUNCTION LVW_GetSelected(hListView&) AS LONG ListCount& = ListView_GetItemCount(hListView&) FOR a& = 0 TO ListCount& r& = ListView_GetItemState(hListView&,a&,%LVIS_FOCUSED) IF r& = %LVIS_FOCUSED THEN FUNCTION = a& EXIT FUNCTION END IF NEXT END FUNCTION '------------------------------------------------------------------------------ FUNCTION GetURL(BYVAL x AS LONG) AS LONG LOCAL I AS LONG sText$ = TRIM$(gURL(x).sURL) & " " & FORMAT$(x) LV_AddItem hListView&, BYCOPY sText$, %LVCF_FMT OR %LVCF_WIDTH OR %LVCF_TEXT OR %LVCF_SUBITEM, %LVIS_FOCUSED, 0 FOR I = 1 TO 100 DrawProgress hListView&, I, x SLEEP 1000 NEXT END FUNCTION SUB AddURL(URL$) STATIC qID& gURL(qID&).sURL = URL$ THREAD CREATE GetUrl(qID&) TO woot& INCR qID& END SUB SUB DrawProgress(hListView&, Percentage&, lPos&) LOCAL cw1 AS LONG, cw2 AS LONG, tmpRect AS RECT, zTxt AS ASCIIZ * 20 LOCAL hDcLV AS LONG hDcLv = GetDC(hListView&) 'lPos& = LVW_GetSelected(hListView&) ListView_GetItemRect hListView&, lPos&, tmpRect, %LVIR_BOUNDS 'for column height cw1 = ListView_GetColumnWidth(hListView&, 0) 'width of column 1 cw2 = ListView_GetColumnWidth(hListView&, 1) 'width of column 2 tmpRect.nLeft = cw1 tmpRect.nRight = cw1 + cw2 * Percentage& / 100 FillRect hDcLv, tmpRect, GetSysColorBrush(%COLOR_3DFACE) tmpRect.nLeft = tmpRect.nRight tmpRect.nRight = cw1 + cw2 FillRect hDcLv, tmpRect, GetSysColorBrush(%COLOR_WINDOW) tmpRect.nLeft = cw1 SetBkMode hDcLv, %TRANSPARENT SetTextColor hDcLv, %BLUE zTxt = FORMAT$(Percentage&) + "%" DrawText hDcLv, zTxt, LEN(zTxt), tmpRect, %DT_CENTER OR %DT_SINGLELINE OR %DT_VCENTER ReleaseDc hListView&, hDcLv END SUB FUNCTION WndProc (BYVAL hWnd AS LONG, BYVAL wMsg AS LONG, _ BYVAL wParam AS LONG, BYVAL lParam AS LONG) EXPORT AS LONG LOCAL rect AS rect LOCAL LV_LpLvNm AS NM_LISTVIEW PTR 'STATIC hListView& SELECT CASE wMsg CASE %WM_NOTIFY SELECT CASE LOWRD(wParam) CASE %LISTVIEW1 LV_LPLVNM = lParam SELECT CASE @LV_LPLVNM.HDR.CODE CASE %NM_CLICK AddURL "Yoga!" CASE %NM_RCLICK 'debug_print "Right Mouse" CASE %LVN_COLUMNCLICK 'debug_print "Column Click" END SELECT END SELECT CASE %WM_CREATE GETCLIENTRECT hWnd, rect hListView& = CREATEWINDOW ( "SysListView32", _ "", _ %WS_border OR %WS_Child OR %WS_visible OR _ %LVS_Report OR %LVS_SINGLESEL OR %LVS_SHOWSELALWAYS, _ 0, _ 0, _ rect.nRight - 1, _ rect.nBottom - 50, _ hWnd, _ %LISTVIEW1, _ GETMODULEHANDLE(BYVAL 0&), _ %Null ) LV_CreateColumn hListView&, "Downloading", %LVCF_FMT OR %LVCF_WIDTH OR %LVCF_TEXT OR %LVCF_SUBITEM, 300, 0 LV_CreateColumn hListView&, "Progress", %LVCF_FMT OR %LVCF_WIDTH OR %LVCF_TEXT OR %LVCF_SUBITEM, 200, 1 LV_CreateColumn hListView&, "Size", %LVCF_FMT OR %LVCF_WIDTH OR %LVCF_TEXT OR %LVCF_SUBITEM, 100, 2 ' LV_AddItem hListView&, "File1", %LVCF_FMT OR %LVCF_WIDTH OR %LVCF_TEXT OR %LVCF_SUBITEM, %LVIS_FOCUSED, 0 ' LV_AddItem hListView&, "File1", %LVCF_FMT OR %LVCF_WIDTH OR %LVCF_TEXT OR %LVCF_SUBITEM, %LVIS_FOCUSED, 0 ' LV_AddItem hListView&, "File2", %LVCF_FMT OR %LVCF_WIDTH OR %LVCF_TEXT OR %LVCF_SUBITEM, %LVIS_FOCUSED, 0 ' LV_AddItem hListView&, "File3", %LVCF_FMT OR %LVCF_WIDTH OR %LVCF_TEXT OR %LVCF_SUBITEM, %LVIS_FOCUSED, 0 ' LV_AddItem hListView&, "File4", %LVCF_FMT OR %LVCF_WIDTH OR %LVCF_TEXT OR %LVCF_SUBITEM, %LVIS_FOCUSED, 0 ' LV_AddItem hListView&, "File5", %LVCF_FMT OR %LVCF_WIDTH OR %LVCF_TEXT OR %LVCF_SUBITEM, %LVIS_FOCUSED, 0 ' LV_AddItem hListView&, "File6", %LVCF_FMT OR %LVCF_WIDTH OR %LVCF_TEXT OR %LVCF_SUBITEM, %LVIS_FOCUSED, 0 ' LV_AddItem hListView&, "File7", %LVCF_FMT OR %LVCF_WIDTH OR %LVCF_TEXT OR %LVCF_SUBITEM, %LVIS_FOCUSED, 0 MENU NEW BAR TO hMenu0& MENU NEW POPUP TO hMenu1& MENU ADD POPUP, hMenu0& ,"&File", hMenu1&, %MF_ENABLED MENU ADD STRING, hMenu1&, "&Load Download List", %MNU_LOAD_DOWNLOADLIST, %MF_ENABLED MENU ADD STRING, hMenu1&, "-", 0, %MF_ENABLED MENU ADD STRING, hMenu1&, "Options", %MNU_OPTIONS, %MF_ENABLED MENU ADD STRING, hMenu1&, "E&xit", %MNU_EXIT, %MF_ENABLED MENU ATTACH hMenu0&, hWnd CASE %WM_DESTROY POSTQUITMESSAGE 0 END SELECT FUNCTION = DEFWINDOWPROC(hWnd, wMsg, wParam, lParam) END FUNCTION FUNCTION WINMAIN (BYVAL hInstance AS LONG, _ BYVAL hPrevInstance AS LONG, _ lpCmdLine AS ASCIIZ PTR, _ BYVAL iCmdShow AS LONG) AS LONG LOCAL Msg AS tagMsg LOCAL wndclass AS WndClassEx LOCAL szClassName AS ASCIIZ * 80 LOCAL hWnd AS LONG LOCAL CC1 AS INIT_COMMON_CONTROLSEX REDIM gURL(0 TO 10000) AS UrlStruct CC1.dwSize=SIZEOF(CC1) CC1.dwICC=%ICC_WIN95_CLASSES INITCOMMONCONTROLSEX CC1 szClassName = "SDK_LISTVIEW" wndclass.cbSize = SIZEOF(WndClass) wndclass.style = %CS_HREDRAW OR %CS_VREDRAW wndclass.lpfnWndProc = CODEPTR( WndProc ) wndclass.cbClsExtra = 0 wndclass.cbWndExtra = 0 wndclass.hInstance = hInstance wndclass.hIcon = LOADICON( hInstance, "FACE1") wndclass.hCursor = LOADCURSOR( %NULL, BYVAL %IDC_ARROW ) wndclass.hbrBackground = GETSTOCKOBJECT( %GRAY_BRUSH ) wndclass.lpszMenuName = %NULL wndclass.lpszClassName = VARPTR( szClassName ) wndclass.hIconSm = 0 REGISTERCLASSEX wndclass hWnd = CREATEWINDOWEX(%WS_EX_TOPMOST, _ szClassName, _ "WebGet 1.0", _ %DS_CENTER _ OR %WS_CAPTION _ OR %WS_SYSMENU , _ 0, _ 0, _ 700&, _ 300&, _ %NULL, _ %NULL, _ hInstance, _ BYVAL %NULL) SHOWWINDOW hWnd, iCmdShow UPDATEWINDOW hWnd WHILE ISTRUE GETMESSAGE(Msg, %NULL, 0, 0) TRANSLATEMESSAGE msg DISPATCHMESSAGE msg WEND SLEEP 1 FUNCTION = msg.wParam END FUNCTION
#Compile Exe #include "win32api.inc" #include "commctrl.inc" #Resource "c:\pbdll60\samples\tray\tray.pbr" %LISTVIEW1 = 100 %PROGRESSBAR1 = 101 %MNU_LOAD_DOWNLOADLIST = 500 %MNU_OPTIONS = 501 %MNU_EXIT = 502 %WM_PRINT = &H317 Sub LV_AddItem(hListView&, sTitle$, lMask&, lStateMask&, lPos&) Local azItemText As Asciiz * %MAX_PATH Local lvITEM As LV_ITEM azItemText = sTitle$ lvITEM.iImage = 0 lvITEM.iItem = ListView_GetItemCount(hListView&) lvITEM.mask = %LVCF_FMT Or %LVCF_WIDTH Or %LVCF_TEXT Or %LVCF_SUBITEM lvITEM.stateMask = lStateMask& lvITEM.pszText = VarPtr(azItemText) lStatus& = ListView_InsertItem (hListView&, lvITEM) End Sub Sub LV_CreateColumn(hListView&, sTitle$, lMask&, lWidth&, lPos&) Local azTitle As Asciiz * 25 Local Column As LV_COLUMN azTitle = sTitle$ Column.mask = lMask& Column.fmt = %LVCFMT_LEFT Column.cx = lWidth& Column.pszText = VarPtr(azTitle) ListView_InsertColumn hListView&, lPos&, Column End Sub Function LVW_GetSelected(hListView&) As Long ListCount& = ListView_GetItemCount(hListView&) For a& = 0 To ListCount& r& = ListView_GetItemState(hListView&,a&,%LVIS_FOCUSED) If r& = %LVIS_FOCUSED Then Function = a& Exit Function End If Next End Function Sub DrawProgress( hListView& , hProgressBar&, Percentage&, x&, y&, xx&, yy&, style&) Local tmpRect As RECT Local pt As POINTAPI tmpRect.nLeft = 0 lPos& = LVW_GetSelected(hListView&) woot& = SendMessage(hListView&, %LVM_GETITEMRECT, lPos&, VarPtr(tmpRect)) Dim hMemDC As Long ' BitBlt GetDC(hListView&), 0, tmpRect.nTop + 1, 2, tmpRect.nBottom - tmpRect.nTop, hBitMap, 0, 0, %SRCCOPY End Sub Function WndProc (ByVal hWnd As Long, ByVal wMsg As Long, _ ByVal wParam As Long, ByVal lParam As Long) Export As Long Local rect As rect Local LV_LpLvNm As NM_LISTVIEW Ptr Static hListView& Static hProgressBar& Select Case wMsg Case %WM_NOTIFY Select Case LoWrd(wParam) Case %LISTVIEW1 LV_LPLVNM = lParam Select Case @LV_LPLVNM.HDR.CODE Case %NM_CLICK DrawProgress hListView&, hProgressBar&, 0, 0, 0, 0, 0, 0 Case %NM_RCLICK 'debug_print "Right Mouse" Case %LVN_COLUMNCLICK 'debug_print "Column Click" End Select End Select Case %WM_CREATE GETCLIENTRECT hWnd, rect hProgressBar& = CREATEWINDOW ( "msctls_progress32", _ "", _ %WS_CHILD, _ 200, _ 300, _ 100, _ 10, _ hWnd, _ %PROGRESSBAR1, _ GETMODULEHANDLE(ByVal 0&), _ %Null ) sendmessage hListView&, %PBM_SETPOS, 75, 0 hListView& = CREATEWINDOW ( "SysListView32", _ "", _ %WS_border Or %WS_Child Or %WS_visible Or _ %LVS_Report Or %LVS_SINGLESEL Or %LVS_SHOWSELALWAYS Or %LVS_OWNERDRAWFIXED, _ 0, _ 0, _ rect.nRight - 1, _ rect.nBottom - 1, _ hWnd, _ %LISTVIEW1, _ GETMODULEHANDLE(ByVal 0&), _ %Null ) LV_CreateColumn hListView&, "Downloading", %LVCF_FMT Or %LVCF_WIDTH Or %LVCF_TEXT Or %LVCF_SUBITEM, 300, 0 LV_CreateColumn hListView&, "Progress", %LVCF_FMT Or %LVCF_WIDTH Or %LVCF_TEXT Or %LVCF_SUBITEM, 200, 1 LV_CreateColumn hListView&, "Size", %LVCF_FMT Or %LVCF_WIDTH Or %LVCF_TEXT Or %LVCF_SUBITEM, 100, 2 LV_AddItem hListView&, "File1", %LVCF_FMT Or %LVCF_WIDTH Or %LVCF_TEXT Or %LVCF_SUBITEM, %LVIS_FOCUSED, 0 LV_AddItem hListView&, "File1", %LVCF_FMT Or %LVCF_WIDTH Or %LVCF_TEXT Or %LVCF_SUBITEM, %LVIS_FOCUSED, 0 LV_AddItem hListView&, "File2", %LVCF_FMT Or %LVCF_WIDTH Or %LVCF_TEXT Or %LVCF_SUBITEM, %LVIS_FOCUSED, 0 LV_AddItem hListView&, "File3", %LVCF_FMT Or %LVCF_WIDTH Or %LVCF_TEXT Or %LVCF_SUBITEM, %LVIS_FOCUSED, 0 LV_AddItem hListView&, "File4", %LVCF_FMT Or %LVCF_WIDTH Or %LVCF_TEXT Or %LVCF_SUBITEM, %LVIS_FOCUSED, 0 LV_AddItem hListView&, "File5", %LVCF_FMT Or %LVCF_WIDTH Or %LVCF_TEXT Or %LVCF_SUBITEM, %LVIS_FOCUSED, 0 LV_AddItem hListView&, "File6", %LVCF_FMT Or %LVCF_WIDTH Or %LVCF_TEXT Or %LVCF_SUBITEM, %LVIS_FOCUSED, 0 LV_AddItem hListView&, "File7", %LVCF_FMT Or %LVCF_WIDTH Or %LVCF_TEXT Or %LVCF_SUBITEM, %LVIS_FOCUSED, 0 Menu New Bar To hMenu0& Menu New Popup To hMenu1& Menu Add Popup, hMenu0& ,"&File", hMenu1&, %MF_ENABLED Menu Add String, hMenu1&, "&Load Download List", %MNU_LOAD_DOWNLOADLIST, %MF_ENABLED Menu Add String, hMenu1&, "-", 0, %MF_ENABLED Menu Add String, hMenu1&, "Options", %MNU_OPTIONS, %MF_ENABLED Menu Add String, hMenu1&, "E&xit", %MNU_EXIT, %MF_ENABLED Menu Attach hMenu0&, hWnd '================================================ Case %WM_DRAWITEM Dim hDC As Long Dim hBitmapDC As Long Dim hBitMap As Long Dim hOldBitMap As Long Dim pDIS As DRAWITEMSTRUCT Ptr pDIS =lParam hDC = GetDC( %HWND_DESKTOP ) hBitmapDC = CreateCompatibleDC( hDC ) hBitMap = CreateCompatibleBitmap( hDC, 100, 100 ) hOldBitMap = SelectObject( hBitMapDC, hBitMap ) SendMessage hProgressBar&, %WM_PRINT, hBitMapDC, %PRF_CLIENT Or %PRF_ERASEBKGND Or %PRF_NONCLIENT BitBlt @pDIS.hDC _ , @pDIS.rcItem.nLeft, @pDIS.rcItem.nTop, @pDIS.rcItem.nRight - @pDIS.rcItem.nLeft, @pDIS.rcItem.nBottom - @pDIS.rcItem.nTop _ , hBitMapDC _ , 0, 0 _ , %SRCCOPY SelectObject hBitMapDC, hOldBitmap DeleteObject hBitmap DeleteDC hBitMapDC ReleaseDC %HWND_DESKTOP, hDC Case %WM_DESTROY POSTQUITMESSAGE 0 End Select Function = DEFWINDOWPROC(hWnd, wMsg, wParam, lParam) End Function Function WinMain (ByVal hInstance As Long, _ ByVal hPrevInstance As Long, _ lpCmdLine As Asciiz Ptr, _ ByVal iCmdShow As Long) As Long Local Msg As tagMsg Local wndclass As WndClassEx Local szClassName As Asciiz * 80 Local hWnd As Long Local CC1 As INIT_COMMON_CONTROLSEX CC1.dwSize=SizeOf(CC1) CC1.dwICC=%ICC_WIN95_CLASSES INITCOMMONCONTROLSEX CC1 szClassName = "SDK_LISTVIEW" wndclass.cbSize = SizeOf(WndClass) wndclass.style = %CS_HREDRAW Or %CS_VREDRAW wndclass.lpfnWndProc = CodePtr( WndProc ) wndclass.cbClsExtra = 0 wndclass.cbWndExtra = 0 wndclass.hInstance = hInstance wndclass.hIcon = LOADICON( hInstance, "FACE1") wndclass.hCursor = LOADCURSOR( %NULL, ByVal %IDC_ARROW ) wndclass.hbrBackground = GETSTOCKOBJECT( %GRAY_BRUSH ) wndclass.lpszMenuName = %NULL wndclass.lpszClassName = VarPtr( szClassName ) wndclass.hIconSm = 0 REGISTERCLASSEX wndclass hWnd = CREATEWINDOWEX(%WS_EX_TOPMOST, _ szClassName, _ "WebGet 1.0", _ %DS_CENTER _ Or %WS_CAPTION _ Or %WS_SYSMENU , _ 0, _ 0, _ 700&, _ 300&, _ %NULL, _ %NULL, _ hInstance, _ ByVal %NULL) SHOWWINDOW hWnd, iCmdShow UPDATEWINDOW hWnd While IsTrue GETMESSAGE(Msg, %NULL, 0, 0) TRANSLATEMESSAGE msg DISPATCHMESSAGE msg Wend Sleep 1 Function = msg.wParam End Function
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' Eliminate unnecessary macros for COMMCTRL.INC '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ %NOANIMATE = 1 %NOBUTTON = 1 %NOCOMBO = 1 %NODATETIMEPICK = 1 %NODRAGLIST = 1 %NOEDIT = 1 %NOFLATSBAPIS = 1 %NOHEADER = 1 %NOHOTKEY = 1 %NOIMAGELIST = 1 %NOIPADDRESS = 1 %NOLIST = 1 '%NOLISTVIEW = 1 %NOMONTHCAL = 1 %NONATIVEFONTCTL = 1 %NOPAGESCROLLER = 1 %NOPROGRESS = 1 %NOREBAR = 1 %NOSTATUSBAR = 1 %NOTABCONTROL = 1 %NOTOOLBAR = 1 %NOTOOLTIPS = 1 %NOTRACKBAR = 1 %NOTREEVIEW = 1 %NOUPDOWN = 1 '------------------------------------------------------------------------------ #COMPILE EXE #INCLUDE "WIN32API.INC" #INCLUDE "COMMCTRL.INC" #RESOURCE "c:\pbdll60\samples\tray\tray.pbr" '------------------------------------------------------------------------------ %LISTVIEW1 = 100 %MNU_LOAD_DOWNLOADLIST = 500 %MNU_OPTIONS = 501 %MNU_EXIT = 502 '------------------------------------------------------------------------------ SUB LV_AddItem(hListView&, sTitle$, lMask&, lStateMask&, lPos&) LOCAL azItemText AS ASCIIZ * %MAX_PATH LOCAL lvITEM AS LV_ITEM azItemText = sTitle$ lvITEM.iImage = 0 lvITEM.iItem = ListView_GetItemCount(hListView&) lvITEM.mask = %LVCF_FMT OR %LVCF_WIDTH OR %LVCF_TEXT OR %LVCF_SUBITEM lvITEM.stateMask = lStateMask& lvITEM.pszText = VARPTR(azItemText) lStatus& = ListView_InsertItem (hListView&, lvITEM) END SUB SUB LV_CreateColumn(hListView&, sTitle$, lMask&, lWidth&, lPos&) LOCAL azTitle AS ASCIIZ * 25 LOCAL Column AS LV_COLUMN azTitle = sTitle$ Column.mask = lMask& Column.fmt = %LVCFMT_LEFT Column.cx = lWidth& Column.pszText = VARPTR(azTitle) ListView_InsertColumn hListView&, lPos&, Column END SUB FUNCTION LVW_GetSelected(hListView&) AS LONG ListCount& = ListView_GetItemCount(hListView&) FOR a& = 0 TO ListCount& r& = ListView_GetItemState(hListView&,a&,%LVIS_FOCUSED) IF r& = %LVIS_FOCUSED THEN FUNCTION = a& EXIT FUNCTION END IF NEXT END FUNCTION SUB DrawProgress(hListView&, Percentage&) LOCAL cw1 AS LONG, cw2 AS LONG, tmpRect AS RECT, zTxt AS ASCIIZ * 20 LOCAL hDcLV AS LONG hDcLv = GetDC(hListView&) lPos& = LVW_GetSelected(hListView&) ListView_GetItemRect hListView&, lPos&, tmpRect, %LVIR_BOUNDS 'for column height cw1 = ListView_GetColumnWidth(hListView&, 0) 'width of column 1 cw2 = ListView_GetColumnWidth(hListView&, 1) 'width of column 2 tmpRect.nLeft = cw1 tmpRect.nRight = cw1 + cw2 * Percentage& / 100 FillRect hDcLv, tmpRect, GetSysColorBrush(%COLOR_3DFACE) tmpRect.nLeft = tmpRect.nRight tmpRect.nRight = cw1 + cw2 FillRect hDcLv, tmpRect, GetSysColorBrush(%COLOR_WINDOW) tmpRect.nLeft = cw1 SetBkMode hDcLv, %TRANSPARENT SetTextColor hDcLv, %BLUE zTxt = FORMAT$(Percentage&) + "%" DrawText hDcLv, zTxt, LEN(zTxt), tmpRect, %DT_CENTER OR %DT_SINGLELINE OR %DT_VCENTER ReleaseDc hListView&, hDcLv END SUB FUNCTION WndProc (BYVAL hWnd AS LONG, BYVAL wMsg AS LONG, _ BYVAL wParam AS LONG, BYVAL lParam AS LONG) EXPORT AS LONG LOCAL rect AS rect LOCAL LV_LpLvNm AS NM_LISTVIEW PTR STATIC hListView& SELECT CASE wMsg CASE %WM_NOTIFY SELECT CASE LOWRD(wParam) CASE %LISTVIEW1 LV_LPLVNM = lParam SELECT CASE @LV_LPLVNM.HDR.CODE CASE %NM_CLICK STATIC I AS LONG FOR I = 1 TO 100 DrawProgress hListView&, I SLEEP 20 NEXT beep CASE %NM_RCLICK 'debug_print "Right Mouse" CASE %LVN_COLUMNCLICK 'debug_print "Column Click" END SELECT END SELECT CASE %WM_CREATE GETCLIENTRECT hWnd, rect hListView& = CREATEWINDOW ( "SysListView32", _ "", _ %WS_border OR %WS_Child OR %WS_visible OR _ %LVS_Report OR %LVS_SINGLESEL OR %LVS_SHOWSELALWAYS, _ 0, _ 0, _ rect.nRight - 1, _ rect.nBottom - 1, _ hWnd, _ %LISTVIEW1, _ GETMODULEHANDLE(BYVAL 0&), _ %Null ) LV_CreateColumn hListView&, "Downloading", %LVCF_FMT OR %LVCF_WIDTH OR %LVCF_TEXT OR %LVCF_SUBITEM, 300, 0 LV_CreateColumn hListView&, "Progress", %LVCF_FMT OR %LVCF_WIDTH OR %LVCF_TEXT OR %LVCF_SUBITEM, 200, 1 LV_CreateColumn hListView&, "Size", %LVCF_FMT OR %LVCF_WIDTH OR %LVCF_TEXT OR %LVCF_SUBITEM, 100, 2 LV_AddItem hListView&, "File1", %LVCF_FMT OR %LVCF_WIDTH OR %LVCF_TEXT OR %LVCF_SUBITEM, %LVIS_FOCUSED, 0 LV_AddItem hListView&, "File1", %LVCF_FMT OR %LVCF_WIDTH OR %LVCF_TEXT OR %LVCF_SUBITEM, %LVIS_FOCUSED, 0 LV_AddItem hListView&, "File2", %LVCF_FMT OR %LVCF_WIDTH OR %LVCF_TEXT OR %LVCF_SUBITEM, %LVIS_FOCUSED, 0 LV_AddItem hListView&, "File3", %LVCF_FMT OR %LVCF_WIDTH OR %LVCF_TEXT OR %LVCF_SUBITEM, %LVIS_FOCUSED, 0 LV_AddItem hListView&, "File4", %LVCF_FMT OR %LVCF_WIDTH OR %LVCF_TEXT OR %LVCF_SUBITEM, %LVIS_FOCUSED, 0 LV_AddItem hListView&, "File5", %LVCF_FMT OR %LVCF_WIDTH OR %LVCF_TEXT OR %LVCF_SUBITEM, %LVIS_FOCUSED, 0 LV_AddItem hListView&, "File6", %LVCF_FMT OR %LVCF_WIDTH OR %LVCF_TEXT OR %LVCF_SUBITEM, %LVIS_FOCUSED, 0 LV_AddItem hListView&, "File7", %LVCF_FMT OR %LVCF_WIDTH OR %LVCF_TEXT OR %LVCF_SUBITEM, %LVIS_FOCUSED, 0 MENU NEW BAR TO hMenu0& MENU NEW POPUP TO hMenu1& MENU ADD POPUP, hMenu0& ,"&File", hMenu1&, %MF_ENABLED MENU ADD STRING, hMenu1&, "&Load Download List", %MNU_LOAD_DOWNLOADLIST, %MF_ENABLED MENU ADD STRING, hMenu1&, "-", 0, %MF_ENABLED MENU ADD STRING, hMenu1&, "Options", %MNU_OPTIONS, %MF_ENABLED MENU ADD STRING, hMenu1&, "E&xit", %MNU_EXIT, %MF_ENABLED MENU ATTACH hMenu0&, hWnd CASE %WM_DESTROY POSTQUITMESSAGE 0 END SELECT FUNCTION = DEFWINDOWPROC(hWnd, wMsg, wParam, lParam) END FUNCTION FUNCTION WINMAIN (BYVAL hInstance AS LONG, _ BYVAL hPrevInstance AS LONG, _ lpCmdLine AS ASCIIZ PTR, _ BYVAL iCmdShow AS LONG) AS LONG LOCAL Msg AS tagMsg LOCAL wndclass AS WndClassEx LOCAL szClassName AS ASCIIZ * 80 LOCAL hWnd AS LONG LOCAL CC1 AS INIT_COMMON_CONTROLSEX CC1.dwSize=SIZEOF(CC1) CC1.dwICC=%ICC_WIN95_CLASSES INITCOMMONCONTROLSEX CC1 szClassName = "SDK_LISTVIEW" wndclass.cbSize = SIZEOF(WndClass) wndclass.style = %CS_HREDRAW OR %CS_VREDRAW wndclass.lpfnWndProc = CODEPTR( WndProc ) wndclass.cbClsExtra = 0 wndclass.cbWndExtra = 0 wndclass.hInstance = hInstance wndclass.hIcon = LOADICON( hInstance, "FACE1") wndclass.hCursor = LOADCURSOR( %NULL, BYVAL %IDC_ARROW ) wndclass.hbrBackground = GETSTOCKOBJECT( %GRAY_BRUSH ) wndclass.lpszMenuName = %NULL wndclass.lpszClassName = VARPTR( szClassName ) wndclass.hIconSm = 0 REGISTERCLASSEX wndclass hWnd = CREATEWINDOWEX(%WS_EX_TOPMOST, _ szClassName, _ "WebGet 1.0", _ %DS_CENTER _ OR %WS_CAPTION _ OR %WS_SYSMENU , _ 0, _ 0, _ 700&, _ 300&, _ %NULL, _ %NULL, _ hInstance, _ BYVAL %NULL) SHOWWINDOW hWnd, iCmdShow UPDATEWINDOW hWnd WHILE ISTRUE GETMESSAGE(Msg, %NULL, 0, 0) TRANSLATEMESSAGE msg DISPATCHMESSAGE msg WEND SLEEP 1 FUNCTION = msg.wParam END FUNCTION
#COMPILE EXE #INCLUDE "win32api.inc" #INCLUDE "commctrl.inc" #RESOURCE "c:\pbdll60\samples\tray\tray.pbr" %LISTVIEW1 = 100 %PROGRESSBAR1 = 101 %MNU_LOAD_DOWNLOADLIST = 500 %MNU_OPTIONS = 501 %MNU_EXIT = 502 SUB LV_AddItem(hListView&, sTitle$, lMask&, lStateMask&, lPos&) LOCAL azItemText AS ASCIIZ * %MAX_PATH LOCAL lvITEM AS LV_ITEM azItemText = sTitle$ lvITEM.iImage = 0 lvITEM.iItem = ListView_GetItemCount(hListView&) lvITEM.mask = %LVCF_FMT OR %LVCF_WIDTH OR %LVCF_TEXT OR %LVCF_SUBITEM lvITEM.stateMask = lStateMask& lvITEM.pszText = VARPTR(azItemText) lStatus& = ListView_InsertItem (hListView&, lvITEM) END SUB SUB LV_CreateColumn(hListView&, sTitle$, lMask&, lWidth&, lPos&) LOCAL azTitle AS ASCIIZ * 25 LOCAL Column AS LV_COLUMN azTitle = sTitle$ Column.mask = lMask& Column.fmt = %LVCFMT_LEFT Column.cx = lWidth& Column.pszText = VARPTR(azTitle) ListView_InsertColumn hListView&, lPos&, Column END SUB FUNCTION LVW_GetSelected(hListView&) AS LONG ListCount& = ListView_GetItemCount(hListView&) FOR a& = 0 TO ListCount& r& = ListView_GetItemState(hListView&,a&,%LVIS_FOCUSED) IF r& = %LVIS_FOCUSED THEN FUNCTION = a& EXIT FUNCTION END IF NEXT END FUNCTION SUB DrawProgress(hListView&,hProgressBar&, Percentage&, x&, y&, xx&, yy&, style&) LOCAL tmpRect AS RECT LOCAL pt AS POINTAPI tmpRect.nLeft = 0 lPos& = LVW_GetSelected(hListView&) woot& = SendMessage(hListView&, %LVM_GETITEMRECT, lPos&, VARPTR(tmpRect)) BitBlt GetDC(hListView&), 0, tmpRect.nTop + 1, 2, tmpRect.nBottom - tmpRect.nTop, GetDC(hProgressBar&), 0, 0, %SRCCOPY END SUB FUNCTION WndProc (BYVAL hWnd AS LONG, BYVAL wMsg AS LONG, _ BYVAL wParam AS LONG, BYVAL lParam AS LONG) EXPORT AS LONG LOCAL rect AS rect LOCAL LV_LpLvNm AS NM_LISTVIEW PTR STATIC hListView& STATIC hProgressBar& SELECT CASE wMsg CASE %WM_NOTIFY SELECT CASE LOWRD(wParam) CASE %LISTVIEW1 LV_LPLVNM = lParam SELECT CASE @LV_LPLVNM.HDR.CODE CASE %NM_CLICK DrawProgress hListView&, hProgressBar&, 0, 0, 0, 0, 0, 0 CASE %NM_RCLICK 'debug_print "Right Mouse" CASE %LVN_COLUMNCLICK 'debug_print "Column Click" END SELECT END SELECT CASE %WM_CREATE GETCLIENTRECT hWnd, rect hProgressBar& = CREATEWINDOW ( "msctls_progress32", _ "", _ %WS_CHILD, _ 200, _ 300, _ 100, _ 10, _ hWnd, _ %PROGRESSBAR1, _ GETMODULEHANDLE(BYVAL 0&), _ %Null ) sendmessage hListView&, %PBM_SETPOS, 75, 0 hListView& = CREATEWINDOW ( "SysListView32", _ "", _ %WS_border OR %WS_Child OR %WS_visible OR _ %LVS_Report OR %LVS_SINGLESEL OR %LVS_SHOWSELALWAYS, _ 0, _ 0, _ rect.nRight - 1, _ rect.nBottom - 1, _ hWnd, _ %LISTVIEW1, _ GETMODULEHANDLE(BYVAL 0&), _ %Null ) LV_CreateColumn hListView&, "Downloading", %LVCF_FMT OR %LVCF_WIDTH OR %LVCF_TEXT OR %LVCF_SUBITEM, 300, 0 LV_CreateColumn hListView&, "Progress", %LVCF_FMT OR %LVCF_WIDTH OR %LVCF_TEXT OR %LVCF_SUBITEM, 200, 1 LV_CreateColumn hListView&, "Size", %LVCF_FMT OR %LVCF_WIDTH OR %LVCF_TEXT OR %LVCF_SUBITEM, 100, 2 LV_AddItem hListView&, "File1", %LVCF_FMT OR %LVCF_WIDTH OR %LVCF_TEXT OR %LVCF_SUBITEM, %LVIS_FOCUSED, 0 LV_AddItem hListView&, "File1", %LVCF_FMT OR %LVCF_WIDTH OR %LVCF_TEXT OR %LVCF_SUBITEM, %LVIS_FOCUSED, 0 LV_AddItem hListView&, "File2", %LVCF_FMT OR %LVCF_WIDTH OR %LVCF_TEXT OR %LVCF_SUBITEM, %LVIS_FOCUSED, 0 LV_AddItem hListView&, "File3", %LVCF_FMT OR %LVCF_WIDTH OR %LVCF_TEXT OR %LVCF_SUBITEM, %LVIS_FOCUSED, 0 LV_AddItem hListView&, "File4", %LVCF_FMT OR %LVCF_WIDTH OR %LVCF_TEXT OR %LVCF_SUBITEM, %LVIS_FOCUSED, 0 LV_AddItem hListView&, "File5", %LVCF_FMT OR %LVCF_WIDTH OR %LVCF_TEXT OR %LVCF_SUBITEM, %LVIS_FOCUSED, 0 LV_AddItem hListView&, "File6", %LVCF_FMT OR %LVCF_WIDTH OR %LVCF_TEXT OR %LVCF_SUBITEM, %LVIS_FOCUSED, 0 LV_AddItem hListView&, "File7", %LVCF_FMT OR %LVCF_WIDTH OR %LVCF_TEXT OR %LVCF_SUBITEM, %LVIS_FOCUSED, 0 MENU NEW BAR TO hMenu0& MENU NEW POPUP TO hMenu1& MENU ADD POPUP, hMenu0& ,"&File", hMenu1&, %MF_ENABLED MENU ADD STRING, hMenu1&, "&Load Download List", %MNU_LOAD_DOWNLOADLIST, %MF_ENABLED MENU ADD STRING, hMenu1&, "-", 0, %MF_ENABLED MENU ADD STRING, hMenu1&, "Options", %MNU_OPTIONS, %MF_ENABLED MENU ADD STRING, hMenu1&, "E&xit", %MNU_EXIT, %MF_ENABLED MENU ATTACH hMenu0&, hWnd CASE %WM_DESTROY POSTQUITMESSAGE 0 END SELECT FUNCTION = DEFWINDOWPROC(hWnd, wMsg, wParam, lParam) END FUNCTION FUNCTION WINMAIN (BYVAL hInstance AS LONG, _ BYVAL hPrevInstance AS LONG, _ lpCmdLine AS ASCIIZ PTR, _ BYVAL iCmdShow AS LONG) AS LONG LOCAL Msg AS tagMsg LOCAL wndclass AS WndClassEx LOCAL szClassName AS ASCIIZ * 80 LOCAL hWnd AS LONG LOCAL CC1 AS INIT_COMMON_CONTROLSEX CC1.dwSize=SIZEOF(CC1) CC1.dwICC=%ICC_WIN95_CLASSES INITCOMMONCONTROLSEX CC1 szClassName = "SDK_LISTVIEW" wndclass.cbSize = SIZEOF(WndClass) wndclass.style = %CS_HREDRAW OR %CS_VREDRAW wndclass.lpfnWndProc = CODEPTR( WndProc ) wndclass.cbClsExtra = 0 wndclass.cbWndExtra = 0 wndclass.hInstance = hInstance wndclass.hIcon = LOADICON( hInstance, "FACE1") wndclass.hCursor = LOADCURSOR( %NULL, BYVAL %IDC_ARROW ) wndclass.hbrBackground = GETSTOCKOBJECT( %GRAY_BRUSH ) wndclass.lpszMenuName = %NULL wndclass.lpszClassName = VARPTR( szClassName ) wndclass.hIconSm = 0 REGISTERCLASSEX wndclass hWnd = CREATEWINDOWEX(%WS_EX_TOPMOST, _ szClassName, _ "WebGet 1.0", _ %DS_CENTER _ OR %WS_CAPTION _ OR %WS_SYSMENU , _ 0, _ 0, _ 700&, _ 300&, _ %NULL, _ %NULL, _ hInstance, _ BYVAL %NULL) SHOWWINDOW hWnd, iCmdShow UPDATEWINDOW hWnd WHILE ISTRUE GETMESSAGE(Msg, %NULL, 0, 0) TRANSLATEMESSAGE msg DISPATCHMESSAGE msg WEND SLEEP 1 FUNCTION = msg.wParam END FUNCTION
--------------------------------------- Listbox with list of files to process File1 File2 [b]File3[/b] <<<< Current file highlited ---------------------------------------- Label "Now Processing File3" Progressbar "percentage of total files downloaded" or Label "Processing file # 3 of 22 total files" Progressbar "percentage of current file completed"
#Compile Exe Option Explicit #include "win32api.inc" #include "Commctrl.inc" '%PRF_CHECKVISIBLE = &H00000001 '%PRF_NONCLIENT = &H00000002 '%PRF_CLIENT = &H00000004 '%PRF_ERASEBKGND = &H00000008 '%PRF_CHILDREN = &H00000010 '%PRF_OWNED = &H00000020 %WM_PRINT = &H317 CallBack Function DlgProc() As Long Dim a As Long Dim R As Rect Dim PS As PAINTSTRUCT Dim T As String Select Case CbMsg Case %WM_INITDIALOG Control Add "msctls_progress32", CbHndl, 100, "", 10, 10, 100, 10, %WS_CHILD' Or %WS_VISIBLE Control Send CbHndl, 100, %PBM_SETPOS, 50, 0 Case %WM_PAINT BeginPaint CbHndl, PS Control Send CbHndl, 100, %WM_PRINT, PS.hDC, %PRF_CLIENT Or %PRF_ERASEBKGND Or %PRF_NONCLIENT EndPaint CbHndl, PS Function = 1 Exit Function Case %WM_COMMAND Case %WM_SIZE Case %WM_SETCURSOR Case %WM_DESTROY End Select End Function Function WinMain ( ByVal hCurInstance As Long, _ ByVal hPrevInstance As Long, _ lpszCmdLine As Asciiz Ptr, _ ByVal nCmdShow As Long ) As Long Dim a As Long Dim hDlg As Long Dim Result As Long Dialog New 0, "What you see is not the progressbar but a painting of it.",,, 240, 180 _ , %WS_OVERLAPPED _ Or %WS_SYSMENU _ Or %WS_MINIMIZEBOX _ Or %WS_MAXIMIZEBOX _ Or %WS_THICKFRAME _ Or %WS_CLIPSIBLINGS _ Or %WS_CLIPCHILDREN _ To hDlg If hDlg = 0 Then Exit Function Dialog Show Modal hDlg Call DlgProc To Result Function = 1 End Function
We process personal data about users of our site, through the use of cookies and other technologies, to deliver our services, and to analyze site activity. For additional details, refer to our Privacy Policy.
By clicking "I AGREE" below, you agree to our Privacy Policy and our personal data processing and cookie practices as described therein. You also acknowledge that this forum may be hosted outside your country and you consent to the collection, storage, and processing of your data in the country where this forum is hosted.
Leave a comment: