非常郁闷的问题 CreateDialogIndirect()

Liang4 2010-02-23 06:00:11
hWnd = ::CreateDialogIndirect(hInst, lpDialogTemplate,
pParentWnd->GetSafeHwnd(), AfxDlgProc);

利用TabView掉各种view窗口,自己写的继承FormView的类。类里自己处理的各种消息,每个“控件”其实是每张图片,自己处理的各种消息。主界面(菜单)也是个view,,顾客界面(业务)也是view,从菜单到顾客,先是TabView删除主界面,然后捆顾客界面。回来的时候就是删除顾客界面,捆主界面。
本来好好的,但是一旦主、顾客界面切换第七次的时候,屏幕开始变没白了。。就是说顾客界面不经过Onpaint()了,我跟了一下,发现hWnd返回0值了。CreateDialogIndirect失败了。操作主界面和订单界面的时候也出现了这个问题。跟踪进去发现自己看到的所有的值都是正确的。。。谁能说下CreateDialogIndirect出现失败的原因?
...全文
994 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
w_anthony 2010-02-24
  • 打赏
  • 举报
回复
可以GetLastError看一下出错原因
w_anthony 2010-02-24
  • 打赏
  • 举报
回复
既然可以进入AfxDlgProc,而窗口却没有创建出来,一般来说是WM_NCCREATE或者WM_CREATE处理的有问题。这两个函数里面是怎么写的?

Liang4 2010-02-24
  • 打赏
  • 举报
回复
我跟进去了
那是个回调函数,第七次message一直没等于过WM_INITDIALOG,根本就没进if去过。而7次之前能进去。
pretranlatemessage那里出了问题?可是我的基类,和子类都没掉过pretranlatemessage这个函数,只掉了左键down和up的消息啊?我再看看,谢谢楼上
BOOL CALLBACK AfxDlgProc(HWND hWnd, UINT message, WPARAM, LPARAM)
{
if (message == WM_INITDIALOG)
{
// special case for WM_INITDIALOG
CDialog* pDlg = DYNAMIC_DOWNCAST(CDialog, CWnd::FromHandlePermanent(hWnd));
if (pDlg != NULL)
return pDlg->OnInitDialog();
else
return 1;
}
return 0;
}
Liang4 2010-02-24
  • 打赏
  • 举报
回复
不瞒你说,先前还有更诡异的事呢。我的debug老报异常,我在一个view上添加了一个treectrl,就不报异常了。我搜索了下,未添加前并没有那treectrl的ID用到的地方。删除了treetrl,又异常了。我都解释不了。。
w_anthony 2010-02-24
  • 打赏
  • 举报
回复
GetLastError()是0,有这么诡异的事情?
你可以在AfxDlgProc代码里面加断点继续调试看看,第七次出问题就第七次再加上断点。
Liang4 2010-02-24
  • 打赏
  • 举报
回复
我看了,这是Dlgcore.cpp里,我一直跟到这里了
发现前几次hWnd都能生成,第七次,hWnd就没生成。GetlastError也没任何错误。
CreateDialogIndirect里的参数值和前几次的一模一样。CreateDialogIndirect实在跟不进去了。。。。
参数一样的地址,都一模一样,前几次就能生成,第七次就0x0000000了。也不知道该从哪下手了。
第七次,进去view类里看了下,直接构造函数进去,之后就析构函数出来了,根本没初始化那个view.
hWnd = ::CreateDialogIndirect(hInst, lpDialogTemplate,
pParentWnd->GetSafeHwnd(), AfxDlgProc);
#ifdef _DEBUG
dwError = ::GetLastError();
#endif

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧