我想做个小程序,
1 一个基于对话框的程序。
2 里面有一个编辑框
3 编辑框下面有个按钮双击对话框的边框时,希望能够只显示编辑框,隐藏掉除了编辑框之外的所有元素,包括按钮和对话框的边框。
我的做法:
在对话框的双击事件上,使用代码:
this->ModifyStyle(WS_CAPTION | WS_BORDER,0,SWP_NOMOVE|SWP_NOZORDER|SWP_NOSIZE);也尝试了
this->ModifyStyle(WS_CAPTION | WS_BORDER,0,0);但这样不行。上面的做法,双击之后,窗口内的编辑框位置自动往上移动了。
这样我再想让窗口重新显示的时候,窗口上面的一部分被编辑框遮住了。
不明白原因,请大家指点一下,谢谢。

解决方案 »

  1.   

    上移是正常的,因为改变窗口风格并不改变窗口坐标和尺寸,当去掉标题和边框之后,变成把客户区调整到原来整个窗口的位置和尺寸,所以看起来所有控件都上移了。可以这样处理:
    RECT rt;
    GetClientRect(&rt);
    ClientToScreen(&rt);
    ModifyStyle(WS_CAPTION|WS_BORDER, 0, SWP_NOREDRAW);
    MoveWindow(&rt);
      

  2.   

    你好。cnzdgs 。
    我用了你的方法,隐藏时没有问题了,控件都在原来的位置上。
    但是,我想再次双击让窗口边框重现的时候,窗口又下移了。
    来回双击多次之后,窗口已经完全没有了,缩成了一个小框框了。
    我没有想明白,双击回来要保持原来的位置和大小怎么办啊,多谢啊。
      

  3.   

    还是有问题啊。
    我在initdialog中把窗口矩形rtTotal存起来了
    this->GetWindowRect(&rtTotal);
    ClientToScreen(&rtTotal);
    但是我在重新显示窗口的时候,窗口跑到屏幕的左上方去了,大小和高度等等都是对的。
    请问,这为什么啊?
    毕竟我已经转成屏幕坐标了啊,多谢啊!
      

  4.   

    this->GetWindowRect(&rtTotal); 
    ClientToScreen(&rtTotal); 第二句多余了第一行代码就说获取的屏幕坐标.楼主的问题,只需得到标题栏的高度,相应事件前进行运算.没事动动笔.只要你不算错.就会实现功能
      

  5.   

    哦 这个函数忘记告诉你 获取标题栏高度GetSystemMetrics(SM_CYCAPTION);
      

  6.   

    GetWindowRect得到的是屏幕坐标,不要再ClientToScreen。另外,你可以用GetClientRect、ClientToScree得到的矩形与GetWindowRect得到的矩形计算出窗口坐标与客户区坐标的相对位置和大小的差值,以后就可以利用客户区矩形来计算窗口矩形了,用GetSystemMetrics来取标题尺寸和边框尺寸来计算也一样。