每问10分!1.CWnd是从CObject派生的类,但CWindow呢??2.另外:是不是CWindow、CWnd的成员函数在MFC中可以直接访问啊??
  比如ScreenToClient之类??【经试验,是的!】
  直接可用 RECT Rect;
  GetClientRect(&Rect);
  ClientToScreen(&Rect);
3.但我不知道上面的两个函数是CWindow的还是CWnd的啊?4.另外说ClipCursor是一个全局函数?这个“全局”什么意思?任意地方都可以访问?不都是嘛?

解决方案 »

  1.   

    1.CWindow provides the base functionality for manipulating a window in ATL.
     所以不是,使用是#include<atlwin.h>.
    2.CWnd::ScreenToClient
      其实是this->ScreenToClient();
    3.是CWnd的
    4.是作用域的概念,子域可以访问上域
      

  2.   

    基本同意上面兄弟:
    但:
    1.CWnd是MFC的东西,CWindow不是,如上面的兄弟,为ATL提供
    2.我想你肯定在某个类实现文件中如此引用的,那么肯定,引用的是本身这个类的方法,但如果一旦你在前面加::作用域符,就是引用全局的了
    3.如果是全局的就是WINDOWS的API,不属于CWINDOW也不属于CWND,再说这两个类也是对WINDOWS API的封装
    4.ClipCursor是全局函数,表示是WINDOWS API,只要你包含了相应的头文件(windowuser.h),就可以使用该函数了.
      

  3.   

    觉得有一点怀疑:按说,
    while (GetMessage (&msg, NULL, 0, 0))
    {
    TranslateMessage (&msg) ;
    DispatchMessage (&msg) ;
    }
    是一个死循环啊。
    怎么有机会去到WndProc中去?难道WndProc在Dispatch之中执行?
      

  4.   

    GetMessage从消息对列取一个消息以后,通过TranslateMessage的处理再由DispatchMessage来调用窗口处理函数。也就是WndProc,WndProc的一个回调函数,也就是系统调用的,所以好象是DispatchMessage通过user模块来调用WndProc的.就是调用WndProc后,在这个函数里我们可以退出程序
      

  5.   

    喔,大虾的意思就是WndProc是在DispatchMessage内部执行的。是吧?而不是靠强制机制跳出这个循环。(如果是这样真让人发晕)
      

  6.   

    上面兄弟已经说的很清楚了建议看看回调函数的调用过程
    http://www-900.ibm.com/developerWorks/cn/linux/l-callback/index.shtml
      

  7.   

    到 blog.csdn.net/maxwind 去看看,有相关的帖子