问题说明:我程序由一系列的Dialog组成,各个Dialog直接是由DoModel()函数衔接的,当到了最后一个Dialog的时候,我会在系统托盘处显示图标,程序进入自动工作状态,我设置了一个定时器,定时把信息更新到最后这个界面上来,我界面上有两个EditBox,没啥特殊控件。
当右击托盘处的图标,选择“聊天”功能,弹出聊天窗口(非模态),刚弹出来不久程序就会出错,我跟踪了一下发现,在弹出聊天窗口之后,我上边提到的自动运行的Dialog更新信息、获取EditBox句柄的时候,把EditBox当成是OleControl了,结果发生0xC0000005访问错误,以下是发生错误的代码(封装在MFC内部的):
void CWnd::GetDlgItem(int nID, HWND* phWnd) const
{
ASSERT(::IsWindow(m_hWnd));
ASSERT(phWnd != NULL);
if (m_pCtrlCont == NULL)
*phWnd = ::GetDlgItem(m_hWnd, nID);
else
m_pCtrlCont->GetDlgItem(nID, phWnd);//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
}
其中:COleControlContainer* m_pCtrlCont;
我跟了的,在弹出聊天窗口以前,系统提取EditBox句柄的时候都是走的if段,而现在它走了else段。
搞了两天了,没搞出来,求高人指点。
[ 此帖被再不斩在2008-04-16 12:03重新编辑 ]