句柄是一种特殊的指针,CWnd* 指向的是屏幕上的窗口,CDC*  CBitmap* 指向的是窗口上的客户区进行绘画操作(客户区简单的说就是除了菜单是标题,工具条等之外的).

解决方案 »

  1.   

    http://www.csdn.net/expert/topic/614/614881.xml?temp=.3071558
      

  2.   

    首先要给上面的同志纠正一下。
    内存绝不是特殊的指针,在Windows中为了保护系统完整性有些数据结构是以内核对象的形式给出的,如:Window,Pen,Brush,Thread,DC等,这些内核对象不许用户去通过指针操作,但为了使用户用控制它们,操作系统给每一个对象一个HANDLE,然后提供了一些函数来使用其中的功能,而CWnd指针只是一个指向类对象的指针,CWnd只是把和HWND相关的操作封装了一下而已
      

  3.   

    我觉得它们都是指针,只不过它们使用的场合不同,叫法有所区别而已!!
    象 CWnd *hello ;生成的就是视窗类指针!!
    以大写H开头的诗句柄!!
    你可以去查一下 MSDN !!!
      

  4.   

    指针:指到一个内存位置,表示一个对象(空指针除外),它的最大优势就在于强制转换指针和共用内存地址,节省内存。
    句柄:唯一标识一个对象,相当于对象,给一个函数传入一个句柄,就是告诉函数你要处理的是哪个对象。纯API编程时使用句柄。
      

  5.   

    恩  隐约有点懂了  那 HWND的变量可以用CWnd 的成员函数吗?
      

  6.   

    本质是相同的,只是用在了不同的地方上!再windows中编程原有的对象使用的多半时句柄,自定义的是多半是指针!
      

  7.   

    可以用,只要是从CWnd中继承下来的!
      

  8.   

    有的函数要HWND有的要CWnd*  这两个怎么转换呢?
     还有HDC和 CDC 
    谢谢:)
      大家多多发言一起讨论学习嘛:)
      

  9.   

    像HWND,它是窗口句柄
    CWnd是一个类,它封装了窗口的大部分功能
    用它定义的指针可实现窗口的一些操作
    前者是SDK专用,后者是MFC专用
    像HDC和CDC也差不多(这是环境句柄,如内存)
      

  10.   

    再请教一下  HDC=::GetDC(NULL);是得到设备描述表 那得到各窗口的怎么半呢?
    要得到各个窗口的HWND又怎么半呢?
    大家也踊跃问问提  问问题也有分!!!
      

  11.   

    不好意识打掉了  HDC=::GetDC(NULL)是得到桌面的设备描述表  那得到各窗口的怎么办呢?
    要得到各个窗口的HWND又怎么办呢?
      

  12.   

    说多了怕你也记不住,简单的说,句柄是windows操作系统内部给出的用来操作操作系统内的数据结构的一个接口,如某进程,窗口,信号量等等.
    而指针只能操纵用户程序自己的地止空间中的数据.
    句柄是操作系统相关的,指针是用户相关的
      

  13.   

    大虾能不能帮我解决一下:
    HDC=::GetDC(NULL)是得到桌面的设备描述表  那得到各窗口的HDC怎么办呢?
    要得到各个窗口的HWND又怎么办呢?(外加20分)
      

  14.   

    GetWindowDC()
    GetClientRect()
    句柄详情还是看看WINDOWS核心编程吧,那个解释的很清楚。
      

  15.   

    m_MainWnd->GetSafeHandle()
    就得到了handle,对不对?大家指点
      

  16.   

    句柄不是指针,最起码不是传统意义上的指针。
        Windows通过句柄来管理如菜单、窗口、文件、光标等一切对象,对于每一对象,Windows提供一个存在于内存中的数据结构来对这些对象进行描述,而句柄就是操作系统表示这些结构的一个32位的值,简单的说,就是这些数据结构的ID。而其中有些对象是与进程相关的(例如文件句柄),有的不是(例如窗口),与进程相关的句柄不可以在所有进程中任意传递,与进程无关的则可以。
        对于内存指针,在Win16中,所有指针都可以在进程间相互传递,相互访问进程当中的数据,在Win32中,操作系统欺骗每一个进程,让每一个进程都以为自己拥有4GB的内存,而且内存中只有自己在运行,这时如果进程间相互传递地址指针,是无效的,A进程传递了一个值为0X00FC8873的指针给进程B,进程B去访问时,有两种结果,一是访问出错,二是访问到了本进程内的数据。
      

  17.   

    人云:“句柄是一种特殊的指针,CWnd* 指向的是屏幕上的窗口,CDC*  CBitmap* 指向的是窗口上的客户区进行绘画操作(客户区简单的说就是除了菜单是标题,工具条等之外的).”1:句柄是句柄,指针是指针,两码事!句柄是系统对象的标示,指针是对象、变量、函数的地址。
    2:CWnd *、CDC*、CBitmap* 存放内存中某个CWnd、CDC、CBitmap对象的地址。瞎扯!
      

  18.   

    那要看是什么的hwnd:
    CWND类有个变量m_hwnd,可以直接用
    CWND还有如下函数,具体情况具体用
    GetDesktopWindow     Retrieves the Windows desktop window. 
    GetForegroundWindow   Returns a pointer to the foreground window (the top-level window with which the user is currently  
     
    GetTopWindow       Returns the first child window that belongs to the CWnd. 
    GetWindow         .....
     
    FindWindow        Returns the handle of the window, which is identified by its window name and window class. 或者GetDlgItem,用于对话框与子窗口在CWindo与SDK中还有GetWindowLong用与找父窗口
      

  19.   

    呵呵 今天真是收获不小啊!!!! 谢谢大家的帮住 bow!
      

  20.   

    1cwindow与SDK的GetWindowLong可以返回父窗口的
    2SDK中FindWindow FindWindowEx GetDesktopWindow GetForegroundWindow GetNextWindow GetParent GetTopWindow GetWindow WindowFromPoint
    都可以实现特定的目的,CWND中有封装
    3CWND类的m_wnd就是
    4GetDlgItem (for dialog sub window)