由于呢个对话框资源在用之前 在属性对话页面已经设置了 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();//没用依然被下面的按钮覆盖那部分
}
现在就是弹出时,界面被下层的按钮画花了~就算移动后一点下层的主对话框,界面又花了,最小化还原有一样花~
应该如何解决~

解决方案 »

  1.   

    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 );
    都不行~我都试过几多~
    还有其他吗?
    还是有其他解决方法?
      

  2.   

    在做一个对话框资源,不要设置child风格。
      

  3.   

    看样子是对话框的OnPaint里面的问题,将代码贴出;如果处理了WM_ERASEBKGND消息,也贴出代码。
      

  4.   

    因为~要放在TAB页面需要,所以style为child 但后来通过~
    page1.ModifyStyle(WS_CHILD,WS_POPUP ¦WS_BORDER ¦WS_VISIBLE ¦WS_DLGFRAME ¦WS_MINIMIZEBOX,0 );//
    好像也没起效果~主对话框的ONPAINT没有做任何修改~
    要弹出的那个对话框类没有重载ONPAINT();问题是~我按按钮后弹出这个修改过格式的对话框,始终都没能弹在主对话框的最前面~,移动这个弹出框,发现它的边界依然只能在主对话框内移动~不能移出主对话框的边界,移出部分被剪切了,,,而我其他的资源对话框的弹出就能移动出主对话框的矩形大小范围(当然这时STYLE不为Child)... 这是问题关键了,,我就是想在程序中将其改变,,,,
      

  5.   

    就像放CTab中一样,简单地做一个标准的弹出对话框,把你的那个孩子放在上面
      

  6.   

    我要重新定义他的style才行的~不然还是child的没边框的,弹出后不能移动又不能最小化,
    如果用SetWindowsLong()
    是不是这样:
    SetWindowLong(page1.GetSafeHwnd(),WS_OVERLAPPEDWINDOW,GWL_STYLE);//好像更不起效果
      

  7.   

    WM_CHILD风格在创建后再修改就没有作用了,除非SetParent把父窗口改掉,不过这样窗口之间失去了父子关系,就不能让子窗口保持在父窗口之前了。最好的做法就是添加一个对话框资源(复制粘贴一下就可以了),不要设置child风格。
      

  8.   

    如何SetParent可以做到~
    我之前查了一下可以在
    PreCreateWindow()  

    PreSubclassWindow()
    中改变style
    用个变量判断改与不改~
    我觉得麻烦~不想重载函数而已~如何用SetParent可以做到啊~  请教~~
      

  9.   

    还有如果在OnCreate()的重载函数上改,来得及吗? OnCreate()是构造时调用还是构造后调用噶?
      

  10.   

    RECT rt;
    page1.GetWindowRect(&rt);
    page1.ModifyStyle(WS_CHILD, ……
    page1.SetParent(NULL);
    page1.MoveWindow(&rt);
    这种做法无法保证子窗口一直在父窗口前面。
    重载函数都是在CreateWindow之后才被调用的,来不及去掉WS_CHILD风格。
    不知道你为什么不再做个对话框资源,有这时间早就处理完了。
      

  11.   

    http://topic.csdn.net/t/20060121/18/4529807.htmlhttp://www.codeproject.com/KB/dialog/DialogStyleModificationEx.aspx