原文网址:http://www.pythonschool.com/CPP_JHK/5003.html

    1. 获取所在类窗口的句柄

  1. this->m_hwnd; // this是一个指针,指向当前类的实例
    1. 主窗口的句柄,获取自身窗口句柄

  1. AfxGetMainWnd()->m_hWnd; // 在主窗口类中,或是子窗口类中,获取主窗口句柄的方法
  2. 如:::SendMessage(AfxGetMainWnd()->m_hWnd , WM_MY_DOSOME , 0 ,(LPARAM)i);
  3. this->GetSafeHwnd()
  4. // 如何安全获得一个窗口句柄指针
  5. 当我们想得到一个窗口对象(CWnd的派生对象)指针的句柄(HWND)时,最安全的方法是使用GetSafeHwnd()函数,通过下面的例子来看其理由:
  6. CWnd *pwnd = FindWindow(“ExploreWClass”,NULL); //希望找到资源管理器
  7. HWND hwnd = pwnd->m_hwnd; //得到它的HWND
  8. 这样的代码当开始得到的pwnd为空的时候就会出现一个“General protection error”,并关闭应用程序,因为一般不能对一个NULL指针访问其成员,如果用下面的代码:
  9. CWnd *pwnd = FindWindow(“ExploreWClass”,NULL); //希望找到资源管理器
  10. HWND hwnd = pwnd->GetSafeHwnd(); //得到它的HWND
  11. 就不会出现问题,因为尽管当pwndNULL时,GetSafeHwnd仍然可以用,只是返回NULL,通过GetSafeHwnd()的实现代码就更清楚了:
  12. _AFXWIN_INLINE HWND CWnd::GetSafeHwnd() const
  13. {
  14. return this == NULL?NULL:m_hWnd;
  15. } 注释:该函数先判断调用者是否为空
  16. 你看有很多函数的参数要求HWND,它就可以派上用场了.
  17. HWND hwnd;
  18. CWnd* pWnd;
  19. pWnd=((CFrameWnd*)(AfxGetApp()->m_pMainWnd))->GetActiveView();
  20. hwnd=pWnd->GetDlgItem(IDC_EDIT2)->GetSafeHwnd();
  21. ::SetWindowText(hwnd,m_strResult);
    1. 子窗口句柄用FindWindow,(只要知道子窗口的名字即可)

  1.  ::FindWindow(NULL,WindowsName)  // 返回找到的窗口的句柄
  2. // 寻找当前窗口是否在运行windowname的程序,该名字为窗口名字,如:
  3. CWnd* pWnd=FindWindow(NULL,_T("记事本"));//
    1. 获取窗口中控件的句柄,用GetDlgItem

  1. CWnd   *pWnd   =   GetDlgItem(ID_***); // 取得控件的指针 
  2. HWND hwnd = pWnd->GetSafeHwnd();  // 取得控件的句柄  
  3. 语法为:GetDlgItem(IDC_COMBO3)->m_hWnd // 参数为 该控件的ID,返回值为:CWnd* 类型,但它是CWnd类内的函数,因此要先获取控件所在窗口的指针,如:
  4. CString str(_T("dd"));
  5. ::SendMessage(AfxGetMainWnd()->GetDlgItem(IDC_COMBO3)->m_hWnd, WM_SETTEXT , 0 , (LPARAM)str.GetBuffer(0));
    1. 从句柄获得指针,用 FromHandle

  1. 语法:CWnd* pWnd = CWnd::FromHandle(hWnd);
    1. 获得窗口句柄相关函数方法

  1. this->m_hwnd
  2. GetSafehWnd 取你程序所在窗口类的句柄
  3. GetActiveWindow 取当前活动窗口句柄
  4. AfxGetMainWnd 取主窗口句柄
  5. GetForegroundWindow 取前台窗口句柄
  6. FindWindow
  7. EnumWindow
    1. GetTopWindow?

  1. GetTopWindow?
  2. 函数功能:该函数检查与特定父窗口相联的子窗口z序(Z序:垂直屏幕的方向,即叠放次序),并返回在z序顶部的子窗口的句柄。?
  3. 函数原型:HWND?GetTopWindow(HWND?hWnd);?参数:?
  4. ??hWnd:被查序的父窗口的句柄。如果该参数为NULL,函数返回Z序顶部的窗口句柄。?
  5. 返回值:??如果函数成功,返回值为在Z序顶部的子窗口句柄。如果指定的窗口无子窗口,返回值为NULL
    1. GetForegroundWindow

  1. GetForegroundWindow
  2. 函数功能:该函数返回当前系统的前台窗口的窗口句柄。
  3. 函数原型:HWND GetForegroundWindow(VOID)  
  4. 返回值:函数返回前台窗回的句柄。
    1. GetActiveWindow

  1. 函数功能:该函数可以获得与调用该方法的线程的消息队列相关的活动窗口的窗口句柄(就是取得当前进程的活动窗口的窗口句柄)。
  2. 函数原型:HWND GetActiveWindow(VOID)
  3. 返回值:返回值是与调用线程的消息队列相关的活动窗口的句柄。否则,返回值为NULL
    1. IsWindowVisible

  1. 函数功能:该函数获得给定窗口的可视状态。
  2. 函数原型:BOOL IsWindowVisible(HWND hWnd);
  3. 参数;
  4.   hWnd:被测试窗口的句柄。
  5. 返回值:
  6.     如果指定的窗口及其父窗口具有WS_VISIBLE风格,返回值为非零;如果指定的窗口及其父窗口不具有WS_VISIBLE风格,返回值为零。由于返回值表明了窗口是否具有Ws_VISIBLE风格,
  7.     因此,即使该窗口被其他窗口遮盖,函数返回值也为非零。
  8. 备注:
  9.     窗口的可视状态由WS_VISIBLE位指示。当设置了WS_VISIBLE位,窗口就可显示,而且只要窗口具有WS_VISIBLE风格,任何画在窗口的信息都将被显示。
    1. IsWindow

  1. 函数功能:该函数确定给定的窗口句柄是否标示一个已存在的窗口。 
  2. 函数原型:BOOL IsWindow(HWND hWnd);
  3. 参数:
  4.     hWnd:被测试窗口的句柄。
  5. 返回值:
  6.     如果窗口句柄标识了一个已存在的窗口,返回值为TURE;如果窗口句柄未标识一个已存在窗口,返回值为FALSE
    1. FindWindow

  1. HWND FindWindow(LPCSTR lpClassName,LPCSTR lpWindowName );
  2. 参数:
  3. lpClassName
  4.   指向一个以null结尾的、用来指定类名的字符串或一个可以确定类名字符串的原子。如果这个参数是一个原子,那么它必须是一个在调用此函数前已经通过GlobalAddAtom函数创建好的全局原子。
  5. 这个原子(一个16bit的值),必须被放置在lpClassName的低位字节中,lpClassName的高位字节置零。
    1. lpWindowName

  1.   指向一个以null结尾的、用来指定窗口名(即窗口标题)的字符串。如果此参数为NULL,则匹配所有窗口名。
  2. 返回值:
  3. 如果函数执行成功,则返回值是拥有指定窗口类名或窗口名的窗口的句柄。
  4.   如果函数执行失败,则返回值为 NULL 。可以通过调用GetLastError函数获得更加详细的错误信息。
  5. 来说个应用,窗口标题的改变,我们可以通过SetWindowText来实现:
  6. 注:如果窗口本身属性是不显示标题的,这个函数的调用不会影响窗口属性。
  7. //Set title for application’s main frame window .
  8. AfxGetMainWnd ( ) -> SetWindowText (_T("Application title") )
  9. //Set title for View’s MDI child frame window .
  10. GetParentFrame ( ) -> SetWindowText ("_T ("MDI Child Frame new title") )
  11. //Set title for dialog’s push button control.
  12. GetDigitem (IDC_BUTTON) -> SetWindowText (_T ("Button new title ") )
    1. 取得CDC的指针

  1. CDC* pdc = pwnd->GetWindowDC();
  • MFC各类中获取类指针详解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
使用到的类需要包含响应的头文件。首先一般获得本类(视,文档,对话框都支持)实例指针 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得到指针
最后提醒大家,在提取到各个句柄之后,因为初次提取的都是标准类句柄,所以,在使用时要注意将标准句柄转换成自己的类的句柄。
如:
AfxGetApp();//得到的是WinApp类的句柄,
所以操作前记得转换成自己定义的类的句柄。
如:
((CMyApp*)AfxGetApp())->XXXX();//这的xxxx()就是你定义的类中间的成员。

【转】MFC窗口句柄各类指针获取函数的更多相关文章

  1. MFC 获得各类指针、句柄的方法(转)

    原文转自 https://blog.csdn.net/abcjennifer/article/details/7480019 1.MFC中获取常见类句柄<视图类,文档类,框架类,应用程序类> ...

  2. MFC获取各类指针句柄

    最近有些人在问MFC编程一些要点,有一些句柄的获取.指针的获取是常见的问题,本文将对这些问题做以解释,参考了前人的笔录(见reference),希望能够帮助大家更方便地进行MFC程序开发. 一般我们使 ...

  3. MFC中 SDI/MDI框架各部分指针获取方式

    VC MFC SDI/MDI框架各部分指针获取方式   整理总结一下,希望能帮助到别人.   获得CWinApp 获得CMainFrame 获得CChildFrame 获得CDocument 获得CV ...

  4. MFC框架各部分指针获取方式

    MFC框架各部分指针获取方式 前人在CSDN总结的,曾经帮助过我,整理总结一下,希望也能帮助一下别人. 获得CWinApp 获得CMainFrame 获得CChildFrame 获得CDocument ...

  5. 浅谈MFC类CrackMe中消息处理函数查找方法

    最近一个学姐发给我了一份CrackMe希望我解一下,其中涉及到了MFC的消息函数查找的问题,就顺便以此为例谈一下自己使用的消息函数查找的方法.本人萌新,如果有任何错漏与解释不清的地方,欢迎各路大佬指正 ...

  6. mfc 调用Windows的API函数实现同步异步串口通信(源码)

    在工业控制中,工控机(一般都基于Windows平台)经常需要与智能仪表通过串口进行通信.串口通信方便易行,应用广泛. 一般情况下,工控机和各智能仪表通过RS485总线进行通信.RS485的通信方式是半 ...

  7. Day8 函数指针做函数参数

    课堂笔记 课程回顾         多态 virtual关键字 纯虚函数 virtual func() = 0;         提前布局vptr指针 面向接口编程 延迟绑定 多态的析构函数的虚函数. ...

  8. 用C语言指针作为函数返回值

    转载:http://c.biancheng.net/cpp/html/3242.html C语言允许函数的返回值是一个指针(地址),我们将这样的函数称为指针函数.下面的例子定义了一个函数 strlon ...

  9. Delphi 版本信息获取函数 GetFileVersionInfo、GetFileVersionInfoSize、VerFindFile、VerInstallFile和VerQueryValue

    一.版本信息获取函数简介和作用 获取文件版本信息的作用: 1. 避免在新版本的组件上安装旧版本的相同组件: 2. 在多语言系统环境中,操作系统根据文件版本信息里提供的语言信息在启动程序时决定使用的正确 ...

随机推荐

  1. quartz.net 基于数据库的简单实现

    前面简单学习了通过XML配置或者内存指定的方式实现调度任务.但此用法实战用途较小,企业上多需要分布式集群的方式.quart团队也考虑到了这点,于是有了我们今天要学习的.基于数据库实现分布式. Name ...

  2. J2EE入门必备

    1,J2EE是什么 J2EE(Java 2 platform Enterprise Edition)是软件平台,适于创建服务器端的大型应用软件和服务系统. J2EE适合开发大规模的业务系统,这种级别的 ...

  3. 网站集A的子网站B上没有解决方案C发布的webpart

    在A的主站点,查看解决方案C在该网站集的feature,若未打开,则打开:若已经打开,可以先关闭再打开一次. 如果问题依然存在,可以查看子网站B上的feature是否打开,若未打开,则打开:若已经打开 ...

  4. c# HttpWebRequest与HttpWebResponse 绝技(转载)

    c# HttpWebRequest与HttpWebResponse 绝技    如果你想做一些,抓取,或者是自动获取的功能,那么就跟我一起来学习一下Http请求吧.本文章会对Http请求时的Get和P ...

  5. 日志记录组件[Log4net]详细介绍

    转载:http://www.cnblogs.com/liwei6797/archive/2007/04/27/729679.html 因为工作中有要用到Log记录,找到一篇不错的文章,就转了过来. 一 ...

  6. 快速消除IOS 版本升级带来的警告

    开发中我们经常会遇到这样的情况,我们在IOS 6.0开发的程序,当出现IOS 7.0 或者IOS8.0的时候,我们代码中得某些方法苹果已经不推荐使用了,建议我们改用新的方法.如果我们不更新方法,则会出 ...

  7. artDialog.js的使用

    开发项目中用到了artDialog.js,从而专门学习一下如何配置和使用. 一.artDialog是什么 artDialog是一个精巧的web对话框组件,压缩后只有十多KB,并且不依赖其他框架. 二. ...

  8. js 判断一个点是否在一个多边形之内

    出处: https://github.com/substack/point-in-polygon/blob/master/index.js github: https://github.com/sub ...

  9. PreResultListener使用

    PreResultListener是一个监听器接口,可以在Action处理完之后,系统转入实际视图前被回调. Struts2应用可以给Action.拦截器添加PreResultListener监听器, ...

  10. jquery添加元素

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <head> ...