怎么向一个单元格可编辑的Clistctrl发送消息,改变单元格的内容

冰清-小魔鱼 2011-05-03 05:13:15
如何向一个可编辑的Clistctrl发送消息?Clistctrl是放在一个非模式对话框里,视图类是该对话框的父对象,通过视图得到一些数据,如何从视图发送消息,使对话框里的Clistctrl显示出数据呢
...全文
189 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2011-05-20
  • 打赏
  • 举报
回复
您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖
相关规定详见界面界面版关于版主结帖工作的具体办法
冰清-小魔鱼 2011-05-05
  • 打赏
  • 举报
回复
意思还是不太懂啊,能否自定义一个消息呢,然后直接调用这个消息?
Eleven 2011-05-05
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 lijie45655 的回复:]
该Clistctrl控件是放在对话框里的啊,对话框的父类是视图类,我得从视图里发送消息给对话框里的Clistctrl控件,请问,一定要用跨进程的方法么?
[/Quote]
你这里不是跨进程就没有必要了
冰清-小魔鱼 2011-05-05
  • 打赏
  • 举报
回复
还有就是HWND hWnd = ::FindWindow(NULL, _T("XA"));
if(hWnd)
{
HWND hList = ::FindWindowEx(hWnd, NULL, _T("SysListView32"), NULL);
}中的
_T("XA")要是在我这个例子中是不是对话框的名字呢,
T("SysListView32"), 是不是Clistctrl控件的名字。
冰清-小魔鱼 2011-05-05
  • 打赏
  • 举报
回复
该Clistctrl控件是放在对话框里的啊,对话框的父类是视图类,我得从视图里发送消息给对话框里的Clistctrl控件,请问,一定要用跨进程的方法么?
海盗医生 2011-05-04
  • 打赏
  • 举报
回复

同一进程,使用ListView_SetItem 比较方便
跨进程,采用4楼的方法
Eleven 2011-05-04
  • 打赏
  • 举报
回复
Sorry,最后没有释放资源,补全

HWND hWnd = ::FindWindow(NULL, _T("XA"));
if(hWnd)
{
HWND hList = ::FindWindowEx(hWnd, NULL, _T("SysListView32"), NULL);
if(hList)
{
DWORD PID = 0;
GetWindowThreadProcessId(hList, &PID);
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, PID);
if(hProcess)
{
LVITEM item = {0};
TCHAR buf[] = {_T("Hello, World")};
LVITEM* pItem = (LVITEM*)VirtualAllocEx(hProcess, NULL, sizeof(LVITEM), MEM_COMMIT, PAGE_READWRITE);
TCHAR* pText = (TCHAR*)VirtualAllocEx(hProcess, NULL, sizeof(buf), MEM_COMMIT, PAGE_READWRITE);
if(pItem && pText)
{
int nItem = ListView_GetItemCount(hList);
for(int i=0; i<nItem; i++)
{
item.iItem = i;
item.iSubItem = 0;
item.pszText = pText;
WriteProcessMemory(hProcess, pText, &buf, sizeof(buf), NULL);
WriteProcessMemory(hProcess, pItem, &item, sizeof(LVITEM), NULL);
::SendMessage(hList, LVM_SETITEMTEXT, (WPARAM)i, (LPARAM)pItem);
}

}
VirtualFreeEx(hProcess, pItem, sizeof(LVITEM), MEM_RELEASE);
VirtualFreeEx(hProcess, pText, sizeof(buf), MEM_RELEASE);
CloseHandle(hProcess);
}
}
}
Eleven 2011-05-04
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wangyutao0232000 的回复:]
ListView_SetItem 可以
[/Quote]
跨进程,直接使用是不行了

HWND hWnd = ::FindWindow(NULL, _T("XXXX"));
if(hWnd)
{
HWND hList = ::FindWindowEx(hWnd, NULL, _T("SysListView32"), NULL);
if(hList)
{
DWORD PID = 0;
GetWindowThreadProcessId(hList, &PID);
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, PID);
if(hProcess)
{
LVITEM item = {0};
TCHAR buf[] = {_T("Hello, World")};
LVITEM* pItem = (LVITEM*)VirtualAllocEx(hProcess, NULL, sizeof(LVITEM), MEM_COMMIT, PAGE_READWRITE);
TCHAR* pText = (TCHAR*)VirtualAllocEx(hProcess, NULL, sizeof(buf), MEM_COMMIT, PAGE_READWRITE);
if(pItem && pText)
{
int nItem = ListView_GetItemCount(hList);
for(int i=0; i<nItem; i++)
{
item.iItem = i;
item.iSubItem = 0;
item.pszText = pText;
WriteProcessMemory(hProcess, pText, &buf, sizeof(buf), NULL);
WriteProcessMemory(hProcess, pItem, &item, sizeof(LVITEM), NULL);
::SendMessage(hList, LVM_SETITEMTEXT, (WPARAM)i, (LPARAM)pItem);
}

}
}
}
}
海盗医生 2011-05-04
  • 打赏
  • 举报
回复
ListView_SetItem 可以
Torch009 2011-05-04
  • 打赏
  • 举报
回复
消息的wParm和lParam参数中存放CListCtrl的Item信息,比如行,列

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧