gpt4 book ai didi

C++ Windows API - 如何使用 ListView 的默认 WIndows Proc?

转载 作者:太空宇宙 更新时间:2023-11-04 14:12:25 26 4
gpt4 key购买 nike

好的,我有一个 ListView,我刚刚弄清楚了如何手动设置它的回调过程:

// Sets the list view procedure
listproc = (D_ListView *) LocalAlloc(LMEM_FIXED, sizeof(D_ListView));
listproc->oldproc = (WNDPROC)SetWindowLongPtr(g_hList, GWL_WNDPROC, (LONG)&ListViewProc);
SetWindowLongPtr(g_hList, GWL_USERDATA, (LONG)&listproc);

我使用了一个我发现的代码示例 - D_ListView 只是一个 struct 和一个名为 oldprocWNDPROC 变量.

无论如何,我正在向我的 ListView 发送消息以添加项目。但我不想手动处理 ADD 消息,我想将它们传递给 ListView 的默认过程,并且只处理我需要覆盖其功能的消息。

LRESULT CALLBACK ListViewProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
// Just a test - we're getting this message so it worked
case LVM_INSERTCOLUMN:
{
cout << "CREATED" << endl;

}
}
WNDPROC* wp;
wp = (WNDPROC*)(::GetWindowLongPtr(hwnd, GWL_WNDPROC));
return ::CallWindowProc(*wp, hwnd, msg, wParam, lParam);
}

在上面,我不想处理 LVM_INSERTCOLUMN:我只是想传递它。

有人能帮忙吗?

谢谢,罗布

最佳答案

使用 getWindowLongPtr (...GWL_USERDATA) 获取指向您的 D_ListView 实例的指针,然后将任何不需要的消息转发到 oldproc

::CallWindowProc(*listproc->oldproc, hwnd, msg, wParam, lParam);

关于C++ Windows API - 如何使用 ListView 的默认 WIndows Proc?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13563251/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com