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

标签 c++ windows api mfc

好的,我有一个 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/

相关文章:

C++,要返回各种类实例如何创建模板?

c++ - 在另一个 lambda 的 catch block 中调用捕获的 lambda 会产生 GCC 错误

c++ - 计算一点到另一点的距离

windows - 如何在D应用程序中添加图标?

spring - 如何在 Swagger 中连接 importMappings 和 yaml

c# - 使用连接字符串在 Web API 中创建图像文件夹

c++ - 如何调用绑定(bind)了所有参数的 boost::function 对象

sql-server - 以特定用户身份执行 xp_cmdshell 命令

c++ - 反斜杠和最后引号

c# - 由于版本问题,无法使用 WooCommerceNET C# 连接 Woocommerce