none
ClipCursor使用上的問題 RRS feed

  • 問題

  • [DllImport("User32")]
    public static extern void ClipCursor(Rectangle RECT);


    ClipCursor(new Rectangle(this.Location, this.Size));

    以上是小弟的CODE目的是把滑鼠限制在表單之中 但是沒有出現效果 不知道是不是參數給錯了 請高手指導
    2009年9月6日 上午 10:56

解答

  • 線上手冊的範例:
    RECT rcClip;           // new area for ClipCursor RECT rcOldClip; // previous area for ClipCursor

    // Record the area in which the cursor can move.

    GetClipCursor(&rcOldClip);

    // Get the dimensions of the application's window.

    GetWindowRect(hwnd, &rcClip);

    // Confine the cursor to the application's window.

    ClipCursor(&rcClip);

       //
       // Process input from the confined cursor.
       //

    // Restore the cursor to its previous area.

    ClipCursor(&rcOldClip);

    另外這篇也看看:http://support.microsoft.com/default.aspx/kb/116182/zh-tw
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    • 已標示為解答 Optimist9266 2009年9月19日 上午 12:21
    2009年9月6日 上午 11:29

所有回覆

  • 線上手冊的範例:
    RECT rcClip;           // new area for ClipCursor RECT rcOldClip; // previous area for ClipCursor

    // Record the area in which the cursor can move.

    GetClipCursor(&rcOldClip);

    // Get the dimensions of the application's window.

    GetWindowRect(hwnd, &rcClip);

    // Confine the cursor to the application's window.

    ClipCursor(&rcClip);

       //
       // Process input from the confined cursor.
       //

    // Restore the cursor to its previous area.

    ClipCursor(&rcOldClip);

    另外這篇也看看:http://support.microsoft.com/default.aspx/kb/116182/zh-tw
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    • 已標示為解答 Optimist9266 2009年9月19日 上午 12:21
    2009年9月6日 上午 11:29
  • 剛剛又看了一下你的程式碼,建議你用 API 方式宣告一個 RECT 結構,我沒試過 RECT 跟 .Net 的 Rectangle 是否相通。
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    2009年9月6日 上午 11:35
  • 我研究了一下仍然看不懂= =
    首先我看不懂http://support.microsoft.com/default.aspx/kb/116182/zh-tw幾個引數是哪來的

    以及所謂的API 方式宣告一個 RECT 結構 又是如何建立

            [DllImport("User32")]
            public static extern Rect rect;

    上面是我嘗試的程式碼 但是似乎是錯的
    2009年9月6日 下午 12:18
  • .NET的Rectangle結構是(左, 上, 長, 寬)
    win32的RECT結構是(左, 上, 右, 下)
    所以並不相同
    請參考
    http://pinvoke.net/default.aspx/user32/ClipCursor.html
    C#學習者,修練中,ACM解題魂 - http://kgame-blog.spaces.live.com/
    • 已提議為解答 kgame 2009年9月8日 上午 06:16
    2009年9月6日 下午 01:26
  •     public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            [DllImport("user32.dll")]
            static extern bool ClipCursor(RECT lpRect);
            [DllImport("User32")]
            public static extern void GetWindowRect(int handle);
            private void Form1_Load(object sender, EventArgs e)
            {
                IntPtr a = this.Handle;
                RECT g = new RECT(0,0,500,500);
                ClipCursor(g);
            }
        }
        public struct RECT
        {
            public int Left;
            public int Top;
            public int Right;
            public int Bottom;

            public static implicit operator Rectangle(RECT rect)
            {
                return Rectangle.FromLTRB(rect.Left, rect.Top, rect.Right, rect.Bottom);
            }
            public static implicit operator RECT(Rectangle rect)
            {
                return new RECT(rect.Left, rect.Top, rect.Right, rect.Bottom);
            }

            public RECT(int left, int top, int right, int bottom)
            {
                Left = left;
                Top = top;
                Right = right;
                Bottom = bottom;
            }
        }

    還是沒有效果 看不懂是哪裡出了錯= =

    2009年9月6日 下午 03:21
  • 請注意參考網頁上的API宣告方式
    lpRect是傳遞參照, 不是值
    C#學習者,修練中,ACM解題魂 - http://kgame-blog.spaces.live.com/
    • 已提議為解答 kgame 2009年9月8日 上午 06:16
    2009年9月6日 下午 03:23