The application below (compileable example PBWin 8.04, PBWIn 9.0) does not paint all of the the right hand side of the dialog with a copy of the listview on the left hand side - it just paints the scrollbar. It only gets fully painted if the dialog is dragged off-screen or overlaid by another window.
I wonder what I'm doing wrong?
I wonder what I'm doing wrong?
Code:
#COMPILE EXE #DIM ALL #INCLUDE "WIN32API.INC" #INCLUDE "COMMCTRL.INC" %IDD_DIALOG1 = 101 %IDC_LV = 1001 %IDC_LABEL1 = 1002 '------------------------------------------------------------------------- ' PBforms standard code FUNCTION SampleListView(BYVAL hDlg AS DWORD, BYVAL lID AS LONG, BYVAL lColCnt AS LONG, BYVAL lRowCnt AS LONG) AS LONG LOCAL lCol AS LONG LOCAL lRow AS LONG LOCAL hCtl AS DWORD LOCAL tLVC AS LV_COLUMN LOCAL tLVI AS LV_ITEM LOCAL szBuf AS ASCIIZ * 32 LOCAL lStyle AS LONG CONTROL HANDLE hDlg, lID TO hCtl lStyle = ListView_GetExtendedListViewStyle(hCtl) ListView_SetExtendedListViewStyle hCtl, lStyle OR %LVS_EX_FULLROWSELECT OR %LVS_EX_GRIDLINES ' Load column headers. tLVC.mask = %LVCF_FMT OR %LVCF_TEXT OR %LVCF_SUBITEM tLVC.fmt = %LVCFMT_LEFT tLVC.pszText = VARPTR(szBuf) FOR lCol = 0 TO lColCnt - 1 szBuf = USING$("Column #", lCol) tLVC.iOrder = lCol ListView_InsertColumn hCtl, lCol, tLVC NEXT lCol ' Load sample data. FOR lRow = 0 TO lRowCnt - 1 tLVI.stateMask = %LVIS_FOCUSED tLVI.pszText = VARPTR(szBuf) tLVI.iItem = lRow FOR lCol = 0 TO lColCnt - 1 szBuf = USING$("Column # Row #", lCol, lRow) tLVI.iSubItem = lCol tLVI.lParam = lRow IF lCol = 0 THEN tLVI.mask = %LVIF_TEXT OR %LVIF_PARAM OR %LVIF_STATE ListView_InsertItem hCtl, tLVI ELSE tLVI.mask = %LVIF_TEXT ListView_SetItem hCtl, tLVI END IF NEXT lCol NEXT lRow ' Auto size columns. FOR lCol = 0 TO lColCnt - 2 ListView_SetColumnWidth hCtl, lCol, %LVSCW_AUTOSIZE NEXT lCol ListView_SetColumnWidth hCtl, lColCnt - 1, %LVSCW_AUTOSIZE_USEHEADER END FUNCTION '-------------------------------------------------------------------------- CALLBACK FUNCTION ShowDIALOG1Proc() STATIC hLV AS DWORD LOCAL hDCLV, hDC AS DWORD LOCAL r AS RECT LOCAL ps AS PAINTSTRUCT LOCAL lresult AS LONG SELECT CASE AS LONG CBMSG CASE %WM_INITDIALOG hLV = getdlgitem(CBHNDL, %IDC_LV) getwindowrect CBHNDL, r r.nleft = 185: r.ntop = 10 invalidaterect CBHNDL, r, %false CASE %WM_ERASEBKGND getDC CBHNDL TO hDC GOSUB PaintW releaseDC CBHNDL, hDC CASE %WM_PAINT beginpaint CBHNDL, ps TO hDC GOSUB paintW endpaint CBHNDL, ps END SELECT EXIT FUNCTION paintW: getDC hLV TO hDCLV getwindowrect hLV, r bitblt hDC, 185, 10, r.nright - r.nleft, r.nbottom - r.ntop,_ hDCLV, 0, 0, %SRCCOPY TO lresult releaseDC hLV, HDCLV RETURN END FUNCTION '------------------------------------------------------ FUNCTION ShowDIALOG1(BYVAL hParent AS DWORD) AS LONG LOCAL lRslt AS LONG LOCAL hDlg AS DWORD DIALOG NEW hParent, "List View ListView Image", _ 97, 168, 243, 166, %WS_SYSMENU, TO hDlg CONTROL ADD "SysListView32", hDlg, %IDC_LV, "SysListView32_1", _ 5, 5, 115, 135, _ %WS_CHILD OR %WS_VISIBLE OR %WS_TABSTOP OR %LVS_REPORT OR %LVS_SHOWSELALWAYS ,_ %WS_EX_LEFT OR %WS_EX_CLIENTEDGE OR %WS_EX_RIGHTSCROLLBAR SampleListView hDlg, %IDC_LV, 2, 10 DIALOG SHOW MODAL hDlg, CALL ShowDIALOG1Proc TO lRslt FUNCTION = lRslt END FUNCTION '---------------------------------------------------------------------------- FUNCTION PBMAIN() InitCommoncontrols ShowDIALOG1 %HWND_DESKTOP END FUNCTION
Comment