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

     
     
    分类: VC/MFC
  • 相关阅读:
    Uniapp实现微信小程序云开发
    laravel 打印日志
    windbg 学习笔记
    Spring事务,非事务方法调用事务方法,事务不生效
    MyBatis 流式查询
    写代码有这16个好习惯,可以减少80%非业务的bug
    IDEA 神级插件推荐
    OUTLOOK添加企业邮箱
    Win10环境中MATLAB R2020b安装及破解全过程讲解
    scala function vs method
  • 原文地址:https://www.cnblogs.com/thbCode/p/3755552.html
Copyright © 2011-2022 走看看