首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > .NET > C#.NET > 使用P/Invoke实现不点击标题栏拖动窗体
【标  题】:使用P/Invoke实现不点击标题栏拖动窗体
【关键字】:P/Invoke
【来  源】:http://blog.csdn.net/pandahyang/archive/2006/09/13/1216981.aspx

使用P/Invoke实现不点击标题栏拖动窗体

现在许多程序(Windows Media Player, QQ等)都能通过点击窗体的任意一部分实现拖动整个窗体,下面介绍一个用P/Invoke来实现的方法.

因为要使用P
/Invoke,首先引入
using System.Runtime.InteropServices;

定义Win32 API常量字段
public const int WM_NCLBUTTONDOWN = 0xA1; //消息:左键点击
public const int HT_CAPTION = 0x2; //标题栏

引入Win32 API函数
[DllImportAttribute(
"user32.dll")]
public static extern int SendMessage(IntPtr hWnd,  int Msg, int wParam, int lParam); //发送消息
[DllImportAttribute("user32.dll")]
public static extern bool ReleaseCapture(); //释放鼠标捕捉

给窗体加入MouseDown事件方法
private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{    
   
if (e.Button == MouseButtons.Left)
    {
        ReleaseCapture();
//释放鼠标捕捉
        SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0); //发送左键点击的消息至该窗体(标题栏)
    }
}

其实这个方法就是通过Win32API转移鼠标的焦点来实现.

还有一个方法就是通过MouseDown,MouseMove,MouseUp事件计算坐标来实现,但是这样的效率肯定是不如P
/Invoke高的.


原文地址:http://www.codeproject.com/csharp/csharpmovewindow.asp?df=100&forumid=202017&exp=0&select=1328631 

微软资深MVP和讲师章立民先生携实力团队巨献 全方位探秘微软最新开发技术:【上一篇】
c#的事件实现的原理:【下一篇】
【相关文章】
  • P/Invoke with SWIG
  • .NET/C# 2.0对于P/Invoke支持的几处增强
  • 【随机文章】
  • qmail安装文档——目录
  • 跨浏览器XmlDocument操作的javascript
  • SQLServer注入工具改进版 v1.02
  • UNILAN®超五类水平铜缆
  • 原振侠默然不语,这时,他在迅速转着念:这个白化星人之所以出现,是追踪一个讯号而来,这种讯号,最初自然...
  • 为什么iexplore.exe在打开网页时CPU使用会100%?
  • tftp 用法 aix
  • 基于双绞线的千兆以太网1000Base-T与1000Base-TX
  • 用数组实现flash中的迷宫行走
  • 转dbms_stats包
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.