为什么在初始化中非模态对话框显示空白

litom 2010-12-07 11:49:35
我做了一个程序 在初始化时,我加载了一个非模态对话框,对话框上有一个静态文本控件“程序初始化 . . .”
在程序初始化前,加入以下代码:
WaitDlg* dlg=new WaitDlg();
dlg->Create(IDD_WAIT,this);
dlg->ShowWindow(SW_SHOW);
但程序初始化时,只显示了空白的对话框,并没有显示静态文本控件“程序初始化 . . .”,不知是为什么?
...全文
115 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
litom 2010-12-09
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 visualeleven 的回复:]
你的DoDataExchange里已经有了
DDX_Text(pDX, IDC_MSG, m_msg);
那么你的OnInitDialog中就没有必要加上UpdateData(FALSE);这句了
[/Quote]
那个语句是没有用,当时是觉得显示不了才试试
Eleven 2010-12-09
  • 打赏
  • 举报
回复
你的DoDataExchange里已经有了
DDX_Text(pDX, IDC_MSG, m_msg);
那么你的OnInitDialog中就没有必要加上UpdateData(FALSE);这句了
向立天 2010-12-09
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 litom 的回复:]
问题找到了,加上 dlg->UpdateWindow();就可以了
[/Quote]
我刚想给你回复这个
来晚了
不过自己找到原因就更好了
呵呵
wltg2001 2010-12-08
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 litom 的回复:]
静态文本属性是设置了的,比如我在下一个对话框出现错误,这个时候就会显示出来“初始化”
[/Quote]
也就是说这个静态文本框的值是你后面用代码设置的?那你写它的代码呢?
Hiiishe 2010-12-08
  • 打赏
  • 举报
回复
较长时间的运算会卡住界面,界面会假死。假死现象为鼠标点击界面无反应,界面无绘制(包括子控件看不到)
Hiiishe 2010-12-08
  • 打赏
  • 举报
回复
把你的初始化运算过程放在线程中执行,执行完后再关闭对话框。
不要把较长世界的运算放在主线程中,因为你的界面在主线程中。
litom 2010-12-08
  • 打赏
  • 举报
回复
问题找到了,加上 dlg->UpdateWindow();就可以了
向立天 2010-12-08
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 litom 的回复:]
静态文本属性是设置了的,比如我在下一个对话框出现错误,这个时候就会显示出来“初始化”
[/Quote]你这话什么意思
litom 2010-12-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jcily 的回复:]
把你的初始化运算过程放在线程中执行,执行完后再关闭对话框。
不要把较长世界的运算放在主线程中,因为你的界面在主线程中。
[/Quote]
我没有线程就是一个计算的程序,计算出数量就出现主界面,现在希望在启动的时候把计算的结果显示在主界面上
litom 2010-12-08
  • 打赏
  • 举报
回复
静态文本属性是设置了的,比如我在下一个对话框出现错误,这个时候就会显示出来“初始化”
yihandrensunyong 2010-12-08
  • 打赏
  • 举报
回复
楼主看下 静态文本属性对了 吗
然后最好整个重新编译运行 有时候可能是编译器的问题
mazm_yanzhu 2010-12-08
  • 打赏
  • 举报
回复
确认下,静态文本的赋值情况,是不是重复赋值了,赋了空值
tigerMayDo 2010-12-08
  • 打赏
  • 举报
回复
应该不会啊 楼主静态文本属性对了 吗
向立天 2010-12-08
  • 打赏
  • 举报
回复
静态文本控件的属性怎么设置的
是不是visible为false了
litom 2010-12-08
  • 打赏
  • 举报
回复

WaitDlg::WaitDlg(CWnd* pParent /*=NULL*/)
: CDialog(WaitDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(WaitDlg)
m_msg = _T("程序启动中,请稍后.......");
//}}AFX_DATA_INIT
}


void WaitDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(WaitDlg)
DDX_Text(pDX, IDC_MSG, m_msg);
//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(WaitDlg, CDialog)
//{{AFX_MSG_MAP(WaitDlg)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// WaitDlg message handlers

BOOL WaitDlg::OnInitDialog()
{
CDialog::OnInitDialog();

// TODO: Add extra initialization here
m_msg="程序启动中,请稍后.......";
UpdateData(FALSE);

return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
这个是非模态的对话框的代码
litom 2010-12-08
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 xianglitian 的回复:]
引用 8 楼 litom 的回复:
静态文本属性是设置了的,比如我在下一个对话框出现错误,这个时候就会显示出来“初始化”
你这话什么意思
[/Quote]

WaitDlg* dlg=new WaitDlg();
dlg->Create(IDD_WAIT,this);
dlg->ShowWindow(SW_SHOW);

AfxMessageBox("启动错误");
我在后面加上AfxMessageBox这个消息框,上面的非模态对话框就会出现文字了

wltg2001 2010-12-07
  • 打赏
  • 举报
回复
没见过这种问题。

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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