[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool GetCursorPos(out POINT lpPoint);在C#   引入这个API时
中  有个POINT类型    想问下这里的POINT与  .net中的Point  是不是一个东西,能不能通用
      如果您知道    请告诉我
     谢谢

解决方案 »

  1.   

    这个真不知道,为了保险,我是每次都自定义一个POINT
      

  2.   

    没什么好说的区别
    你可以定义10个类,内部的成员变量都一样,你能说他们之间通用么?
    一般来说api的时候我们习惯性会这样定义[StructLayout(LayoutKind.Sequential)]
    public struct POINT {
    public int x;
    public int y;
    }但你完全可以不用POINT ,直接用point。
    在p/invoke的时候,你传递一个结构相同的对象即可。但在.net下,POINT 和Point那是肯定不可以通用的。类似的结构体,我们都可以在对象相同的情况下,使用.net的类型。
    例如c++的RECT,你可以用c#的rectangle对象。
      

  3.   

    你分别在IDE里查看俩结构的定义不就知道了.....
      

  4.   

    Point p;
    [DllImport("user32.dll")]
    public static extern bool GetCursorPos(out Point pt);
    private void timer1_Tick(object sender, EventArgs e)
    {
       GetCursorPos(out p);
       label1.Text = p.X.ToString();//X坐标
       label2.Text = p.Y.ToString();//Y坐标
    }
    http://msdn.microsoft.com/en-us/library/ms648390(VS.85).aspx
      

  5.   

    [DllImport("user32.dll")]
    [return: MarshalAs(UnmanagedType.Bool)]
    private static extern bool GetWindowRect(IntPtr hwnd, out RECT lpRect);
    里面用的  RECT   还像就跟。net   里的rectangle  不一样
    RECT  是对角线的  两个坐标
    rectangle   是顶点  长 和 宽
       不知道是不是我理解错了!
      

  6.   

    Rectangle一样有Top,Left,Right,Bottom
    你创建控制台程序试试这个[DllImport("user32.dll", EntryPoint = "GetWindowRect")]
    public static extern int GetWindowRect(
        int hwnd,
        ref Rectangle lpRect
    );
    [DllImport("user32.dll", EntryPoint = "GetDesktopWindow")]
    public static extern int GetDesktopWindow();
    static void Main(string[] args)
    {
        Rectangle rect = new Rectangle();
        GetWindowRect(GetDesktopWindow(), ref rect);
        Console.WriteLine(rect.ToString());
        Console.ReadKey();
    }
      

  7.   

      不会吧
       输出是《x=0,y=0,width=1280,height=800》
        这个好像是一个坐标  加  长 和 宽吧
      

  8.   

    so?
    这不就通用了么?还有什么问题?
    你刚不是说RECT记录的是X,Y,RIGHT,BOTTOM么。我这不给你演示用Rectangle一样可以通用得到正确width和height么?你别说你自己问的问题都忘记了啊。
      

  9.   


    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Drawing;using System.Runtime.InteropServices;
    namespace ConsoleApplication1
    {
        class Program
        {        [DllImport("user32.dll", EntryPoint = "GetWindowRect")]
            public static extern int GetWindowRect(
                int hwnd,
                ref Rectangle lpRect
            );
            [DllImport("user32.dll", EntryPoint = "GetDesktopWindow")]
            public static extern int GetDesktopWindow();        [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
            public static extern int GetForegroundWindow();        static void Main(string[] args)
            {
                
                Rectangle rect = new Rectangle();
                GetWindowRect(GetForegroundWindow(), ref rect);
                Console.WriteLine(rect.ToString());
                Console.ReadKey();        }
        }
    }用这个   好点吧   更能说明问题
      

  10.   

    囧~
    的确不行。.net把width和height定义到前面了,修饰的时候又没有精确指定序列化的位置。
    哈。举错例子了。Rectangle不行,不能通用。
    不同的声明,就是不同的类,别指望通用了。
    Point和POINT的定义都一样,只关心x,y所以正好碰巧,可以用Point来替换api中的POINT结构体。
    Rectangle的确,是左上角坐标+尺寸的,RECT是左上角坐标和右下角坐标的。不能通用。
      

  11.   

    谢谢    大家  我想我  明白了
        不过怎么  感觉自己学了这么久还像还没入门啊    悲剧啊   突然发现自己原来几乎什么都不清楚   其实这么久了   从来就没有建过控制台程序 太悲剧了   刚刚居然连System.Drawing命名空间  都引不进去
        都说C#简单??     难道是自己太菜了 
           十分感谢大家   !!