【问题标题】:Windows - Get HWND from TreeView for GetScrollInfo?Windows - 从 TreeView 获取 HWND 以获取 GetScrollInfo?
【发布时间】:2018-11-15 16:14:30
【问题描述】:

我是 Windows 编程新手,正在尝试获取 TreeView 滚动条的位置。

SCROLLINFO scrollInfo;
ZeroMemory(&scrollInfo, sizeof(scrollInfo));
scrollInfo.cbSize = sizeof(scrollInfo);
scrollInfo.fMask = SIF_TRACKPOS;
tbool gotScrollInfo = GetScrollInfo(poTreeView->Handle, SB_VERT, &scrollInfo);

我收到一个错误:

'BOOL GetScrollInfo(HWND,int,LPSCROLLINFO)': cannot convert argument 1 from 'System::IntPtr' to 'HWND'.

我在网上查看过,但找不到如何从 TreeView 指针获取到 HWND。 Windows 的文档假定您已经拥有 HWND。

我见过人们在其他地方使用TreeView.hwnd 或将TreeView.Handle 转换为IntPtr - 我猜这个函数用来代替HWND

有人知道怎么做吗?这应该是超级简单的,但我找不到答案。

【问题讨论】:

  • 那是什么语言?发布您用于 GetScrollInfo 的 pinvoke 呼叫。一般来说,是的,treeView1.Handle 就是您要查找的 HWND。
  • .net 标签没用。你用什么语言编写代码?托管还是非托管? GetScrollInfo() 的声明在哪里?

标签: .net winapi treeview hwnd


【解决方案1】:

根据Control.Handle 文档:

一个包含控件的窗口句柄 (HWND) 的 IntPtr。

...

Handle 属性的值是 Windows HWND。如果尚未创建句柄,则引用此属性将强制创建句柄。

所以是的,您可以简单地将IntPtr 类型转换为HWND,例如:

(HWND)(poTreeView->Handle.ToPointer())

或者

static_cast<HWND>(poTreeView->Handle.ToPointer())

【讨论】:

    猜你喜欢
    • 2011-07-19
    • 1970-01-01
    • 2015-11-07
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 2010-11-17
    • 1970-01-01
    • 2011-06-13
    相关资源
    最近更新 更多