我常发现为了获得某个对象的指针和句柄,或者已知一个对象的指针想取得它的句柄,或者反之,经常浪费我很多的时间。其实只要有了对象的指针,就如鱼得水了。所以我希望我们一起来总结,每一条我给加一分,100条我结贴,另开一个。我会做一个最后的整理,供大家参考!书写格式最好按以下形式:
类型 功能 函数
如:
五、获取应用程序指针 AfxGetApp()
一、指针、句柄的相互转换:
1、由CDC的指针pDC,得到其相应的句柄用HDC hdc=pDC->GetSafeHdc()。
2、由逻辑调色板的指针LPLOGPALETTE pLogPal,得到逻辑调色板的句柄用m_hPalette=::CreatePalette(pLogPal)
3、由文件映射区的句柄m_hFileMap得到文件映射区得指针用m_pFileMap=MapViewOfFile(m_hFileMap,...)二、不同类型的句柄之间的转换:
1、由文件句柄得到文件映射区句柄,HANDLE hMap=::CreateFileMapping(hFile,...);三、不同类型的指针之间的转换:
1、由文档类指针获得视图类指针,POSITION GetFirstViewPosition() const;
CView *pView=GetNextView(POSITION&);
2、由视图指针获得文档类指针,GetDocument();四、句柄的获得:
1、获得文件句柄,HANDLE hFile = ::CreateFile(strPathname,...);五、指针的获得:
1、获得对话框上控件ID号为IDC_xxx的指针 (控件类名*)CWnd::GetDlgItem(IDC_xxx);
类型 功能 函数
如:
五、获取应用程序指针 AfxGetApp()
一、指针、句柄的相互转换:
1、由CDC的指针pDC,得到其相应的句柄用HDC hdc=pDC->GetSafeHdc()。
2、由逻辑调色板的指针LPLOGPALETTE pLogPal,得到逻辑调色板的句柄用m_hPalette=::CreatePalette(pLogPal)
3、由文件映射区的句柄m_hFileMap得到文件映射区得指针用m_pFileMap=MapViewOfFile(m_hFileMap,...)二、不同类型的句柄之间的转换:
1、由文件句柄得到文件映射区句柄,HANDLE hMap=::CreateFileMapping(hFile,...);三、不同类型的指针之间的转换:
1、由文档类指针获得视图类指针,POSITION GetFirstViewPosition() const;
CView *pView=GetNextView(POSITION&);
2、由视图指针获得文档类指针,GetDocument();四、句柄的获得:
1、获得文件句柄,HANDLE hFile = ::CreateFile(strPathname,...);五、指针的获得:
1、获得对话框上控件ID号为IDC_xxx的指针 (控件类名*)CWnd::GetDlgItem(IDC_xxx);
解决方案 »
- 一个很简单的读写锁模型,请高手帮忙看下会不会死锁,或者有哪些需要改进的地方?
- 都有哪些好的vc QQ群啊?
- MFC关于ADO读取SQL2008数据库
- 和B两张图片,找出B与A不同的部分,将不同的部分与A图片合成就是B图片
- 有一些代码看不懂,希望高手解答
- 如何使CPropertySheet填充至整个视图区域?
- 为什么我对256x256的图片二值化可以,对别的尺寸的就不可以??
- 怎样使用Ture Type字体,可以对输入的文字进行鼠标拖动以改变大小
- 急!如何写能钩中文输入的钩子?
- 请问哪儿有<<The Design and Evolution of C++>>下载,最好中文版.
- 请教!如何在vc中调用外接的exe文件?
- 救命啊,编译一条程序,竟然得到这么多的警告???
确实经常碰到这种问题的.先收藏了
句柄是windows用来标识创建和使用应用程序的唯一整数值,windows要用不同的句柄来标识相应程序的实例,窗口,菜单等.
大多数句柄是内部表的索引值.
应用程序几乎总是通过调用一个windows函数来获得句柄,这样其他windows函数可以使用该句柄,以引用相应的对象,windows应用程序往往只能存取句柄,而不能存取句柄所代表的实际数据.
指针则是代表一个对象在内存存放的其实地址.
两者都可以用来引用一个对象,就象一个把柄,抓住它就可以对之操作了.
文档/视结构经常存在相互调用.
在视里用GetDocment()可以得到文档类的指针.
在mainframe里调用GetActiveDocument()可以得到当前活动文档的指针.
其他的就不敢说了,记不得完整的函数名了.
文档模板对象记录了所有从该模板创建的活动文档对象的一个列表,我们可以通过virtual POSITION CDocTemplate::GetFirstDocPosition
得到第一个文档在列表中的位置。再通过virtual CDocument* CDocTemplate::GetNextDoc( POSITION& rPos ) const = 0得到下一个文档的指针。4、MDI应用程序中,获取应用程序主框架窗口的指针m_pMainWnd,用CWinApp* AfxGetApp( ); 这是因为在在InitInstance函数中m_pMainWnd = pMainFrame;
POSITION GetFirstDocTemplatePosition( ) const;得到列表中第一个模板的位置,通过CWinApp::GetNextDocTemplate
CDocTemplate* GetNextDocTemplate( POSITION& pos ) const;可以遍历列表,得到各个模板的指针,并同过3可得到文档指针。
6、AfxGetApp()->m_pMainWnd为框架窗口指针 7、在框架窗口中:CFrameWnd::GetActiveDocument得到当前活动文档指针 8、在框架窗口中:CFrameWnd::GetActiveView得到当前活动视指针 9、在文档中:CDocument::GetFirstViewPosition,CDocument::GetNextView用来遍历所有和文档关联的视。 10、在文档中:CDocument::GetDocTemplate得到文档模板指针 11、在多文档界面中:CMDIFrameWnd::MDIGetActive得到当前活动的MDI子窗口
帮着up一下。谢谢