【发布时间】:2013-09-03 10:27:59
【问题描述】:
我想从列表视图控件中选择并突出显示一个项目,并且正在使用以下代码
#include <Windows.h>
#include <commctrl.h>
int main() {
//Hardcoded Handle to the ListView Windows of Add Printer Dialog
HWND hwndListView = (HWND)0x000206D6;
DWORD dwProcessID;
::GetWindowThreadProcessId( hwndListView, &dwProcessID );
HANDLE process=OpenProcess(PROCESS_VM_OPERATION|PROCESS_VM_READ|PROCESS_VM_WRITE|PROCESS_QUERY_INFORMATION, FALSE, dwProcessID);
LVITEM lvi;
LVITEM* _lvi=(LVITEM*)VirtualAllocEx(process, NULL, sizeof(LVITEM), MEM_COMMIT, PAGE_READWRITE);
lvi.state = LVIS_FOCUSED | LVIS_SELECTED ;
lvi.stateMask = LVIS_FOCUSED | LVIS_SELECTED ;
lvi.mask = LVIF_STATE;
WriteProcessMemory(process, _lvi, &lvi, sizeof(LVITEM), NULL);
::SendMessage(hwndListView, LVM_SETITEMSTATE, (WPARAM)0, (LPARAM)_lvi);
VirtualFreeEx(process, _lvi, 0, MEM_RELEASE);
}
我得到的结果是
而不是选择并突出显示项目
请告诉我可能出了什么问题
【问题讨论】:
-
为什么不用 ListView 编写测试应用程序并尝试在其中选择项目?这样你就可以调试你的代码出了什么问题。
-
可能 ListView 不在焦点上?
-
@marcin_j:你能详细说明一下用 ListView 写 App 是什么意思吗?
-
@AlexFarber:我尝试添加另一行
::SetFocus(hwndListView)但这没有帮助 -
如果您在窗口中手动将焦点设置为 ListView - 使用鼠标或 Tab 键会发生什么?
标签: c++ windows winapi visual-c++