书个看到一段代码:
CDirDialog sourceFolder;if(sourceFolder.DoBrowse(*this)==IDOK)
{
   ……
}
代码中DoBrowse函数里面的参数不是句柄吗?怎么用*this也可以呢?难道
句柄等于*this ?

解决方案 »

  1.   

    this是指针,也就是地址,所以*this即是指针所对应的变量,如果this是一个指向句柄的指针的话,这样写是可以的啊。
      

  2.   

    原型是int DoBrowse(CWnd *pwndParent);吧
      

  3.   


    原型是这个
    BOOL DoBrowse(HWND hWndParent, LPCTSTR pszTitle = NULL);
      

  4.   


    “如果this是一个指向句柄的指针的话”就是不确定!
    BOOL CMyApp::InitInstance()
    {
    CMainDialog dlg;
    m_pMainWnd=&dlg;
    dlg.DoModal();
    return FALSE;
    }
    而这个*this就是dlg但这两者和句柄都扯不上关系呢!
      

  5.   

    CWnd有HWND操作符,默认类型转换把CWnd转成HWND
      

  6.   


    那是不是说sourceFolder.DoBrowse(*this)==IDOK中的*this进行了隐转换呢?将*this转换成了HWND
      

  7.   

    如果是继承与CWnd那么就是如6F所说。
    有operator HWND() const 这东西。
    这东西最好少用,参见more effective上说明,实际开发中本人也遇到过因这个而出现的bug