How do I get the header height of a Listview

前端 未结 5 862
太阳男子
太阳男子 2020-12-31 09:58

Can somebody tell me how to get the header height of a ListView.

5条回答
  •  南笙
    南笙 (楼主)
    2020-12-31 10:09

    @Phaedrus

    ..long long time ago.. but: PInvokeStackImbalance is called

    The signature of SendMessage is (long != Uint32):

    LRESULT WINAPI SendMessage(
        _In_  HWND hWnd,
        _In_  UINT Msg,
        _In_  WPARAM wParam,
        _In_  LPARAM lParam
    )
    

    Change all to:

    const UInt32 LVM_FIRST = 0x1000;
    const UInt32 LVM_GETHEADER = (LVM_FIRST + 31);
    
    [Serializable, System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Sequential)]
    public struct RECT
    {
        public int Left;
        public int Top;
        public int Right;
        public int Bottom;
    }
    
    [System.Runtime.InteropServices.DllImport("user32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto)]
        static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);
    [System.Runtime.InteropServices.DllImport("user32.dll")]
    private static extern bool GetWindowRect(System.Runtime.InteropServices.HandleRef hwnd, out RECT lpRect);
    
    int youtFuncToGetHeaderHeight()
    {
        RECT rc = new RECT();
        IntPtr hwnd = SendMessage((IntPtr)this.Handle, LVM_GETHEADER, IntPtr.Zero, IntPtr.Zero);
        if (hwnd != null)
        {
            if (GetWindowRect(new System.Runtime.InteropServices.HandleRef(null, hwnd), out rc))
            {
                int headerHeight = rc.Bottom - rc.Top;
            }
        }
        return -1;
    }
    

提交回复
热议问题