句柄类 windows核心对象
来源:互联网 发布:思迅软件报价 编辑:程序博客网 时间:2024/05/18 17:44
首先,你要明白Windows对象和C++对象的区别。
C++对象(即MFC类CWnd)实际上并没有把整个Windows对象都包装在其中,它只是有一个窗口句柄。(在MSDN上查看CWnd类的成员变量,确实只有一个HWND hWnd,成员函数有Attach()和Dettach()、Create()等)。这个窗口句柄如果指向一个实际存在的窗口对象,那么这个C++对象就是有效的,否则这个MFC对象是空的。
如果你还不明白,请回忆一下,当我们使用MFC创建一个窗口时,是分两步进行的:
第一步,new一个CWnd对象,这一步是创建C++对象,但是其中的HWND还是非法的,因为对应的Windows对象还没有被创建出来;
第二步,调用CWnd的成员函数Create创建真正的Windows对象,同时,把先前创建的MFC的CWnd对象的HWND成员指向该窗口,这样才算创建完毕一个窗口。
而如果你是用SDK方式,那么只要创建一个WNDCLASS结构,然后调用Create或者CreateEx就创建了一 个窗口。
一. attach()和detach()的用法
用Attach:其实就是让一个C++对象——CWnd对象的HWND成员等于这个窗口句柄。这就是Attach主要完成的任务。
第二个,关于Detach。如前所述,WNDCLASS其实和CWnd根本没有什么关系。它们之间只是通过CWnd的成员HWND联系起来的。如果把 Attach看做“联姻”的话,那么Detach就是“离婚”了,通俗地说,就是切断一个CWnd对象和一个有效窗口的脐带。为什么要切断呢?因为 CWnd是C++的对象,C++的对象有一个生存期的概念,脱离了该对象的作用域,这个对象就要被销毁,但是Windows对象没有这个特点,当销毁 CWnd对象的时候,我们不一定希望WNDCLASS一起被销毁,那么在此之前,我们就先要把这个“脐带”剪断,以免“城门失火,殃及池鱼”。
void CMyCapView::OnLButtonUp(UINT nFlags, CPoint point){ // TODO: 在此添加消息处理程序代码和/或调用默认值 CMyCapDoc* pDoc=(CMyCapDoc*)GetDocument(); if (m_nStatus==1) { CWnd srcWnd; //将一个窗口attach到一个CWnd对象上。原因如下句注释;具体见CSDN笔记 //MSDN原文:Attaches a Windows window to a CWnd object. srcWnd.Attach(hwndCapture); //CaptureDIB函数参数要求是CWnd类的指针,所以不能直接用hwndCapture,而要将hwndCapture跟一个 //CWnd对象结合起来,使这个CWnd对象就是hwndCapture指向的窗口。 pDoc->m_dib.CaptureDIB(&srcWnd,rectCapture); //终止鼠标捕获 ReleaseCapture(); //恢复窗口显示模式 CMyCapApp* theApp=(CMyCapApp*)AfxGetApp(); theApp->m_pMainWnd->ShowWindow(SW_NORMAL); m_nStatus=0; srcWnd.Detach(); Invalidate(false); } CView::OnLButtonUp(nFlags, point);}
注意:
所有临时MFC对象和持久(permanent)MFC对象都是以线程为单位进行维护管理的。也就是说,一个线程不能够访问另一个线程的MFC包装类对象,不管它是临时的还是持久的。
#include <windows.h>void fun1(void);void fun2(void);void fun3(void);void fun4(void);int main(int argc,char*argv[]){while(1){fun1();fun2();Sleep(100);}return 0;}void fun1(void){fun3();}void fun2(void){fun4();}void fun3(void){HANDLE hEvent;hEvent=CreateEvent(NULL,TRUE,TRUE,NULL);CloseHandle(hEvent);}void fun4(void){HANDLE hEvent2;hEvent2=CreateEvent(NULL,TRUE,TRUE,NULL);//这里只打开但是没关闭句柄}
一般可以在windows任务管理器中查看句柄数。
- 句柄类 windows核心对象
- windows核心编程--内核对象和句柄泄漏
- windows核心编程--内核对象和句柄泄漏
- Windows核心编程笔记(三) 内核对象与句柄
- Windows核心编程---句柄和伪句柄
- 《windows核心编程系列》三谈谈内核对象及句柄的本质
- 《windows核心编程系列》三谈谈内核对象及句柄的本质
- 读书笔记----《windows核心编程》第三章 内核对象1(句柄与安全性)
- 《windows核心编程系列》三谈谈内核对象及句柄的本质
- Windows核心编程笔记(1)----句柄
- Windows的核心对象
- Windows对象、句柄与MFC对象
- Windows对象、句柄与MFC对象
- Windows对象、句柄与MFC对象
- Windows对象、句柄与MFC对象
- .NET对象与Windows句柄(一):句柄的基本概念
- TN003: 映射Windows句柄到对象
- Windows进程内核对象句柄表
- svn服务器配置
- 数据库三范式经典实例解析(转)
- Android系列链接(android,android_jni_c,3D游戏)
- ODBC:m_pSet->GetRecordCount;m_MSFGrid显示
- 愚丫头您要好好的
- 句柄类 windows核心对象
- c++程序员相关书籍
- 整理出来的一些Android基础知识
- java例程练习(用HashMap记录控制台输入)
- Andriod数据推送方案
- SDK方式防止List Control控件更新闪烁
- 局域网简单访问共享配置与检查步骤
- Android中dp和px之间进行转换
- IOS成长之路-NSDate