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

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

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

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

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

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

...全文
100 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
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 );


16,548

社区成员

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

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

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