zoukankan      html  css  js  c++  java
  • VC中句柄、指针、ID之间的转换

    win32直接操作的是句柄HANDLE,每个句柄就对应windows窗口,而vc对HANDLE进行类封装,间接操作的都是HANDLE,现在句柄只是类的一个成员变量。

    从句柄到指针
    CWnd* pWnd=CWnd::FromHandle(hWnd); //a temporary CWnd object is created //and attached.
    pWnd->Attach(hWnd); //Attaches a Windows window to a CWnd object

    从指针到句柄
    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(HWND hwndParent, 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();

    本文来自CSDN博客:http://blog.csdn.net/lovegod12/archive/2009/04/19/4092249.aspx

  • 相关阅读:
    记录百度编辑器bug(在编辑框输入光标到达页面最底部时,功能区块会悬浮在页面最顶部并且与编辑框分离)
    ThinkPHP5实用的数据库操作方法
    Windows10专业工作站版激活方法
    ThinkPHP5验证码不显示的原因及解决方法
    PHPExcel导出工作蒲(多表合并)教程+详细代码解读
    将input file的选择的文件清空的两种解决方案
    微信公众号网页开发——阻止微信客户端内点击任何图片自动放大
    开发中能快速定位错误也是技术的表现,附上【Chrome开发者工具官方中文文档】
    thinkPHP5 报错session_start(): No session id returned by function解决方法
    Linux安装PHPRedis扩展
  • 原文地址:https://www.cnblogs.com/lidabo/p/2576400.html
Copyright © 2011-2022 走看看