对于CWnd* ,HWND以及HMODULE之间的关系有时感觉明白,有时又有点糊涂,请大家讲讲...谢谢...

解决方案 »

  1.   

    CWnd* 窗体指针
    HWND 窗体句柄
    可以通过fromhandle来转换
    HMODULE Handle to a module
      

  2.   

    CWnd是一个C++对象,HWND是一个Windows对象,CWnd提供了HWND的C++封装,大部分对CWnd的操作最后都传递给HWND具体完成。
    个人以为看看CWnd::Attach和CWnd::Detach函数的源代码可以搞得清楚一点
      

  3.   

    CWnd* 窗体指针
    HWND 窗体句柄
    可以通过fromhandle来转换
    HMODULE Handle to a module
    //
    上面 FAICHEN(CC) 讲的,我都知道. blackblue(跌跌撞撞)讲的:HWND是一个Windows对象
    有一个小小的笔误:HWND是一个Windows对象的句柄.有时纳闷 CWnd* 窗体指针 与 HWND 窗体句柄 是否可以完全等效,或者有些地方不能等效,比如...?  Windows中提出窗体指针与窗体句柄两个概念,它的用意是什么?至于HMODULE (Handle to a module) 是不是一个应用程序只有一个HMODULE? 访问它是不是可以得到整个应用程序的信息?是不是可以通过HMODULE可以得到应用程序中所有HWND?大家把知道的讲讲吧,有时确实挺困惑的...
      

  4.   

    CWnd*是指指向CWnd这个类的指针,有时候您经常可以看到类似这样的函数,比如SDK里的BOOL GetClientRect(HWND hwnd, LPRECT lpRect)(这个函数用来获得客户区的矩形大小),其中hwnd这个参数你可以给它一个CWnd类的实例(即一个CWnd类的对象),那是因为CWnd类重载了操作符HWND,可以获得一个CWnd对象的句柄。
    HWND就是窗口句柄,和ATL不同,MFC不但封装了一个窗口的句柄,而且还封装了对这个窗口对象进行操作的函数。
    HMODULE就是HINSTANCE,是一个DLL或者EXE的句柄。所以一个程序可以有多个HMODULE,因为可以加载多个DLL。
    Understand???Okey???
      

  5.   

    HWND 是窗口的句柄。什么是句柄呢?一个窗口包括好多信息,如:窗口的大小,窗口的背景色,窗口的形状等等。句柄就是指向这个数据结构的指针的指针(可以这么理解,但不准确)。CWnd是一个关于窗口的类(微软写的),既然是关于窗口的,当然它应该有一个关于窗口的句柄的成员变量了(也就是HWND形的成员变量)HMODULE是一个模块(可以理解为一个可执行文件,一个DLL)的句柄