Win32 C ++如何处理ListView子类中的LVM_SETCOLUMNWIDTH?

问题描述

我有一个ListView,我想根据ListView本身的大小(根据窗口大小调整大小)来调整其列的大小。 ListView由单独的WNDPROC子类化,其中WM_NOTIFY用于处理其他消息。

要确定我正在使用的ListView_SetColumnWidth()标头列的大小,但这仅在我停用单独的ListView WNDPROC或从中删除WM_NOTIFY处理时才有效。

我已经尝试在LVM_SETCOLUMNWIDTH中手动处理WNDPROC的ListView及其标题,以查看消息是否通过,但无济于事。

我不太确定如何进行;任何帮助将不胜感激。

作为参考,我的ListView WM_NOTIFY中的WNDPROC

    case WM_NOTIFY:
    {
        UINT debugval = (((LPNMHDR)lParam)->code);
        switch (((LPNMHDR)lParam)->code)
        {
            case HDN_BEGINTRACK:
            {
                return TRUE;  //Prevent manual resizing.
                break;
            }
            case LVM_SETCOLUMNWIDTH:
            {
                ::MessageBox(hwnd,L"test",MB_OK);
                break;
            }
        }
        break;
    }

解决方法

WM_NOTIFY是它自己的单独消息,不会像您编写的那样通过case LVM_SETCOLUMNWIDTH进行传送。您需要将switch移动到外部CallWindowProc()中。并确保您要为不想丢弃的所有消息调用DefSubclassProc()switch (uMsg) { case WM_NOTIFY: { UINT code = (((LPNMHDR)lParam)->code); switch (code) { case HDN_BEGINTRACK: { return TRUE; //Prevent manual resizing. } } break; } case LVM_SETCOLUMNWIDTH: { ... break; } } return CallWindowProc(...,hwnd,uMsg,wParam,lParam); or return DefSubclassProc(hwnd,lParam); (取决于创建子类的方式)。

尝试更多类似的方法:

LEFT JOIN
,

我有一个ListView,我想根据ListView本身的大小(根据窗口大小调整大小)来调整其列的大小。

因此,在主窗口中,您需要通过SetWindowPos修改Listview的大小,并通过ListView_SetColumnWidth修改ListView列的大小。

类似于以下代码:

@if (strpos($_SERVER['REQUEST_URI'],'admin')) 

// your custom template here 
@endif

然后,在ListView的LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam) { switch (message) { case WM_SIZE: { int cxClient = LOWORD(lParam); int cyClient = HIWORD(lParam); SetWindowPos(Instructions_ListView,NULL,cxClient / 3,cyClient / 4,cxClient / 5,cyClient / 2,SWP_SHOWWINDOW); ListView_SetColumnWidth(Instructions_ListView,cxClient / 10); return 0; } case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hwnd,message,lParam); } 函数中,WNDPROC是它自己的唯一消息,不属于LVM_SETCOLUMNWIDTH。并通过DefSubclassProc处理其他默认消息。

因此您可以参考以下代码:

WM_NOTIFY

最后,它对我有用:

enter image description here