windows api 通过句柄获取控件在窗口的坐标问题?

问题描述

windows api 通过句柄获取控件在窗口的坐标问题?

NativeRECT sRECT = new NativeRECT();
//get 屏幕 RECT
GetWindowRect(hWnd, out sRECT);
问题1:该方法有时获去到的值是负数 ? 求解答?

  ScreenToClient(hWnd, ref xx);
    问题2:该方法获取到的值 一直是0 

    //结构体布局 本机位置

[StructLayout(LayoutKind.Sequential)]
public struct NativeRECT
{
public int left;
public int top;
public int right;
public int bottom;
}

解决方案

看你的nativerect怎么定义的,和C++的结构体签名、顺序是否一致。

解决方案二:

public struct RECT
{
public int Left;
public int Top;
public int Right;
public int Bottom;
}

//结构体布局 本机位置
[StructLayout(LayoutKind.Sequential)]
public struct NativeRECT
{
    public int left;
    public int top;
    public int right;
    public int bottom;
}
时间: 2024-09-24 07:39:01

windows api 通过句柄获取控件在窗口的坐标问题?的相关文章

spy-C#菜鸟求助,SPY++上获取控件ID,怎么能获得控件句柄

问题描述 C#菜鸟求助,SPY++上获取控件ID,怎么能获得控件句柄 [DllImport("user32.dll ", EntryPoint = "GetDlgItem")] public static extern IntPtr GetDlgItem(IntPtr hParent, int nIDParentItem); IntPtr curr_hWnd; curr_hWnd = GetDlgItem(IntPtr.Zero, 0x00002EE5); curr

使用Windows系统提供的IP控件

在网络程序中,我们常常碰到需要用户输入IP地址的情况.然而C++ Builder并没有为我们提供可以用于输入IP串的控件,于是我们只好用TEdit控件(单行文本框)来接受用户输入的IP串.但是,使用TEdit来输入IP串并不是一个好的主意,因为处理起来非常不方便.事实上,在我们的身旁有一个专门用来输入IP串的Windows控件,就象网络链接属性中, Internet 协议 (TCP/IP) 属性中输入IP的控件.IP控件会拒绝非法的IP串(在每个部分只能输入0~255之间的数字):它让你可以轻松

重新想象 Windows 8 Store Apps (3) - 控件之内容控件: ToolTip, Frame, AppBar, ContentControl, ContentPresenter; 容器控件: Border, Viewbox, Popup

原文:重新想象 Windows 8 Store Apps (3) - 控件之内容控件: ToolTip, Frame, AppBar, ContentControl, ContentPresenter; 容器控件: Border, Viewbox, Popup [源码下载] 重新想象 Windows 8 Store Apps (3) - 控件之内容控件: ToolTip, Frame, AppBar, ContentControl, ContentPresenter; 容器控件: Border,

重新想象 Windows 8 Store Apps (16) - 控件基础: 依赖属性, 附加属性, 控件的继承关系, 路由事件和命中测试

原文:重新想象 Windows 8 Store Apps (16) - 控件基础: 依赖属性, 附加属性, 控件的继承关系, 路由事件和命中测试 [源码下载] 重新想象 Windows 8 Store Apps (16) - 控件基础: 依赖属性, 附加属性, 控件的继承关系, 路由事件和命中测试 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之 控件基础 DependencyProperty - 依赖属性 AttachedProperty - 附加属性 控件的继

控件坐标-.net 怎么获取控件在屏幕中的坐标

问题描述 .net 怎么获取控件在屏幕中的坐标 看网上用函数:Point p = Button2.PointToScreen(Button2.Location); 但是老是提示错误,我引用了using System.Drawing;using System.Windows.Forms;请问我少引用了什么吗?还是.net控件不支持PointToScreen这个函数? 解决方案 你这个代码是桌面程序的,不是asp.net的.asp.net只能获得相对文档的坐标,而不能获得相对屏幕的坐标,除非你在客户

请教如何获取控件的内存数据

问题描述 请教如何获取控件的内存数据 比如按钮,按钮在内存中是有大小的,如何获取按钮的内存数据,从而从这些数据中匹配数据 解决方案 FindWindow找到按钮的句柄,用GetWindowRect获取它的大小. 解决方案二: 正规的方法,应该是支持控件提供的接口去获取,而不是直接读取控件的内存. 当然,如果你找到控件的内存地址.且知道控件的数据结构,自己读完全是没有问题的.因为控件,一般也就是一个类!

如何通过C#的反射机制,通过控件名获取控件(并且这个控件本身是动态生成的)

问题描述 我知道可以通过下面这种方式通过控件名获取控件TextBoxtextbox=(TextBox)this.GetType().GetField("Textbox的名称",System.Reflection.BindingFlags.NonPublic|System.Reflection.BindingFlags.Instance|System.Reflection.BindingFlags.IgnoreCase).GetValue(this);但是,如果这个控件是自己用代码生成的

重新想象 Windows 8 Store Apps (13) - 控件之 SemanticZoom

原文:重新想象 Windows 8 Store Apps (13) - 控件之 SemanticZoom [源码下载] 重新想象 Windows 8 Store Apps (13) - 控件之 SemanticZoom 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之 SemanticZoom 演示 SemanticZoom 的应用 通过 ISemanticZoomInformation 接口实现自定义 SemanticZoom 的 View 示例1.演示 Sem

重新想象 Windows 8 Store Apps (1) - 控件之文本控件: TextBlock, TextBox, PasswordBox, RichEditBox, RichTextBlock, RichTextBlockOverflow

原文:重新想象 Windows 8 Store Apps (1) - 控件之文本控件: TextBlock, TextBox, PasswordBox, RichEditBox, RichTextBlock, RichTextBlockOverflow [源码下载] 重新想象 Windows 8 Store Apps (1) - 控件之文本控件: TextBlock, TextBox, PasswordBox, RichEditBox, RichTextBlock, RichTextBlockO