saga's blog

突出重点,系统全面,不留死角

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  33 Posts :: 2 Stories :: 185 Comments :: 0 Trackbacks

公告

QQ:34O859O5

常用链接

留言簿(15)

搜索

  •  

积分与排名

  • 积分 - 209674
  • 排名 - 121

最新评论

阅读排行榜

评论排行榜

vc6,建立MFC对话框程序,主窗口的InitInstance()里面,运行SDK的API函数MessageBox(),都无法看见弹出的窗口。如:
BOOL CMyText::InitInstance()
{
#ifdef _AFXDLL
          Enable3dControls();   // Call this when using MFC in a shared DLL
#else
          Enable3dControlsStatic(); // Call this when linking to MFC statically
#endif

          CMyTextDlg dlg;
          m_pMainWnd = &dlg;
          int nResponse = dlg.DoModal();
          if (nResponse == IDOK)
          {
                    // TODO: Place code here to handle when the dialog is
                    //  dismissed with OK
            }
          else if (nResponse == IDCANCEL)
          {
           // TODO: Place code here to handle when the dialog is
           //  dismissed with Cancel
           MessageBox(NULL,"haha","aa",MB_OK);   //不会出现
          }

          // Since the dialog has been closed, return FALSE so that we exit the
          //  application, rather than start the application's message pump.
          return FALSE;
         }

上例中的MessageBox(),运行时一跳而过,看不见窗口。听的减弹出窗口的声音。不知道为什么,网上有人提出分析这样的问题。其他窗口也无法生成。但是不知为何。一种解决方法是注释掉m_pMainWnd = &dlg;这句即可正常。我试了,的确如此!

那位高手或知之者路过请解答!谢谢!

                                                                                                           ---------------------saga.constantine
                                                                                                                             

posted on 2007-12-06 20:37 saga.constantine 阅读(5948) 评论(10)  编辑 收藏 引用 所属分类: Code

Feedback

# re: [请教]MFC建立的对话框程序在主窗口InitInstance()函数里面无法建立窗口原因,请高手指点! 2007-12-07 09:34 万连文
是不是放了richedit之类的东西拉???????断点设在dlg的构造函数和OnCreate函数里面跟踪,一直到mfc的src中去,你会发现学习到很多东西。  回复  更多评论
  

# re: [请教]MFC建立的对话框程序在主窗口InitInstance()函数里面无法建立窗口原因,请高手指点![未登录] 2007-12-07 09:56 saga.constantine
@连文
没有放richedit之类的东西啊!
谢谢连文兄的建议!
有空我会进去看看。感觉现在还没这个能力。现在主要不是学mfc!  回复  更多评论
  

# re: [请教]MFC建立的对话框程序在主窗口InitInstance()函数里面无法建立窗口原因,请高手指点! 2007-12-07 11:02 梦在天涯
应该是跟你的model dialg有关把,可能dialog的cancel消息的时候,他已经delete了dialog,所以依附与dialog上的model dialog当然也要完了!  回复  更多评论
  

# re: [请教]MFC建立的对话框程序在主窗口InitInstance()函数里面无法建立窗口原因,请高手指点![未登录] 2007-12-07 14:01 saga.constantine
@天涯兄
我用的是sdk的api。MessageBox()不需要依附什么吧!第一个参数用NULL!网上很多人也遇到这个问题。
我苦与没找到正解,难道只能告诉自己是MFC的bug。
还请连文兄和天涯兄研究赐教!  回复  更多评论
  

# re: [请教]MFC建立的对话框程序在主窗口InitInstance()函数里面无法建立窗口原因,请高手指点! 2007-12-07 15:28 mfc dialog
这个解释的话说来话长啦,我写了个篇blog试图解释下,你过去看看有没有道理:http://www.codediscuss.com/mfc/mfc-dialog-initinstance/
欢迎斧正!  回复  更多评论
  

# re: [请教]MFC建立的对话框程序在主窗口InitInstance()函数里面无法建立窗口原因,请高手指点! 2007-12-07 15:54 dreamaker
MessageBox在主对话框销毁之后就没了.
用afxmessagebox好像可以.
  回复  更多评论
  

# re: [请教]MFC建立的对话框程序在主窗口InitInstance()函数里面无法建立窗口原因,请高手指点! 2007-12-07 16:13 万连文
起初没有看明白你的问题抱歉!
m_pMainWnd = &dlg;屏蔽会出现的原因在于:
void CWnd::OnNcDestroy()

其中:
if (pThread != NULL)
{
if (pThread->m_pMainWnd == this)
{
if (!afxContextIsDLL)
{
// shut down current thread if possible
if (pThread != AfxGetApp() || AfxOleCanExitApp())
AfxPostQuitMessage(0);
}
pThread->m_pMainWnd = NULL;
}
if (pThread->m_pActiveWnd == this)
pThread->m_pActiveWnd = NULL;
}

也就是上面那个链接里面提到的。  回复  更多评论
  

# re: [请教]MFC建立的对话框程序在主窗口InitInstance()函数里面无法建立窗口原因,请高手指点! 2007-12-07 16:53 saga.constantine
真没想到昨天晚上发的问 今天就可以看到答案
看来还是有很多热心人的,真是感谢!
自己看了下,虽然是没有全懂,但是我知道该去了解那方面的知识来弄清楚这个问题。

连文兄谢谢了。
还有那位不知道怎么称呼的,还专门写了篇blog解释这个问题的大侠。也谢谢。

dreamaker兄恐怕是还没搞清楚问题和答案,要需要加油。  回复  更多评论
  

# re: [请教]MFC建立的对话框程序在主窗口InitInstance()函数里面无法建立窗口原因,请高手指点! 2007-12-18 22:39 giscn
若干年前就碰到过这个问题,不过没有深究,谈谈其他的,MFC对Windows的消息封装太多,连model 对话框都是用Modeless 来模拟,自成体系,但是让你不容易搞清楚Windows的消息循环与机制,还是WTL接近API一些。是麻烦点,但是熟悉之后对问题的定位反而容易一些。  回复  更多评论
  

# re: [请教]MFC建立的对话框程序在主窗口InitInstance()函数里面无法建立窗口原因,请高手指点! 2008-09-17 22:38 perfect
MessageBox是依赖于对话框存在的,也就是对话框结束,他的生存周期终止,所以会迅速消失掉。  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理