Code:
#PBFORMS CREATED V1.51 #COMPILE EXE #DIM ALL '------------------------------------------------------------------------------ ' ** Includes ** '------------------------------------------------------------------------------ #PBFORMS BEGIN INCLUDES %USEMACROS = 1 #IF NOT %DEF(%WINAPI) #INCLUDE "WIN32API.INC" #ENDIF #IF NOT %DEF(%COMMCTRL_INC) #INCLUDE "COMMCTRL.INC" #ENDIF #INCLUDE "PBForms.INC" #PBFORMS END INCLUDES '------------------------------------------------------------------------------ '------------------------------------------------------------------------------ ' ** Constants ** '------------------------------------------------------------------------------ #PBFORMS BEGIN CONSTANTS %IDD_DIALOG1 = 101 %TRV_SYSTREEVIEW32_1 = 1001 #PBFORMS END CONSTANTS '------------------------------------------------------------------------------ '------------------------------------------------------------------------------ ' ** Declarations ** '------------------------------------------------------------------------------ DECLARE CALLBACK FUNCTION ShowDIALOG1Proc() DECLARE FUNCTION SampleTreeViewInsertItem(BYVAL hTree AS DWORD, BYVAL hParent _ AS DWORD, sItem AS STRING) AS LONG DECLARE FUNCTION ShowDIALOG1(BYVAL hParent AS DWORD) AS LONG #PBFORMS DECLARATIONS '------------------------------------------------------------------------------ '------------------------------------------------------------------------------ ' ** Main Application Entry Point ** '------------------------------------------------------------------------------ FUNCTION PBMAIN() PBFormsInitComCtls (%ICC_WIN95_CLASSES OR %ICC_DATE_CLASSES OR _ %ICC_INTERNET_CLASSES) ShowDIALOG1 %HWND_DESKTOP END FUNCTION '------------------------------------------------------------------------------ '------------------------------------------------------------------------------ ' ** CallBacks ** '------------------------------------------------------------------------------ CALLBACK FUNCTION ShowDIALOG1Proc() LOCAL tvi AS TV_ITEM LOCAL tvmsg AS NMTVCUSTOMDRAW PTR LOCAL lRet AS LONG LOCAL rc AS RECT LOCAL lRet2 AS LONG LOCAL szBuf AS ASCIIZ*2048 SELECT CASE AS LONG CBMSG CASE %WM_INITDIALOG ' Initialization handler CASE %WM_NOTIFY tvMsg = CBLPARAM IF (@tvmsg.nmcd.hdr.code=%NM_CUSTOMDRAW) AND (@tvmsg.nmcd.hdr.idfrom=%TRV_SYSTREEVIEW32_1) THEN SELECT CASE @tvmsg.nmcd.dwDrawStage CASE %CDDS_PREPAINT FUNCTION=%CDRF_NOTIFYITEMDRAW CASE %CDDS_ITEMPREPAINT lRet=TreeView_GetItemRect(@tvmsg.nmcd.hdr.hwndFrom,@tvmsg.nmcd.dwItemSpec,rc,%TRUE) IF ISTRUE(lRet) THEN tvi.mask=%TVIF_TEXT tvi.cchTextMax=SIZEOF(szBuf) tvi.pszText=VARPTR(szBuf) [email protected] tvi.pszText=VARPTR(szBuf) tvi.cchTextMax=2048 lRet2=TreeView_GetItem(@tvmsg.nmcd.hdr.hwndFrom, tvi) IF ISTRUE(lRet2) THEN IF INSTR(trim$(szBuf),"Grey") THEN IF ((@tvmsg.nmcd.uItemState AND %CDIS_SELECTED)<>%CDIS_SELECTED) THEN @tvmsg.ClrText=%GRAY @tvmsg.ClrTextBk=%WHITE 'RGB(200,0,0) FUNCTION=%CDRF_NEWFONT ELSE FUNCTION=%CDRF_DODEFAULT END IF ELSE FUNCTION=%CDRF_DODEFAULT END IF ELSE FUNCTION=%CDRF_DODEFAULT END IF ELSE FUNCTION=%CDRF_DODEFAULT END IF END SELECT END IF CASE %WM_NCACTIVATE STATIC hWndSaveFocus AS DWORD IF ISFALSE CBWPARAM THEN ' Save control focus hWndSaveFocus = GetFocus() ELSEIF hWndSaveFocus THEN ' Restore control focus SetFocus(hWndSaveFocus) hWndSaveFocus = 0 END IF CASE %WM_COMMAND ' Process control notifications SELECT CASE AS LONG CBCTL CASE %TRV_SYSTREEVIEW32_1 END SELECT END SELECT END FUNCTION '------------------------------------------------------------------------------ '------------------------------------------------------------------------------ ' ** Sample Code ** '------------------------------------------------------------------------------ FUNCTION SampleTreeViewInsertItem(BYVAL hTree AS DWORD, BYVAL hParent AS _ DWORD, sItem AS STRING) AS LONG LOCAL tTVItem AS TV_ITEM LOCAL tTVInsert AS TV_INSERTSTRUCT IF hParent THEN tTVItem.mask = %TVIF_CHILDREN OR %TVIF_HANDLE tTVItem.hItem = hParent tTVItem.cchildren = 1 TreeView_SetItem(hTree, tTVItem) END IF tTVInsert.hParent = hParent tTVInsert.Item.Item.mask = %TVIF_TEXT tTVInsert.Item.Item.pszText = STRPTR(sItem) tTVInsert.Item.Item.cchTextMax = LEN(sItem) FUNCTION = TreeView_InsertItem(hTree, tTVInsert) END FUNCTION '------------------------------------------------------------------------------ '------------------------------------------------------------------------------ FUNCTION SampleTreeView(BYVAL hDlg AS DWORD, BYVAL lID AS LONG, BYVAL lCount _ AS LONG) AS LONG LOCAL i AS LONG LOCAL j AS LONG LOCAL k AS LONG LOCAL hCtl AS DWORD LOCAL hRoot AS DWORD LOCAL hParent AS DWORD CONTROL HANDLE hDlg, lID TO hCtl FOR i = 1 TO lCount hRoot = SampleTreeViewInsertItem(hCtl, %NULL, USING$("Root#", i)) FOR j = 1 TO lCount hParent = SampleTreeViewInsertItem(hCtl, hRoot, USING$("Item#", j)) FOR k = 1 TO lCount IF k mod 2 = 0 THEN CALL SampleTreeViewInsertItem(hCtl, hParent, USING$("SubItem#_.#", j, _ k)) ELSE CALL SampleTreeViewInsertItem(hCtl, hParent, USING$("SubItemGrey#_.#", j, _ k)) END IF NEXT k NEXT j NEXT i END FUNCTION '------------------------------------------------------------------------------ '------------------------------------------------------------------------------ ' ** Dialogs ** '------------------------------------------------------------------------------ FUNCTION ShowDIALOG1(BYVAL hParent AS DWORD) AS LONG LOCAL lRslt AS LONG #PBFORMS BEGIN DIALOG %IDD_DIALOG1->-> LOCAL hDlg AS DWORD DIALOG NEW hParent, "Dialog1", 91, 70, 490, 338, %WS_POPUP OR %WS_BORDER OR _ %WS_DLGFRAME OR %WS_SYSMENU OR %WS_MINIMIZEBOX OR %WS_MAXIMIZEBOX OR _ %WS_CLIPSIBLINGS OR %WS_VISIBLE OR %DS_MODALFRAME OR %DS_3DLOOK OR _ %DS_NOFAILCREATE OR %DS_SETFONT, %WS_EX_CONTROLPARENT OR %WS_EX_LEFT OR _ %WS_EX_LTRREADING OR %WS_EX_RIGHTSCROLLBAR, TO hDlg CONTROL ADD "SysTreeView32", hDlg, %TRV_SYSTREEVIEW32_1, "SysTreeView32_1", _ 101, 63, 289, 152, %WS_CHILD OR %WS_VISIBLE OR %WS_TABSTOP OR _ %TVS_HASBUTTONS OR %TVS_HASLINES OR %TVS_LINESATROOT OR _ %TVS_SHOWSELALWAYS, %WS_EX_LEFT OR %WS_EX_CLIENTEDGE OR _ %WS_EX_RIGHTSCROLLBAR #PBFORMS END DIALOG SampleTreeView hDlg, %TRV_SYSTREEVIEW32_1, 3 DIALOG SHOW MODAL hDlg, CALL ShowDIALOG1Proc TO lRslt #PBFORMS BEGIN CLEANUP %IDD_DIALOG1 #PBFORMS END CLEANUP FUNCTION = lRslt END FUNCTION '------------------------------------------------------------------------------
Leave a comment: