在一个单文档程序中发现取得的主窗口指针不对了,是何原因?用法如下:CMainFrame *pMainFrame = (CMainFrame * )AfxGetMainWnd();

解决方案 »

  1.   

    你是怎么发现的?
    是pMainFrame不同了,//正常
    还是*pMainFrame不同了?//确实变了
      

  2.   

    是pMainFrame不同了。问题是这样的:我的主窗口类中定义了一个ATL控件对象,在视类中使用到这个对象时程序崩溃了,我在调试中发现主窗口创建时的this指针与在视类中取得的pMainFrame不同,所以我觉得是主窗口的指针变了,不知道怎么解决。
      

  3.   

    你用atl后当然会有变化的
      

  4.   

    我现在用theApp.m_pMainWnd是可以的,不过用AfxGetMainWnd()还是不行,但是在另一台机子上运行确是好的,郁闷。希望哪位能讲讲原理,谢谢!
      

  5.   

    AfxGetMainWnd()和AfxGetApp()->m_pMainWnd是不同的,我以前也碰到了这个问题。我看了一下MFC中AfxGetMainWnd和AfxGetApp的实现我就知道了。AfxGetMainWnd返回的不一定就是你的
    主窗口的指针,如果取不到的时候,它会返回一个临时的值。而用AfxGetApp()->m_pMainWnd
    或theApp.m_pMainWnd时,如果取不到,它会返回NULL,不会返回临时值。所以用AfxGetApp()->m_pMainWnd更安全.
      

  6.   

    AfxGetMainWnd我也跟进去看了,主要问题是它取得的线程不是当前程序的线程,所以它取得的窗口指针也不对了,我想知道什么原因导致它得到的线程不对。