如何使动态弹出的非模式对话框的界面不被底层下层对话框中的控件(例如按钮,静态文字)重绘在它上面

shinefen 2008-07-26 07:41:01
由于呢个对话框资源在用之前 在属性对话页面已经设置了 Border属性为None. Style属性为Child
因为我是把这种对话框放到我的CTab页面中

现在,我又有其他需要重新Create一个这样的对话框用做其他用途显示.
所以我在主对话框的一个按钮里这样做了:
void CMYmainDlg::::Onbutton1()
{
bool static bcreate=true; //只新建一个
static CSheetPage page1; //CSheetPage为用这对话框生成的类
page1.pagename=strTemp; //一个成员变量而已
if (bcreate )
{
page1.Create(CSheetPage::IDD,NULL);//在这里我用了this,GetParent(),NULL效果都一样
page1.ModifyStyle(WS_CHILD,WS_POPUP|WS_BORDER|WS_VISIBLE|WS_DLGFRAME|WS_MINIMIZEBOX,0 );//应该是这里,//但我也都尝试了好多种值了
page1.ModifyStyleEx(0,WS_EX_TOPMOST,0);

bcreate=false;
}

page1.ShowWindow(SW_HIDE);//这里我打算先把他隐藏再弹出都不行
page1.ShowWindow(SW_SHOW);
page1.SetWindowText(strTemp);
page1.SetWindowPos(&wndTop,0,15,0,0,SWP_NOSIZE|SWP_SHOWWINDOW);
//page1.DrawList();//一个自己的函数不影响的,与题目无关
page1.Invalidate();//没用依然被下面的按钮覆盖那部分
}


现在就是弹出时,界面被下层的按钮画花了~就算移动后一点下层的主对话框,界面又花了,最小化还原有一样花~
应该如何解决~
...全文
238 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
朝阳祥和 2012-05-11
  • 打赏
  • 举报
回复
没有人能很好解决吗?
shinefen 2008-07-28
  • 打赏
  • 举报
回复
http://topic.csdn.net/t/20060121/18/4529807.html

http://www.codeproject.com/KB/dialog/DialogStyleModificationEx.aspx
cnzdgs 2008-07-27
  • 打赏
  • 举报
回复
RECT rt;
page1.GetWindowRect(&rt);
page1.ModifyStyle(WS_CHILD, ……
page1.SetParent(NULL);
page1.MoveWindow(&rt);
这种做法无法保证子窗口一直在父窗口前面。
重载函数都是在CreateWindow之后才被调用的,来不及去掉WS_CHILD风格。
不知道你为什么不再做个对话框资源,有这时间早就处理完了。
菜牛 2008-07-27
  • 打赏
  • 举报
回复
看样子是对话框的OnPaint里面的问题,将代码贴出;如果处理了WM_ERASEBKGND消息,也贴出代码。
shinefen 2008-07-27
  • 打赏
  • 举报
回复
还有如果在OnCreate()的重载函数上改,来得及吗? OnCreate()是构造时调用还是构造后调用噶?
shinefen 2008-07-27
  • 打赏
  • 举报
回复
如何SetParent可以做到~
我之前查了一下可以在
PreCreateWindow()

PreSubclassWindow()
中改变style
用个变量判断改与不改~
我觉得麻烦~不想重载函数而已~

如何用SetParent可以做到啊~ 请教~~
cnzdgs 2008-07-27
  • 打赏
  • 举报
回复
WS_CHILD,手误。
cnzdgs 2008-07-27
  • 打赏
  • 举报
回复
WM_CHILD风格在创建后再修改就没有作用了,除非SetParent把父窗口改掉,不过这样窗口之间失去了父子关系,就不能让子窗口保持在父窗口之前了。最好的做法就是添加一个对话框资源(复制粘贴一下就可以了),不要设置child风格。
shinefen 2008-07-27
  • 打赏
  • 举报
回复
我要重新定义他的style才行的~不然还是child的没边框的,弹出后不能移动又不能最小化,
如果用SetWindowsLong()
是不是这样:
SetWindowLong(page1.GetSafeHwnd(),WS_OVERLAPPEDWINDOW,GWL_STYLE);//好像更不起效果
ok1234567 2008-07-27
  • 打赏
  • 举报
回复
就像放CTab中一样,简单地做一个标准的弹出对话框,把你的那个孩子放在上面
shinefen 2008-07-27
  • 打赏
  • 举报
回复
因为~要放在TAB页面需要,所以style为child 但后来通过~
page1.ModifyStyle(WS_CHILD,WS_POPUP ¦WS_BORDER ¦WS_VISIBLE ¦WS_DLGFRAME ¦WS_MINIMIZEBOX,0 );//
好像也没起效果~

主对话框的ONPAINT没有做任何修改~
要弹出的那个对话框类没有重载ONPAINT();

问题是~我按按钮后弹出这个修改过格式的对话框,始终都没能弹在主对话框的最前面~,移动这个弹出框,发现它的边界依然只能在主对话框内移动~不能移出主对话框的边界,移出部分被剪切了,,,而我其他的资源对话框的弹出就能移动出主对话框的矩形大小范围(当然这时STYLE不为Child)... 这是问题关键了,,我就是想在程序中将其改变,,,,
cnzdgs 2008-07-26
  • 打赏
  • 举报
回复
在做一个对话框资源,不要设置child风格。
shinefen 2008-07-26
  • 打赏
  • 举报
回复
page1.ModifyStyle(WS_CHILD,WS_OVERLAPPED|WS_POPUP|WS_BORDER|WS_VISIBLE|WS_DLGFRAME|WS_MINIMIZEBOX,0 );


page1.ModifyStyle(0,WS_OVERLAPPED|WS_BORDER|WS_VISIBLE|WS_DLGFRAME|WS_MINIMIZEBOX,0 );
都不行~

我都试过几多~
还有其他吗?
还是有其他解决方法?

16,472

社区成员

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

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

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