菜鸟一个,最近在用VC6.0的基于对话框的MFC EXE,对有些概念很模糊,请大侠们指教。假设对话框的类名是CMyDlg,那么
我看有些资料上写的是:
主对话框的指针是 CWnd* pWnd=AfxGetMainWnd();
主对话框的句柄是 HWND hWnd=pWnd->m_hWnd;我还见到:
CMyDlg* pDlg;另外还有this指针。我就想问,指针pWnd和指针pDlg是一回事吗?如果不是一回事,分别代表什么呢?
this指针又是和哪个指针是一回事?总之,它们有什么异同呢?请高手通俗解释下吧!谢谢!

解决方案 »

  1.   

     CWnd* pWnd=AfxGetMainWnd(); 获取的当前主窗口的指针;
     HWND hWnd=pWnd->m_hWnd; 当前主窗口的句柄;
     this指针是c++类内维护的一个指向对象自己的指针,在CMyDlg内this指向的就是主窗口的指针了。
     CMyDlg* pDlg; 是自定义的对话框指针,当pDlg = this; 时pDlg就指向了主窗口了。
     
     
      

  2.   

    就是说 this和pWnd是一回事了,对吗?
      

  3.   

    只要是CMyDlg类内的this,那就是一回事
      

  4.   

    this指针应该是指向类的一个实例的吧?
    那窗口类CMyDlg的实例是什么呢?就是指的窗口吗?您说:“每个类内都有this指针”,举例来说,我定义了一个类
    class MyClass
    {
    public:
      void MyFun();
    private:
      int i;
    }
    那对于类MyClass来说,this指针隐藏在哪里了呢?是不是定义对象 MyClass mydata;后,这个this指针才有意义,指向了mydata呢?我再定义另一个对象 MyClass mydata1;那这个this指向了mydata还是mydata1呢?总之,就是说,对于一个类,this指针是指向类呢,还是指向类的对象呢?
      

  5.   

    确切地说不是每个类都有一个this指针,应该类的每个对象有一个this指针。
      

  6.   

    class MyClass
    {
    public:
      void MyFun(){
    //this 这里指向自己,比如你调一个函数需要MyClass对象为参数是 你可以直接传this
    Add(this);
    };
    private:
      int i;
    }
    class MyClass1
    {
    public:
      void MyFun(){
    //this 这里指向MyClass1,如果你还要调用Add则需要
    MyClass *p = new MyClass();
    Add(p);
    };
    private:
      int i;
    }
      

  7.   

    i = 0;
    void MyClass::MyFun(){
        i = 1;
    }
    this指针可以简单理解为每个类的默认对象在该类(MyClass)的cpp文件中给i赋值,其实是给this.i赋值上面代码等价于this.i = 0;
    void MyClass::MyFun(){
        this.i = 1;
    }
      

  8.   

    CWnd* pWnd=AfxGetMainWnd(); 获取的当前主窗口的指针;
     HWND hWnd=pWnd->m_hWnd; 当前主窗口的句柄;CMyDlg* pDlg 窗口类都继承自CWnd,
    CMyDlg 是CWnd的子类 
    CWnd* pWnd 指针可指向所有窗口子类,操作子类中与CWnd相同的成员与函数。 具体的,c++中的类相关知识。
    HWND hWnd 窗口的句柄;是widows系统中所有窗口的唯一id。
    通过这个id,你可以找到这个id代表的窗口实例,可以向这个窗口发送消息等