为什么我创建的非模态对话框对话框显示不出控件?

时间:2022-02-06 21:15:44
如题,这个是我在对话框资源里边添加的对话框。然后创建为非模态对话框。 为什么我创建的非模态对话框对话框显示不出控件?
代码如下:
CLineWidthDlg *pDlg = new CLineWidthDlg;
pDlg ->Create(IDD_LINEWIDTH, this);
pDlg ->ShowWindow(SW_SHOW);
我想问一下,我哪里写错了吗?或者说是少写了什么东西,为什么运行的时候只出现一个主框,而里边的控件不显示出来呢?

18 个解决方案

#1


控件的visible属性设了吗?

#2


引用 1 楼 yyyyy_3 的回复:
控件的visible属性设了吗?

设置了啊,都设置了。

#3


用Domodal试下

#4


你确定控件是在那个对话框上面吗

#5


是不是你的主线程很忙?
非模态对话框还没有窗口重绘,子控件是显示不出来的。

如果主线程很忙的话,可以创建UI线程来显示这个非模态对话框.

#6


Domodal应该可以显示出来,lz你试试加一句pDlg ->UpdateWindow();在pDlg ->ShowWindow(SW_SHOW);
这句话之前

#7


说错了,应该放在ShowWindow后面。。。

#8


引用 4 楼 guolonghui 的回复:
你确定控件是在那个对话框上面吗

我都截图出来了,怎么还不确定?

#9


引用 3 楼 zhiweiyouzhishenghuo 的回复:
用Domodal试下

DOModal是用来显示模态对话框的,非模态对话框要create()。

#10


引用 6 楼 YI_RIVER_LOVE 的回复:
Domodal应该可以显示出来,lz你试试加一句pDlg ->UpdateWindow();在pDlg ->ShowWindow(SW_SHOW);
这句话之前

这个我也试过了,还是不行。

#11


你的下面3句代码没有错误,已经帮你测试过。
CLineWidthDlg *pDlg = new CLineWidthDlg;
pDlg ->Create(IDD_LINEWIDTH, this);
pDlg ->ShowWindow(SW_SHOW);
问题出在别的地方。

#12


OnInitDialog()贴出来看看有什么问题.还有DDX...宏部分

#13


问题我已经解决了,谢谢各位热心高手的热心解答。

#14


引用 13 楼 tingting5278910 的回复:
问题我已经解决了,谢谢各位热心高手的热心解答。


解决了一还是说一下原因与解决办法嘛, 这样大家也好共同进步啥.

#15


我写了响应“确定”按钮的消息响应函数就好了,像这样:
void CLineWidthDlg::OnBnClickedOk()
{
CString strLine;
if(this ->m_hWnd)
{
//代码
}
CDialogEx::OnOK();
}
我也不知道为什么。。。

#16


你原来创建非模态对话框窗口的代码是放在什么位置?

#17


我也是这种情况啊。。。我是写在确定按钮的消息响应里的。还是不显示啊
void CMy66Dlg::OnQueding() 
{


CAA *pDlg = new CAA; // 最好将pDlg 定义为成员变量,退出时好析构
pDlg->Create(IDD_DIALOG1, this); // IDD_XX为CStart的ID号

pDlg->ShowWindow(SW_SHOW); // 显示窗口

pDlg ->UpdateWindow();

CBB *pSlg = new CBB;
pSlg->Create(IDD_DIALOG2, this); // IDD_XX为CStart的ID号
pSlg->ShowWindow(SW_SHOW); // 显示窗口

Sleep(3000);
pDlg->DestroyWindow();
delete (pDlg);
}

#18


我也遇到相同问题,原因是:
非模态对话框和主窗口共用一个消息循环,所以在ShowWindow以后您又用了Sleep()操作,导致当前有些消息处理被阻塞,然后您用调用了DestroyWindow来销毁该非模态对话框窗口。
方法,在showwindow后面写个UpdateWindow();

#1


控件的visible属性设了吗?

#2


引用 1 楼 yyyyy_3 的回复:
控件的visible属性设了吗?

设置了啊,都设置了。

#3


用Domodal试下

#4


你确定控件是在那个对话框上面吗

#5


是不是你的主线程很忙?
非模态对话框还没有窗口重绘,子控件是显示不出来的。

如果主线程很忙的话,可以创建UI线程来显示这个非模态对话框.

#6


Domodal应该可以显示出来,lz你试试加一句pDlg ->UpdateWindow();在pDlg ->ShowWindow(SW_SHOW);
这句话之前

#7


说错了,应该放在ShowWindow后面。。。

#8


引用 4 楼 guolonghui 的回复:
你确定控件是在那个对话框上面吗

我都截图出来了,怎么还不确定?

#9


引用 3 楼 zhiweiyouzhishenghuo 的回复:
用Domodal试下

DOModal是用来显示模态对话框的,非模态对话框要create()。

#10


引用 6 楼 YI_RIVER_LOVE 的回复:
Domodal应该可以显示出来,lz你试试加一句pDlg ->UpdateWindow();在pDlg ->ShowWindow(SW_SHOW);
这句话之前

这个我也试过了,还是不行。

#11


你的下面3句代码没有错误,已经帮你测试过。
CLineWidthDlg *pDlg = new CLineWidthDlg;
pDlg ->Create(IDD_LINEWIDTH, this);
pDlg ->ShowWindow(SW_SHOW);
问题出在别的地方。

#12


OnInitDialog()贴出来看看有什么问题.还有DDX...宏部分

#13


问题我已经解决了,谢谢各位热心高手的热心解答。

#14


引用 13 楼 tingting5278910 的回复:
问题我已经解决了,谢谢各位热心高手的热心解答。


解决了一还是说一下原因与解决办法嘛, 这样大家也好共同进步啥.

#15


我写了响应“确定”按钮的消息响应函数就好了,像这样:
void CLineWidthDlg::OnBnClickedOk()
{
CString strLine;
if(this ->m_hWnd)
{
//代码
}
CDialogEx::OnOK();
}
我也不知道为什么。。。

#16


你原来创建非模态对话框窗口的代码是放在什么位置?

#17


我也是这种情况啊。。。我是写在确定按钮的消息响应里的。还是不显示啊
void CMy66Dlg::OnQueding() 
{


CAA *pDlg = new CAA; // 最好将pDlg 定义为成员变量,退出时好析构
pDlg->Create(IDD_DIALOG1, this); // IDD_XX为CStart的ID号

pDlg->ShowWindow(SW_SHOW); // 显示窗口

pDlg ->UpdateWindow();

CBB *pSlg = new CBB;
pSlg->Create(IDD_DIALOG2, this); // IDD_XX为CStart的ID号
pSlg->ShowWindow(SW_SHOW); // 显示窗口

Sleep(3000);
pDlg->DestroyWindow();
delete (pDlg);
}

#18


我也遇到相同问题,原因是:
非模态对话框和主窗口共用一个消息循环,所以在ShowWindow以后您又用了Sleep()操作,导致当前有些消息处理被阻塞,然后您用调用了DestroyWindow来销毁该非模态对话框窗口。
方法,在showwindow后面写个UpdateWindow();