精华内容
下载资源
问答
  • HANDLE HINSTANCE HWND CWnd CDC  转载地址: http://mangshe0.blog.163.com/blog/static/19678147201002915718252/?fromdm&fromSearch&isFromSearchEngine=yes Windows最基本的变量 句柄: 句柄,把柄...

    HANDLE HINSTANCE HWND CWnd CDC  

    转载地址: http://mangshe0.blog.163.com/blog/static/19678147201002915718252/?fromdm&fromSearch&isFromSearchEngine=yes

    Windows最基本的变量

    句柄:  句柄,把柄 例如一个锅的手柄,你只要抓住了它,你就可以很好地操作那个锅,不过很明显你只能通过锅的手柄来做一些诸如炒菜之类的事,你不可能是因为抓住了锅的手柄才能去看电视.不能的物体都会至少有一个属于它的"手柄".

    句柄是一种指向指针的指针。所谓指针是一种内存地址。应用程序启动后,组成这个程序的各对象是住留在内存的。如果简单地理解,似乎我们只要获知这个内存的首地址,那么就可以随时用这个地址访问对象。但是,Windows是一个以虚拟内存为基础的操作系统。在这种系统环境下,Windows内存管理器经常在内存中来回移动对象,依此来满足各种应用程序的内存需要。对象被移动意味着它的地址变化了。如果地址总是如此变化,我们该到哪里去找该对象呢? 
    为了解决这个问题,Windows操作系统为各应用程序腾出一些内存储地址,用来专门登记各应用对象在内存中的地址变化,而这个地址(存储单元的位置)本身是不变的。Windows内存管理器在移动对象在内存中的位置后,把对象新的地址告知这个句柄地址来保存。这样我们只需记住这个句柄地址就可以间接地知道对象具体在内存中的哪个位置。这个地址是在对象装载(Load)时由系统分配给的,当系统卸载时(Unload)又释放给系统。 

    句柄地址(稳定)→记载着对象在内存中的地址————→对象在内存中的地址(不稳定)→实际对象 


    本质:WINDOWS程序中并不是用物理地址来标识一个内存块,文件,任务或动态装入模块的,相反的,WINDOWS API给这些项目分配确定的句柄,并将句柄返回给应用程序,然后通过句柄来进行操作。

     OK,了解好句柄之后  在继续看 HANDLE HINSTANCE HWND  这些

    HINSTANCE是应用程序实例句柄。
      HMODULE与HINSTANCE是完全相同的对象, 
      原因是在1 6 位Wi n d o w s 中,HMODULE和HINSTANCE用于标识不同的东西
      HINSTANCE实际是系统将可执行文件的映象加载到进程的地址空间时使用的基本地址空间(引自WINDOWS核心编程4.1.1)
      HINSTANCE 不能理解成进程地址  他是该EXE模块或DLL模块 加载到进程的 地址空间时 使用的首地址。
      也就是该应用程序某部分模块 的句柄, 也就是指向 该模块 在进程地址空间中 的地址指针。

    HWND是窗口对象句柄,

    HANDLE是任意对象的句柄,

    CWnd是MFC中的窗口类。 它是一个类 不能跟句柄混淆。

    HDC 设备上下文句柄
        是GDI(图形设备接口)内部保存数据的一种数据结构
        设备描述表(DC:Device Context)的对象的句柄 以它为参数,调用各GDI函数来实现图形或文字的现实如TextOut

    MFC
    窗口相关的封装到CWnd中  窗口基类CWnd  CWnd它派生于CCmdTarget类是最基本的GUI(图形用户接口)对象
    作图相关的封装到CDC中   绘图基类CDC

    进程地址空间 没研究明白!挺难理解的一个东西!先这样 带完善!

    展开全文
  • HandleHWND的区别

    千次阅读 2012-09-18 21:36:31
    HWNDHANDLE的一种,但是HANDLE并不是HWND.HANDLE是操作系统一系列内核对象的句柄。HWND仅是窗口对象的句柄     HINSTANCE是应用程序实例句柄, HWND是窗口对象句柄, HANDLE是任意对象的句柄, CWnd是MFC...

    HANDLE类型是void *
    HWND类型是struct{ int unused;}的指针

     

    HWND是HANDLE的一种,但是HANDLE并不是HWND.HANDLE是操作系统一系列内核对象的句柄。HWND仅是窗口对象的句柄

     

     

    HINSTANCE是应用程序实例句柄,

    HWND是窗口对象句柄,

    HANDLE是任意对象的句柄,

    CWnd是MFC中的窗口类。

     

    MSDN里面对于HINSTANCE的解释是"handle   to   an   instance"   就是说是一个instance的句柄。而对instance的解释是"An   object   for   which   memory   is   allocated   or   which   is   persistent."   占有内存的一个对象。

    对于HWND的解释是“Handle   to   a   window.”而对window的解释是"In   a   graphical   Windows-based   application,   a   window   is   a   rectangular   area   of   the   screen   where   the   application   displays   output   and   receives   input   from   the   user.   Therefore,   one   of   the   first   tasks   of   a   graphical   Windows-based   application   is   to   create   a   window.   "  就是说是屏幕上的一块区域。

    CWnd是MFC的一个类了,它有窗体,几乎所有有图形显示的类都是从它派生的,它自己是从CCmdTarget类派生的,所以它可以接受消息。CCmdTarget类的爸爸可就是CObject了。

    msdn对于Handle的解释是"Handle   to   an   object."   ,简直是废话。自己怎么解释自己呢。可是好像也只能如此了。我感觉句柄就可以理解为控制对象的一个…………东西吧。   

     

     

     

    转载:http://topic.csdn.net/t/20030331/14/1599133.html

    ------------------------------------------------------------------------------

    ID--HANDLE--HWND三者之间的互相转换 

    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;  

     

    -------------------------------------------------------------------------------

    应用程序的一些HANDLE 

    // 得到窗口句柄 
    HWDN parenthwnd = ::FindWindowEx(NULL, parenthwnd, "#32770", NULL); 
    // 得到此窗口的主线程ID 
    DWORD dwThreadId = ::GetWindowThreadProcessId(parenthwnd, 0); 
    // 得到当前进程的句柄 
    HANDLE hApp = GetModuleHandle(NULL); // 参数NULL表示获取当前调用函数的进程句柄,你也可以通过完整路径的可执行文件名/DLL,来获取当前加载在当前进程地址空间的其他模块句柄 
    
    对补充问题回答:那是不可能的,目前你只能通过GetModuleHandle来获取进程句柄。 
    补充回答:OpenProcess是新打开一个进程的时候获取其句柄,GetModuleHandle是用来获取已经加载调用进程地址空间的模块句柄。参数NULL表示当前进程句柄(也就是说即使你在DLL里面用了这个函数,若传入的参数为NULL,则返回的并不是DLL的句柄,而是调用DLL的进程句柄),如果要获取进程地址空间中的其他模块句柄,则需要传入模块的名字【此名字可以带全路径(注意路径要用反斜杠表示'//',当然只写文件名最好】如: 
    #include<windows.h> 
    #include<iostream> 
    using namespace std; 
    void main() 
    { 
    HANDLE handle; 
    char *pNotFound = {"the module not found!"}; 
    cout << "In the calling process address sapce:/n"; // 显示在调用进程地址空间中加载的模块句柄 
    
    cout << "the handle of the calling process is: "; 
    if(handle = GetModuleHandle(NULL))cout << handle <<endl;// 调用进程句柄 
    else cout << pNotFound << endl; 
    
    cout << "the handle of the kernel32.dll is: ";// kernel32.dll模块 
    if(handle = GetModuleHandle(L"kernel32"))cout << handle << endl; // 参数不带扩展名,会被默认为DLL
    else cout << pNotFound << endl; 
    
    cout << "the handle of the ntdll.dll is: "; // netdll.dll模块 
    if(handle = GetModuleHandle(L"c://windows//system32//ntdll.dll"))cout << handle << endl; // 以带全路径文件名的方式传入参数 
    else cout << pNotFound << endl; 
    
    cout << "the handle of the xxx.dll is: "; // xxx.dll模块不存在 
    if(handle = GetModuleHandle(L"xxx.dll"))cout << handle << endl; 
    else cout << pNotFound << endl; 
    } 

     

    展开全文
  • handleHWND的差别

    千次阅读 2013-08-10 10:37:17
    HANDLE:句柄,是Windows用来表示对象的(不是C++的对象),HWND是其中一种,HWNDHANDLE,但HANDLE不只是HWND,更具体的查MSDN吧。  HANDLE(句柄)是Windows操作系统中的一个概念。在Windows程序中,有各种...

      HANDLE:句柄,是Windows用来表示对象的(不是C++的对象),HWND是其中一种,HWND是HANDLE,但HANDLE不只是HWND,更具体的查MSDN吧。

      HANDLE(句柄)是Windows操作系统中的一个概念。在Windows程序中,有各种各样的资源(窗口、图标、光标等),系统在创建这些资源时会为它们分配内存,并返回标示这些资源的标示号,即句柄。句柄指的是一个核心对象在某一个进程中的唯一索引,而不是指针。由于地址空间的限制,句柄所标识的内容对进程是不可见的,只能由操作系统通过进程句柄列表来进行维护。句柄列表:每个进程都要创建一个句柄列表,这些句柄指向各种系统资源,比如信号量,线程,和文件等,进程中的所有线程都可以访问这些资源。

      其实我们编程时输出一下句柄的值就可以发现这些值往往非常小(<100)。由此就可以看出句柄的性质了。

      无效的返回值为: INVALID_HANDLE_VALUE

    HWND一般是用来定义窗口句柄的
    HANDLE 是用来定义任何类型的句柄,(Handle to an object).包括HWND。
    可以理解为HWND是HANDLE的一个特例,用来表示一个窗口!

    展开全文
  • Delphi里的HandleHWND

    千次阅读 2008-01-02 14:10:00
    Windows单元: unit Windows;{$ALIGN ON}{$MINENUMSIZE 4}{$WEAKPACKAGEUNIT}{$IFDEF LINUX}{$DEFINE LINUXCRITSECTION}{...interface...type HWND = type LongWord; Controls单元:unit Controls;{$P+,S-,W-,R-,T...

    Windows单元:

    unit Windows;
    {$ALIGN ON}
    {$MINENUMSIZE 4}
    {$WEAKPACKAGEUNIT}
    {$IFDEF LINUX}
    {$DEFINE LINUXCRITSECTION}
    {$ENDIF}

    interface
    ...
    type
    HWND = type LongWord;

    Controls单元:
    unit Controls;
    {$P+,S-,W-,R-,T-,H+,X+}
    { WARN SYMBOL_PLATFORM OFF}
    {$C PRELOAD}

    interface
    ...
    {$R Controls.res}

    ...

    TWinControl = class(TControl)
    private

    ...
    property Handle: HWnd read GetHandle;

    从上面可以看出:Handle是TWinControl这个类的一个属性,是HWnd 类型。

    HWnd 是Windows单元里定义的一个LongWord的类型。

    展开全文
  • 自:...HINSTANCE HANDLE HWND 的区别及一般方法 HINSTANCE是应用程序实例句柄, HWND是窗口对象句柄, HANDLE是任意对象的句柄, CWnd是MFC中的窗口类。 MSDN里面对于HINSTANCE
  • HANDLE HMODULE HINSTANCE HWND的区别---------------------------------------------------------------Handle 是代表系统的内核对象,如文件句柄,线程句柄,进程句柄。 HMODULE 是代表应用程序载入的模块,win32...
  • HANDLE HMODULE HINSTANCE HWND有什么区别

    千次阅读 2009-09-06 13:35:00
    HANDLE HMODULE HINSTANCE HWND有什么区别?之间哪个可以转换?都是什么意思呢? --------------------------------------------------------------- Handle 是代表系统的内核对象,如文件句柄,线程句柄,进程句柄。 ...
  • HWND是线程相关的,通常指明窗口句柄,通过句柄找到窗口所属进程和线程 Handle 是代表系统的内核对象,如文件句柄,线程句柄,进程句柄。 系统对内核对象以链表的形式进行管理,载入到内存中的每一个内 核对象都有...
  • HANDLE GetHandleFromHwnd(HWND hWnd) { DWORD pid; GetWindowThreadProcessId(hWnd,&amp;pid); return OpenProcess(PROCESS_ALL_ACCESS, 0, pid); }
  • HWNDHANDLE的区别

    千次阅读 2012-12-18 12:14:44
    HWNDHANDLE的一种,但是HANDLE并不是HWND. HANDLE是操作系统一系列内核对象的句柄。 HWND仅是窗口对象的句柄 VC的button控制只有两个事件,一个是单击事件,一个事双击事件。在这个方面VB就方便多了。但是...
  • ID--HANDLE--HWND三者之间的互相转换

    千次阅读 2013-04-18 13:35:31
    ID--HANDLE--HWND三者之间的互相转换 id->句柄、、、、、hWnd = ::GetDlgItem(hParentWnd,id); id->指针、、、、、CWnd::GetDlgItem(); 句柄->id、、、、、id = GetWindowLong(hWnd,GWL_ID); 句柄->指针、、、、...
  • Hwnd Handle的一个子类 就好比char是int的一个子类一样。这个是窗口句柄 HINSTANCE Handle的一个子类,用来标记可执行程序的实例App实例。 使用hwnd 和 HINSTANCE是方便用户阅读维护代码。 转载于:...
  • ID--HANDLE--HWND三者之间的互相转换

    千次阅读 2007-10-03 15:51:00
    ID--HANDLE--HWND三者之间的互相转换id->句柄-----------hWnd = ::GetDlgItem(hParentWnd,id);id->指针-----------CWnd::GetDlgItem();句柄->id-----------id = GetWindowLong(hWnd,GWL_ID);句柄->指针--------CWnd ...
  • HwndHandle的区别

    2008-10-09 03:14:00
    windows没有在API层面上实现面向对象(.net实现了,非常伟大)。所以当他需要在一系列的API函数过程中保持状态就需要一个参数来标定状态,他把这种东西称为...Handle一个是通用句柄表示,Hwnd一个专用表示窗口句柄。
  • HWNDHANDLE、HMODULE、HINSTANCE之间的差别不是在变量类型上,而是在语义上。 HWND是线程相关的,你可以通过HWND找到该窗口所属进程和线程 Handle 是代表系统的内核对象,如文件句柄,线程句柄,进程句柄。 系统...
  • 我先不说话,就看看几个代码片段1 使用HWND 查找窗口:HWND h_wnd = ::FindWindow(_T("MainForm"), NULL);创建窗口:HWND hwnd = WindowEx::Create(NULL...2 使用HANDLE 单例运行:bool SingletonRun(const wchar_t *
  • HINSTANCE 、HANDLE 、CWnd、 HWND的区别?

    千次阅读 2009-07-21 12:29:00
    ① 可以看一看msdn HINSTANCE 是进程句柄; HANDLE 是对象句柄; CWnd 是MFC的一个类,所有窗口类从其派生; HWND 是窗口的句柄。...如进程:HINSTANCE ,文件句柄:HANDLE, 窗口句柄HWND,画笔句柄HPEN
  • HINSTANCE的本质是模块基地址,他仅仅在同一进程中才有意义,跨进程的HINSTANCE是没有意义的你把HINSTANCE...Handle 是代表系统的内核对象,如文件句柄,线程句柄,进程句柄。 HMODULE 是代表应用程序载入的模块,win3
  • HWND是窗口对象句柄, HANDLE是任意对象的句柄, CWnd是MFC中的窗口类。   MSDN里面对于HINSTANCE的解释是"handle to an instance" 就是说是一个instance的句柄。而对instance的解释是"An object for ...
  • HWND是窗口对象句柄, HANDLE是任意对象的句柄, CWnd是MFC中的窗口类。   MSDN里面对于HINSTANCE的解释是"handle to an instance" 就是说是一个instance的句柄。而对instance的解释是"An object for which ...
  • MSDN Explanation:HANDLE Handle to an object. This type is declared in WinNT.h as follows:typedef PVOID HANDLE; HINSTANCEHandle to an instance. This type is declared in WinDef

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 44,908
精华内容 17,963
关键字:

handle转hwnd