模式对话框内的无模式对话框消息

枫桦沐阳 2009-08-20 05:58:29
问题是这样的:

我在app内创建一个模式对话框为主对话框。

该模式对话框根据需要需要显示一个非模式对话框。

这样的话,这个非模式对话框的消息从哪里来呢?是app还是模式对话框。

还有一个问题,我想让这个非模式对话框在任务栏里也有显示,该如何做?

...全文
65 点赞 收藏 11
写回复
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
WooSir 2009-08-26
回复
枫桦沐阳 2009-08-25
有没有人系统地说一下模式窗口里创建非模式窗口或者线程时的消息机制。
回复
枫桦沐阳 2009-08-24
谢谢7,8楼
前两天休息,没上来。

SetWindowLong( this->GetSafeHwnd(),GWL_EXSTYLE, Style,WS_EX_APPWINDOW )
在OnCreate之后调用成功,在PreOnCreate消息中改变风格但是不起作用,不知道为什么。。。

我现在窗口已经是Popup风格。
现在问题是,主窗要运行的任务很重,腾不出太多时间给无模式对话框。
无模式对话框是想用来实时显示任务进度。

难道任务,无模式对话框都用线程实现才可以?
回复
WooSir 2009-08-20
在资源编辑器内将无模式对话框改为Popup风格,加上标题栏。当无模式对话框拥有活动焦点时,它是可以自己处理控件消息的,如果没有焦点,就要主窗口转发消息给它了。
回复
雪影 2009-08-20
[Quote=引用 3 楼 ynb119 的回复:]
楼上的非常感激。

1。一语中地,茅塞顿开啊。
2。我已经直接在initdialog里 SetWindowLong( this->GetSafeHwnd(),GWL_EXSTYLE, Style,WS_EX_APPWINDOW )试过了,但是没有成功,难道是其他地方?

3。用的是模式对话框的消息的话,模式对话框负担很重啊。新开一个线程好像也没什么改善。有什么好建议么?
[/Quote]
你创建的窗口不能有Child属性
回复
我在app内创建一个模式对话框为主对话框。
什么意思 你的工程是对话框工程吗
回复
yuhudie203 2009-08-20
消息从哪来是什么意思?给个解释~~
回复
枫桦沐阳 2009-08-20
也谢谢2楼的答复,但我这次只能用非模式的。
回复
枫桦沐阳 2009-08-20
楼上的非常感激。

1。一语中地,茅塞顿开啊。
2。我已经直接在initdialog里 SetWindowLong( this->GetSafeHwnd(),GWL_EXSTYLE, Style,WS_EX_APPWINDOW )试过了,但是没有成功,难道是其他地方?

3。用的是模式对话框的消息的话,模式对话框负担很重啊。新开一个线程好像也没什么改善。有什么好建议么?
回复
yuhudie203 2009-08-20
新建一个对话框的类ADlg,在里面时间非模式对话框实现的代码 比如按一个BUTTON
在响应函数中添加如下代码:

if (m_pLogConfigDlg != NULL) //m_pLOGConfigDlg是一个对话框指针
{
m_pLogConfigDlg->SetFocus();
m_pLogConfigDlg->ShowWindow(SW_NORMAL);
}
else
{

m_pLogConfigDlg = new CLogViewConfigDlg();
//IDD_DIALOG_LOGVIEWCONFIG
m_pLogConfigDlg->Create(IDD_DIALOG_LOGVIEWCONFIG);

CRect rectClient;
CRect rectDlg;

this->GetClientRect(&rectClient);
m_pLogConfigDlg->GetWindowRect(&rectDlg);

int xOff = (rectClient.Width()-rectDlg.Width())/2;
int yOff = (rectClient.Height()-rectDlg.Height())/2;
rectDlg.OffsetRect(xOff, yOff);

m_pLogConfigDlg->MoveWindow(&rectDlg);

m_pLogConfigDlg->ShowWindow(SW_SHOW);
}

然后在你的主程序需要添加麽态对话框的地方
ADlg newDlg;
newDlg.DoModal();
回复
雪影 2009-08-20
1. 模式对话框的消息,当没有关闭模式对话框时,app窗口是获取不到消息的。
2.
LONG Style = GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE);
Style = Style | WS_EX_APPWINDOW ;

SetWindowLong( this->GetSafeHwnd(),GWL_EXSTYLE, Style );


回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告
暂无公告