添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

MFC在很多的对话框操作中,我们经常要用到在一个对话框中调用另一个对话框的函数或变量.可以用如下方法来解决.
HWNDhWnd=::FindWindow(NULL,_T("Sphere"));      //得到对话框的句柄
C***Dialog* pWnd= (C***Dialog*)C***Dialog::FromHandle(hWnd);//由句柄得到对话框的对象指针
pWnd->xxx( ); //调用C***Dialog中的函数xxx();
以上参考: http://www.cnblogs.com/del/archive/2008/02/28/1085432.html


通过窗口类函数:CWnd *GetWindow获得窗口指针,pWnd->m_hWnd(Thehandle of the Windows window attached to this CWnd)在::FromHandle(hWnd);

获取主窗口句柄:   CWnd*wnd = AfxGetMainWnd();
HWNDhwnd = wnd->GetSafeHwnd();

设置控件为窗口焦点:GetDlgItem(IDC_TREE1)->SetFocus();

获取控件句柄:HWND hwndctrl =::GetDlgItem(mainHwnd, IDC_TREE1);//获取树形控件的句柄IDC_TREE IDC_COMBO1

获取当前最上层窗口的句柄: HWND mainHwnd= ::GetForegroundWindow();//获取当前topmost的窗口句柄
获取当前窗口的焦点句柄:        HWND currentFocus= ::GetFocus();

(一)MFC中获得各个类的句柄总结

VC中编程,最大的障碍和问题就是消息机制和指针获取与操作。其实这些内容基本上是每本VC学习工具书上
必讲的内容,而且通过MSDN很多问题都能解决。下面文字主要是个人在编程中指针使用的一些体会,说的不当的地方请指正。一般我们使用的框架是VC提供的Wizard生成的MFC App Wizard(exe)框架,无论是多文档还是单文档,都存在指针获取和操作问题。
下面这节内容主要是一般的框架,然后再讲多线程中的指针使用。使用到的类需要包含响应的头文件。首先一般获得本类(视,文档,对话框都支持)实例指针this,用this的目的,主要可以通过类中的函数向其他类或者函数中发指针,以便于在非本类中操作和使用本类中的功能。
这其中的关键在于理解 m_pMainWnd, AfxGetApp(),AfxGetMainWnd()的意义!
1) 在View中获得Doc指针
CYouSDIDoc *pDoc=GetDocument();一个视只能有一个文档。
2) 在App中获得MainFrame指针
CWinApp 中的 m_pMainWnd变量就是MainFrame的指针,也可以: CMainFrame *pMain =(CMainFrame *)AfxGetMainWnd();
3) 在View中获得MainFrame指针
CMainFrame *pMain=(CmaimFrame *)AfxGetApp()->m_pMainWnd;
4) 获得View(已建立)指针
CMainFrame *pMain=(CmaimFrame *)AfxGetApp()->m_pMainWnd;
CyouView *pView=(CyouView *)pMain->GetActiveView();
5) 获得当前文档指针
CDocument * pCurrentDoc =(CFrameWnd *)m_pMainWnd->GetActiveDocument();
6) 获得状态栏与工具栏指针
CStatusBar * pStatusBar=(CStatusBar*)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_STATUS_BAR);
CToolBar * pToolBar=(CtoolBar*)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_TOOLBAR);
7) 如果框架中加入工具栏和状态栏变量还可以这样
(CMainFrame *)GetParent()->m_wndToolBar;
(CMainFrame *)GetParent()->m_wndStatusBar;
8) 在Mainframe获得菜单指针
CMenu *pMenu=m_pMainWnd->GetMenu();
9) 在任何类中获得应用程序类
AfxGetInstanceHandle 得到句柄,AfxGetApp得到指针
B1.如何在自己的类和“应用程序类”中获得“文档类”的句柄?
SDI AfxGetMainWnd() -> GetActiveView() -> GetDocument() 得到指针
MDI AfxGetMainWnd() -> MDIGetActive() -> GetActiveView()-> GetDocument() 得到指针
B3.如何在“框架类”中获得“文档类”句柄?
SDI GetActiveView() -> GetDocument() 得到指针,MDIMDIGetActive() -> GetActiveView() -> GetDocument() 从 CMainFrame 得到指针,GetActiveView() -> GetDocument()从 CChildFrame 得到指针
B4.如何在“视图类”中获得“文档类”句柄?
GetDocument()
C1.如何在“文档类”中获得“视图类”句柄?
GetView(),调用 GetFirstViewPosition 和 GetNextView 函数得到指针。
C2.如何在自己的类和“应用程序类”中获得“视图类”句柄?
SDI GetActiveView 得到指针
MDI MDIGetActive() -> GetActiveView() 从 CMainFrame 得到指针,GetActiveView 从 CChildFrame 得到指针

最后提醒大家,在提取到各个句柄之后,因为初次提取的都是标准类句柄,所以,在使用时要注意将标准句柄转换成自己的类的句柄。如:
AfxGetApp();//得到的是WinApp类的句柄,
所以操作前记得转换成自己定义的类的句柄。
如:((CMyApp*)AfxGetApp())->XXXX();//这的xxxx()就是你定义的类中间的成员。
(二)MFC中句柄、指针、ID之间的转换
win32直接操作的是句柄HANDLE,每个句柄就对应windows窗口,而vc对HANDLE进行类封装,间接操作的都是HANDLE,现在句柄只是类的一个成员变量。
从句柄到指针
CWnd* pWnd=CWnd::FromHandle(hWnd); //a temporary CWnd object iscreated //and attached.
pWnd->Attach(hWnd); //Attaches a Windows window to a CWndobject
从指针到句柄
HWND hWnd=pWnd->GetSafeHandle();
hWnd=pWnd->m_hWnd;
SDK编程中窗口ID,句柄,指针三者相互转换函数
ID--HANDLE--HWND三者之间的互相转换
id->句柄-----------hWnd= ::GetDlgItem(hParentWnd,id);
id->指针-----------CWnd::GetDlgItem();
句柄->id-----------id =GetWindowLong(hWnd,GWL_ID);
句柄->指针--------CWnd *pWnd=CWnd::FromHandle(hWnd);
指针->ID----------id= GetWindowLong(pWnd->GetSafeHwnd,GWL_ID);
GetDlgCtrlID();
指针->句柄--------hWnd=cWnd.GetSafeHandle()or mywnd->m_hWnd;
HICON->ID--------HICON hIcon =AfxGetApp()->LoadIcon(nIconID);
HICON hIcon = LoadIcon(AfxGetApp()->m_hInstance,MAKEINTRESOURCE(nIconID));

附注:获得窗口句柄三种方法
1.HWND FindWindow(LPCTSTR lpClassName,LPCTSTR lpWindowName)
HWND FindWindowEx(HWNDhwndParent, HWND hwndChildAfter,LPCTSTR lpClassName, LPCTSTR lpWindowName)
2.HWND WindowFromPoint(POINT& Point)//获得当前鼠标光标位置的窗口HWND

本文来自CSDN博客: http://blog.csdn.net/cy757/archive/2009/08/07/4423756.aspx

VC++中有关句柄和指针及其转换
1.MFC窗口的句柄和指针的转换
(1) 一般窗口对象都会有一个其对应的句柄变量,所以我们可以取此对象的m_hWnd属性来得到句柄。
(2)使用GetSafeHwnd函数取得程序所在窗口类的句柄
(3)使用FromHandle函数来通过句柄得到其想要的指针
其他的一些方法:
GetActiveWindow 取当前活动窗口句柄
AfxGetMainWnd   取主窗口句柄
GetForegroundWindow 取前台窗口句柄
FindWindow寻找参数指定的窗口
EnumWindow枚举窗口
2. 上下文无关设备的句柄和指针的转换
(1)this->m_hDC
(2)CDC::GetSafeHdc
(3)可以使用FromHandle函数来通过句柄得到其想要的指针
3.Gdi对象的句柄和指针的转换
(1)this->m_hObject
(2)CGdiObject::GetSafeHandle
(3)可以使用FromHandle函数来通过句柄得到其想要的指针
4.窗口、控件的指针和句柄的相互转化
(1)指针转化为句柄
在MFC应用程序中首先要获得窗口的指针,然后将其转化为句柄
CWnd* pWnd;
HANDLE hWnd = pWnd->GetSafeHwnd();
(2)句柄转化为指针
在MFC应用程序中首先获得对话框控件的句柄,然后获得其指针
HANDLE hWnd;
GetDlgItem(IDC_xxx,&hWnd);
CWnd * pWnd = FromHandle(hWnd);
获得程序窗口指针的办法
(1)获得主框架窗口指针(任何时候都可以用,只要是MFC程序中)
CWnd* pWnd = AfxGetMainWnd();
(2)获得对话框中控件指针
CWnd* pWnd = GetDlgItem(IDC_xxx);
(3)获得对话框中某控件的句柄
HANDLE GetDlgItem(m_hDLG,m_nID_DlgItem);
(4)获得GDI对象的句柄
HANDLE m_hGDIObj = m_pGDIObj->GetSafeHanle();

MFC在很多的对话框操作中,我们经常要用到在一个对话框中调用另一个对话框的函数或变量.可以用如下方法来解决.HWNDhWnd=::FindWindow(NULL,_T("Sphere")); //得到对话框的句柄C***Dialog* pWnd= (C***Dialog*)C***Dialog::FromHandle(hWnd);//由句柄得到对话框的对象指针pWnd->xx...
本文主要介绍C++中的四个智能 指针 :auto_ptr、unique_ptr、shared_ptr、weak_ptr。其中auto_ptr已经被弃用,原因我们下面说。 为什么要使用智能 指针 ? 首先看下面一段代码: void func() int *p=new int(1); return 0; 在这段代码中,我们使用了new在堆上开辟一个空间,但是我们在函数结束的时候并没有用delet...
近日在论坛上发一帖子: MFC 控件类 指针 、new和GetDlgItem ,该代码是我使用VC6新建的一个工程。因很多人使用VC6,特新建一个这样的工程。但尽管如此,我所提到的问题依然存在,没有变化。希望各位高手、大侠和热心人士可以帮忙解决!谢谢! 原帖:http://topic.csdn.net/u/20101014/15/7a4e8009-0176-4219-b070-1c6666e9d6f9.html
指向 对象 指针 在建立 对象 的时候,变异系统会给每一个 对象 分配一定的存储空间,以存放其成员。 对象 空间的起始地址就是 对象 指针 。可以定义一个 指针 变量,用来存放 对象 指针 。 一个简单的示例1.1: #include<iostream> using namespace std; class Student public: int num; int sco...
到目前为止,编写的程序中所使用的 对象 都有着严格定义的生存期。全局 对象 在程序启动时分配,在程序结束时销毁。对于局部自动 对象 ,当我们进入其定义所在的程序块时被创建,在离开块时销毁。局部static 对象 在第一次使用前分配,在程序结束时销毁。 文章目录前言动态内存与智能 指针 shared_ptr 类make_shared函数shared_ptr 的拷贝和赋值shared_ptr自动销毁所管理的 对象 shared_ptr还会自动释放相关联的内存 除了自动和static 对象 外,C++还支持动态分配 对象 。动态分配的
窗口 程序中,很多时候需要调用其他 窗口 的函数,例如在其他 窗口 操作后需要在log信息 窗口 打印log信息。 这里采用全局 窗口 指针 以及postmessage的方法实现。 现希望从testDlg 窗口 的OnBnClickedButton2()调用CfiletestDlg 窗口 的OnBnClickedButton1()函数,即在testDlg 窗口 点击一个按钮后调用CfiletestDlg 窗口 的一个按钮的点击函数。 获取 窗口 指针 要想调用其他 窗口 的函数,首先要明确 窗口 也是一个类,界面上显示的 窗口 是这一个 窗口 类创建的一
一、关于 窗口 句柄 首先讲一下 MFC 中句柄的概念,句柄是一种资源标识,他是一个整数,由操作系统分配,用户(程序员)没法指定。举个例子来说,当你创建了一个对话框,那么系统就会为这个对话框分配一定的资源,并且为这个资源分配一个整数来标识这块资源,那么这个整数就是句柄。 什么是资源,资源当然就是内存,堆栈。对话框的所有资源封装在一个类中,形成自己的数据结构,这个数据结构占用系统的一块内存。
可以使用 GetDlgItem 函数来 获取 界面中控件的 指针 ,该函数接受一个控件的 ID 作为参数,返回一个指向该控件的 CWnd 对象 指针 。例如: CWnd* pWnd = GetDlgItem(IDC_MY_BUTTON); 其中 IDC_MY_BUTTON 是控件的 ID。
OpenCV(4.8.0) Error: Gpu API call (cuDNN did not return a suitable algorithm for convolution.) QImage打开分辨率大的图片会报错:QImageIOHandler: Rejecting image