[DllImport("user32.dll", EntryPoint = "SendMessage")]
public static extern int SendMessage(int hWnd, int wMsg,int wParam, int IParam)
[DllImport("user32.dll", EntryPoint = "ReleaseCapture")]
public static extern int ReleaseCapture()
public const int WM_SysCommand = 0x0112
public const int SC_MOVE = 0xF012
public static void MoveForm(int pr)
ReleaseCapture()
SendMessage(pr, WM_SysCommand, SC_MOVE,0)
}
SendMessage是窗口行为一个外部定义的函数,没有user32.dll可以去下个,不过开发环境都自带了
需要移动的地方就调用
MoveForm(this.Handle.ToInt32())
this.Handle就是当前窗口句柄了
给点分吧...
窗口处理函数中加入WM_MOUSEMOVE消息,然后编写鼠标消息处理函数OnMouseMove,当然,鼠标消息不止这一个,具体请查看msdn键盘:添加WM_KEYDOWN/WM_KEYUP/WM_CHAR消息,这三个消息的具体请查看msdn,然后就可以编写消息消息处理函数了!
句柄(HANDLE)不是C#中的概念,而是win32 API中的。C#中常通过DllImport的的方式获取窗体或其它对象的句柄。
句柄可以理解为用于标识内存中的一个“资源”,这些资源如:文件(file)、内存块(block of memory)、菜单(menu)、控件(control)、窗体(window)等等。 *** 作系统通过句柄来定位核心对象和系统资源。
有些人会认为句柄就是指针,其实句柄与C/C++中的指针是完全不同的两个概念。句柄仅仅是一个32位整数,在WIN32中用于管理某个系统或进程的对象,可以理解为对象的“索引”(相当于公民的身份z(ID)一样,一个身份z标识唯一一个对象),这个索引更像是一种映射关系(从句柄到对象指针的映射),而不是纯粹意义上的“指向对象的地址”。
而指针则要相对直观一些,它直接对应着一个数据在内存中的地址,得到了指针就可以自由地修改该地址中的数据。Windows系统为了安全起见,并不希望普通程序轻易修改其内部数据结构,所以Windows给每个使用GlobalAlloc等函数声明的内存区域注册登记一个句柄,平时你只是在调用API函数时利用这个句柄间接访问某个内存区域。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)