请教一句代码CWnd *pWnd = (CWnd*)pMap->LookupPermanent(hWnd)这句话是什么意思呀?LookupPermanent函数使用的列子有没有?

解决方案 »

  1.   

    语法理解没问题吧,语法上相当于char *p = ( char * )myarray;
    LookupPermanent网上有无数例子。
      

  2.   

    LookupPermanent()是CHandleMap类型的一个成员函数。
    MFC在创建窗口时,总是把窗口的句柄(HWND)作键,窗口的CWnd的object的内存地址存到一个叫
    m_permanentMap的CHandleMap的成员变量里。>>请教一句代码CWnd *pWnd = (CWnd*)pMap->LookupPermanent(hWnd) 
    的意思大概是判断:m_permanentMap这个Map里有没有登记过 某个hWnd和CWnd,如果
    登记了就怎么怎么反之则怎么怎么。
      

  3.   

    相当于 CWnd::FromeHandle() 的作用, 把hwnd转换为对应的CWnd *
      

  4.   

    随便来一个HWND,你到底是不是MFC的东东,与我们属于一个线程管辖吗?
    如果你需要这样的判断,LookupPermanent()就派上了用场。
    比如,下面的ASSERT,一定会顺利通过。int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
      ...
      ...  CHandleMap* pMap = afxMapHWND();
      ASSERT(pMap != NULL);
      CObject* p;
      ASSERT((p = pMap->LookupPermanent(m_hWnd)) != NULL ||
    (p = pMap->LookupTemporary(m_hWnd)) != NULL);
      ASSERT((CWnd*)p == this);   // must be usreturn 0;
    }