vb ListView虚拟列表网上没找到什么可以实际应用的东西。请大家应用过此技术的高人赐教
解决方案 »
- 请朋友们提供一个打包VB开发的应用程序的打包工具
- 帮我看这个SQL语句
- 急,關於Winsock發送、接收的問題
- 我有一个MS-DOS下运行的程序,它的退出是在键盘的小写q.
- vb中bcd码转换十进制码
- 用mscomm控件做串口通信的问题
- Excel_workbook.ActiveChart.SetSourceData(Excel_workbook.Sheets['Sheet1'].Range['A1:A10'], xlColumns);这句代码的第一个参数能否与
- 为什么不能copy VCD的播放屏幕(如media player)
- 哪位高手有关于“把屏幕操作录制成avi动画”的控件?
- vb中如何保留小数位数(如12.00)?
- VB下关于 正则表达式的问题
- VB如何将读取的数据放到内存的表中?
是一个什么东西?
主要思路就是自己设计一个滚动条,控制这个滚动条来加载数据,不过要用到一大堆的API函数,我在将数据显示到MSFLEXGRID表格的时候,就是用API控制滚动条的。可以设定每次滚动的行数等,原理应该和这个差不多。
麻烦各位了。请不吝赐教。
用文本框,列表框(可以自己弄多个,嘿嘿),垂直滚动条,做一个combobox好了。
贴一段powerbasic的,看你能理解翻译不
#COMPILE EXE
#RESOURCE "PBNote3.pbr"
#DIM ALL
#INCLUDE ONCE "Win32Api.Inc"
#INCLUDE ONCE "CommCtrl.inc"GLOBAL hDlg AS DWORD
GLOBAL ghInstance AS DWORD '入口句柄
GLOBAL nItem() AS STRING
GLOBAL nSubItem1() AS STRING
GLOBAL nSubItem2() AS STRING
GLOBAL LvHwnd AS DWORD%IDC_LISTVIEW=999FUNCTION WINMAIN (BYVAL hInstance AS LONG, BYVAL hPrevInstance AS LONG, BYVAL lpCmdLine AS ASCIIZ PTR, BYVAL iCmdShow AS LONG) AS LONG
ghInstance = hInstance DIALOG NEW 0, "Dialog Title",,, 300, 200,%WS_POPUP OR %WS_VISIBLE OR %WS_CLIPSIBLINGS OR %WS_CLIPCHILDREN OR _
%WS_CAPTION OR %WS_SYSMENU OR %WS_THICKFRAME OR %WS_MINIMIZEBOX OR _
%WS_MAXIMIZEBOX, TO hDlg
DIALOG SHOW MODAL hDlg CALL MainProcEND FUNCTION
'TYPE LV_COLUMN
' mask AS DWORD
' fmt AS LONG
' cx AS LONG
' pszText AS ASCIIZ PTR
' cchTextMax AS LONG
' iSubItem AS LONG
' iImage AS LONG
' iOrder AS LONG
'END TYPE
FUNCTION CreateListView(BYVAL ParentHwnd AS DWORD) AS DWORD '创建
LOCAL R AS RECT,lvWnd AS DWORD,i AS LONG
LOCAL oldStyle AS LONG
LOCAL himlSmall AS DWORD,himlLarge AS DWORD
LOCAL LVC AS LV_COLUMN
LOCAL hBmp0 AS DWORD,hBmp1 AS DWORD
LOCAL Tmp AS STRING
LOCAL ITEM_COUNT AS LONG ITEM_COUNT=100000 GetClientRect ParentHwnd, R lvWnd = CreateWindowEx(0, _
$WC_LISTVIEW, _
"", _
%WS_CHILDWINDOW OR %WS_VISIBLE OR %LVS_OWNERDATA OR %LVS_SHOWSELALWAYS OR %LVS_SINGLESEL OR %LVS_REPORT OR %LVS_NOCOLUMNHEADER, _
R.nLeft, R.nTop, R.nRight - R.nLeft, R.nBottom - R.nTop, _
ParentHwnd, _
%IDC_LISTVIEW, _
ghInstance, _
BYVAL 0&) IF lvWnd = 0 THEN EXIT FUNCTION oldStyle = SendMessage(lvWnd, %LVM_GETEXTENDEDLISTVIEWSTYLE, 0, BYVAL 0&)
oldStyle = oldStyle OR %LVS_EX_FULLROWSELECT OR %LVS_EX_HEADERDRAGDROP 'OR %LVS_EX_GRIDLINES
CALL SendMessage(lvWnd, %LVM_SETEXTENDEDLISTVIEWSTYLE, 0, BYVAL oldStyle) himlSmall = ImageList_Create(16, 16, %ILC_COLORDDB OR %ILC_MASK, 1, 0) IF himlSmall THEN
hBmp0 = LoadImage(ghInstance, "B9",%IMAGE_ICON,0, 0,%LR_SHARED)
ImageList_AddIcon himlSmall, hBmp0
SendMessage lvWnd, %LVM_SETIMAGELIST, %LVSIL_SMALL, BYVAL himlSmall
DestroyIcon hBmp0
END IF LVC.mask = %LVCF_TEXT OR %LVCF_FMT OR %LVCF_SUBITEM OR %LVCF_WIDTH
LVC.fmt = %LVCFMT_LEFT
LVC.cx = 120
FOR i = 0 TO 2
Tmp="Test Column " & FORMAT$(i+1)
LVC.pszText = STRPTR(Tmp)
SendMessage lvWnd, %LVM_INSERTCOLUMN, i, VARPTR(LVC)
NEXT i SendMessage lvWnd, %LVM_DELETEALLITEMS, 0, BYVAL 0&
SendMessage lvWnd, %LVM_SETITEMCOUNT, ITEM_COUNT, BYVAL %LVSICF_NOINVALIDATEALL OR %LVSICF_NOSCROLL
LOCAL hFont1 AS LONG
hFont1=SetFont1("宋体",9,%FW_LIGHT)
SendMessage lvWnd,%WM_SETFONT,hFont1,MAKLNG(%True,0) REDIM nItem(ITEM_COUNT)
REDIM nSubItem1(ITEM_COUNT)
REDIM nSubItem2(ITEM_COUNT)
FOR i=0 TO ITEM_COUNT
nItem(i)="nItem" & FORMAT$(i)
nSubItem1(i)="nSubItem1_" & FORMAT$(i)
nSubItem2(i)="nSubItem2_" & FORMAT$(i)
NEXTEND FUNCTION'TYPE NMLVDISPINFO
' hdr AS NMHDR
' item AS LVITEM
'END TYPE
'
'TYPE LVITEM
' mask AS DWORD
' iItem AS LONG
' iSubItem AS LONG
' STATE AS DWORD
' stateMask AS DWORD
' pszText AS ASCIIZ PTR
' cchTextMax AS LONG
' iImage AS LONG
' lParam AS LONG
' iIndent AS LONG
' iGroupId AS LONG
' cColumns AS DWORD ' tile view columns
' puColumns AS DWORD PTR
'END TYPE'TYPE LVFINDINFO
' flags AS DWORD
' psz AS ASCIIZ PTR
' lParam AS LONG
' pt AS POINTAPI
' vkDirection AS DWORD
'END TYPE'TYPE NMLVFINDITEM
' hdr AS NMHDR
' iStart AS LONG
' lvfi AS LVFINDINFO
'END TYPECALLBACK FUNCTION MainProc() AS LONG
LOCAL NMH AS NMHDR PTR
LOCAL LVDI AS NMLVDISPINFO PTR
LOCAL Rtn AS LONG
LOCAL tmpStr AS STRING
STATIC i AS LONG, j AS LONG, k AS LONG SELECT CASE AS LONG CB.MSG
'------------------------------------------------------------------
CASE %WM_INITDIALOG
LvHwnd=CreateListView(CB.HNDL)
CASE %WM_NOTIFY NMH=CB.LPARAM
SELECT CASE @NMH.code
CASE %LVN_GETDISPINFO
LVDI=CB.LPARAM
IF @LVDI.item.iSubItem THEN
IF @LVDI.item.mask AND %LVIF_TEXT THEN
IF @LVDI.item.iSubItem=1 THEN
@LVDI.item.pszText=STRPTR(nSubItem1(@LVDI.item.iItem))
ELSEIF @LVDI.item.iSubItem=2 THEN
@LVDI.item.pszText=STRPTR(nSubItem2(@LVDI.item.iItem))
END IF
END IF
ELSE
IF @LVDI.item.mask AND %LVIF_TEXT THEN
@LVDI.item.pszText=STRPTR(nItem(@LVDI.item.iItem))
IF @LVDI.item.mask AND %LVIF_IMAGE THEN @LVDI.item.iImage = 0
IF @LVDI.item.mask AND %LVIF_INDENT THEN @LVDI.item.iIndent = 0
IF @LVDI.item.mask AND %LVIF_STATE THEN @LVDI.item.state = 0
END IF
END IF
CASE %LVN_ODCACHEHINT
'数组都准备好了,没必要进行缓冲
CASE %LVN_ODFINDITEM
LOCAL pFindInfo AS NMLVFINDITEM PTR pFindInfo=CB.LPARAM
MSGBOX @pFindInfo.lvfi.@psz,,"FIND" '获取要查找的字符串 [email protected]'不让他执行搜索,直接返回当前位置
EXIT FUNCTION
END SELECT
CASE %WM_DESTROY
PostQuitMessage(0)
END SELECTEND FUNCTIONFUNCTION SetFont1(BYVAL FontName AS STRING,BYVAL FontSize AS LONG,OPT FontStyle AS LONG) AS DWORD 'FontStyle常用的%FW_NORMAL,%FW_BOLD,%FW_LIGHT,%FW_HEAVY
LOCAL hDc AS DWORD,LogPixelsy AS LONG
LOCAL lffont AS LOGFONT
LOCAL LfWeight AS LONG,m_hFont AS LONG IF VARPTR(FontStyle)=0 THEN
LfWeight=%FW_NORMAL '默认
ELSE
LfWeight=FontStyle
END IF hDc=GetDc(%HWND_DESKTOP)
LogPixelsy=GetDeviceCaps(hDc,%LOGPIXELSY)
ReleaseDC %HWND_DESKTOP,hDc
lffont.lfheight=-MulDiv(FontSize,LogPixelsy,72)
lffont.lfweight=LfWeight
lffont.lfoutprecision=%OUT_TT_PRECIS '4
lffont.lffacename=FontName
m_hFont=CreateFontIndirect(lffont) FUNCTION=m_hFont
END FUNCTION
startbin:请将powerbasic的代码给翻译一下,我没看明白。