句柄HANDLE与指针Pointer有多大区别?

Europa 2004-10-10 11:28:27
两次写代码都遇到一个同样的迷惑。MFC中的CArray类使用POISTION结构说明元素位置,从形式上看它好像是个指针,但是从它的实现代码看(ARRAYCORE.cpp)它是声明的一个没有成员的空结构。那么问题来了,为什么在有一些情况下必须用这样的空结构,不直接使用指针呢?我的理解是指针是结构指针的基础形式,这么使用结构指针是出于结构类型的存储器结构特殊,请问是否是这样的?
还有一个就是,窗口指针hWnd与单纯指针之间到底存在什么区别?为什么HDC、HWND这些句柄都是结构指针,因为我是错误提示中看到的是“__stdcall struct HDC_* ……”。我做一个用SetWindowRgn函数裁剪窗口形状,要求这个窗口即是被裁剪的要求形状,又必须能够改变尺寸,但是程序中没办法避免这项工作在WM_SIZE或WM_WINDOWPOSCHANGED消息中进行,问题是一旦使用SetWindowRgn就或引发WM_WINDOWPOSCHANGING,这样WM_SIZE和WM_WINDOWPOSCHANING之间就存在消息冲突,使尺寸变化过程的性能很差,即使我在WINDOWPOSCHANING消息排除了SWP_FRAMECHANGED标志也存在右边沿和下边沿绘图滞后的情况,所以我设想在窗口初始化时设置剪切区域,在SIZE消息中直接控制这个区域尺寸,由于给窗口设置的这个区域是窗口的内部存储域,位置将自动跟随窗口,我只需要控制它的cx和cy即可,但我查遍了MSDN所有关于区域的说明都无法找到能够直接操作区域的函数。所以我想能不能保持区域指针去对这个指针进行操作,windows没有提供能够获取区域数据指针的函数,我想是不是能从句柄找到,请问这样是否可行?比如窗口句柄是否就是窗口内容的头指针?如果是,区域数据与它的偏移量是多少?我见过一个实例是将VB与C++代码运行在同样Private数据空间的代码,它能够通过C++汇编代码控制窗口的解释数据,我想同样的方法应该可以搜索到其他数据段,但是一个窗口的结构大小至少800K以上,并且可能不同的操作系统的存储位置还不同,所以问问是不是有更好的办法?
...全文
296 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Venda 2004-10-10
  • 打赏
  • 举报
回复
问题描述太长了,看不下去,我刚才内部对象指的是与该进程相关的内核对象
Venda 2004-10-10
  • 打赏
  • 举报
回复
进程内部对象的句柄只是简单的如1、2、3之类的索引值,而指针是地址,两者两回事。
smartcomplier 2004-10-10
  • 打赏
  • 举报
回复
只能UP

Europa 2004-10-10
  • 打赏
  • 举报
回复
简单点说,我用SetWindowRgn剪切一个异型窗口,有没有办法直接控制这个剪切区域的宽高度,而不重新使用SetWIndowRgn???

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧