powerbasic 点击listview的行显示第几行
时间: 2023-08-23 14:06:00 浏览: 179
在 PowerBASIC 中,使用 ListView 控件可以通过发送 LVM_GETNEXTITEM 消息来获取当前选中行的索引。
以下是一个示例代码:
```
LOCAL iIndex AS LONG
iIndex = SendMessage(hWndListView, LVM_GETNEXTITEM, -1, %LVNI_SELECTED)
IF iIndex <> -1 THEN
' 获取到当前选中行的索引 iIndex
MSGBOX "当前选中行的索引为:" & STR$(iIndex)
ELSE
MSGBOX "当前未选中任何行!"
END IF
```
其中,`hWndListView` 为 ListView 控件的句柄。`LVM_GETNEXTITEM` 为发送的消息,`-1` 为参数 `wParam`,表示从选中行的下一行开始查找;`%LVNI_SELECTED` 为参数 `lParam`,表示仅查找选中行。
如果返回值 `iIndex` 不为 `-1`,则表示当前选中了某一行,可以得到这一行的索引;否则表示当前未选中任何行。
相关问题
powerbasic listview点击某行某列
在PowerBasic中,您可以使用ListView控件的消息处理程序来捕获单击/双击事件并确定所单击的行和列。
下面是一个简单的示例代码:
```powerbasic
' ListView控件消息处理程序
Function ListViewProc(ByVal hWnd As Dword, ByVal wMsg As Dword, ByVal wParam As Dword, ByVal lParam As Dword) As Long
Local iItem As Long, iSubItem As Long
Select Case wMsg
Case %WM_NOTIFY
Local lpnmhdr As NMHDR Ptr
lpnmhdr = lParam
Select Case @lpnmhdr.code
Case %NM_CLICK ' 处理单击事件
Local lvHitTestInfo As LV_HITTESTINFO
GetCursorPos lvHitTestInfo.pt
ScreenToClient hWnd, lvHitTestInfo.pt
SendMessage(hWnd, %LVM_HITTEST, 0, VarPtr(lvHitTestInfo))
If (lvHitTestInfo.flags And %LVHT_ONITEM) Then ' 如果单击在某一行上
iItem = lvHitTestInfo.iItem ' 获取所单击的行
iSubItem = lvHitTestInfo.iSubItem ' 获取所单击的列
' 在这里加入处理代码
End If
Case %NM_DBLCLK ' 处理双击事件
' 在这里加入处理代码
End Select
End Select
Function = CallWindowProc(OldListViewProc, hWnd, wMsg, wParam, lParam)
End Function
```
在此示例中,我们使用了ListView控件的%WM_NOTIFY消息来捕获单击和双击事件。对于单击事件,我们使用%LVM_HITTEST消息来确定所单击的行和列。一旦我们确定了所单击的行和列,我们可以在代码中加入相应的处理逻辑。
请注意,此代码仅是一个示例,您可能需要对其进行修改才能满足您的具体需求。
powerbasic listview点击某行 获取行内信息
在 PowerBASIC 中,可以使用 Listview 控件的消息处理程序来获取用户点击某一行时该行的信息。下面是一个示例代码:
```
#COMPILE EXE
#DIM ALL
#INCLUDE "WIN32API.INC"
%ID_LISTVIEW = 100
GLOBAL hDlg AS DWORD
FUNCTION PBMAIN () AS LONG
LOCAL hListView AS DWORD
DIALOG NEW 0, "Listview Example",,, 300, 200, %WS_SYSMENU TO hDlg
CONTROL ADD "SysListView32", hDlg, %ID_LISTVIEW, "", 10, 10, 280, 150
ListView_SetExtendedListViewStyle GetDlgItem(hDlg, %ID_LISTVIEW), %LVS_EX_GRIDLINES OR %LVS_EX_FULLROWSELECT
' Add columns to the listview
LOCAL lvColumn AS LV_COLUMN
lvColumn.mask = %LVCF_TEXT OR %LVCF_WIDTH
lvColumn.cx = 100
lvColumn.pszText = "Column 1"
ListView_InsertColumn GetDlgItem(hDlg, %ID_LISTVIEW), 0, lvColumn
lvColumn.cx = 100
lvColumn.pszText = "Column 2"
ListView_InsertColumn GetDlgItem(hDlg, %ID_LISTVIEW), 1, lvColumn
' Add items to the listview
LOCAL lvItem AS LV_ITEM
lvItem.mask = %LVIF_TEXT
lvItem.iItem = 0
lvItem.iSubItem = 0
lvItem.pszText = "Item 1"
ListView_InsertItem GetDlgItem(hDlg, %ID_LISTVIEW), lvItem
lvItem.iSubItem = 1
lvItem.pszText = "Subitem 1"
ListView_SetItem GetDlgItem(hDlg, %ID_LISTVIEW), lvItem
lvItem.iItem = 1
lvItem.iSubItem = 0
lvItem.pszText = "Item 2"
ListView_InsertItem GetDlgItem(hDlg, %ID_LISTVIEW), lvItem
lvItem.iSubItem = 1
lvItem.pszText = "Subitem 2"
ListView_SetItem GetDlgItem(hDlg, %ID_LISTVIEW), lvItem
DIALOG SHOW MODAL hDlg CALL DlgProc
END FUNCTION
CALLBACK FUNCTION DlgProc() AS LONG
LOCAL nIndex AS LONG
LOCAL szBuffer AS ASCIIZ * 256
SELECT CASE CBMSG
CASE %WM_INITDIALOG
' Do initialization here
CASE %WM_COMMAND
SELECT CASE LOWRD(CBWPARAM)
CASE %ID_LISTVIEW
SELECT CASE HIWRD(CBWPARAM)
CASE %NM_CLICK
' Get the index of the clicked item
nIndex = ListView_GetNextItem(GetDlgItem(hDlg, %ID_LISTVIEW), -1, %LVNI_SELECTED)
IF nIndex >= 0 THEN
' Get the text of the first subitem in the clicked row
ListView_GetItemText GetDlgItem(hDlg, %ID_LISTVIEW), nIndex, 0, szBuffer, SIZEOF(szBuffer)
MSGBOX "Clicked row: " & STR$(nIndex + 1) & $CRLF & "Text: " & szBuffer
END IF
END SELECT
END SELECT
END SELECT
END FUNCTION
```
在这个示例中,我们创建了一个包含两列数据的 Listview 控件,并在其中添加了两个项目。当用户单击某个项目时,会在消息处理程序中获取所选项目的行索引,并使用 ListView_GetItemText 函数获取该行第一个子项的文本。然后,我们将该信息显示在一个消息框中。
注意,在这个示例中,我们使用了 Listview 控件的扩展风格 %LVS_EX_FULLROWSELECT,这使得用户单击 Listview 中的任何位置都会选择整行。
阅读全文