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

  • 相关阅读:
    程序打印的日志哪里去了?结合slf4j来谈谈面向接口编程的重要性
    vue项目用npm安装sass包遇到的问题及解决办法
    nginx反向代理配置及常见指令
    你以为你以为的就是你以为的吗?记一次服务器点对点通知的联调过程
    jeecg逆向工程代码的生成及常见问题
    java注解
    终于有了,史上最强大的数据脱敏处理算法
    SpringBoot项目下的JUnit测试
    递归方法
    练习题
  • 原文地址:https://www.cnblogs.com/lidabo/p/2576400.html
Copyright © 2011-2022 走看看