主要是不明白如何显示高级设置。刚开始初始化的时候登录界面是一般的界面,当点击了高级设置后,会出现下半部分,再次点击高级设置,会把下半部分隐藏掉。类似QQ那种样子的

解决方案 »

  1.   

    不需要,比如你弄一个Dialog,只要按那个按钮,用SetWindowPos(带SWP_NOMOVE),或者MoveWindow重新设置一下窗口的大小,展开隐藏的部分。Dialog初始化时设置其大小是较小,把额外的部分隐藏。
      

  2.   

    还可以设置递增的高和宽,再设置个计时器,这样就会慢慢扩张开,好看一些。以前有弄过一个这样的。重新设置窗口大小直接用movewindow就好了啊。
      

  3.   


    CRect rect;
    GetClientRect(&rect);
    for (int i=0;i<rect.Width();i+=5)
    {
    SetWindowPos(0,0,0,i,rect.Height(),SWP_NOMOVE);
    Sleep(1);
    }这个只是演示的,具体大小你自己设定
      

  4.   

    在隐藏和显示方法中,如何是初始化界面为隐藏的情况,如果直接用DoModal()的话,显示的对话框为整个对话框,此时会显示高级设置界面,如何初始化登录窗口使它不显示高级设置界面呢
      

  5.   


    Dialog初始化时设置其大小是较小,把额外的部分隐藏。
    初始化的时候怎么设置其为较小呢 直接DoModle好像不行。
      

  6.   

    计算最小的尺寸大小,在size里用MoveWindows实现。
      

  7.   

    在OnInitDialog里MoveWindow调整一下
      

  8.   

    我先试试 不过MoveWindow里面的参数是不是要提前设定好啊,不能从窗口中读取吧?
      

  9.   

    关键2点:
    1、改变窗口的尺寸,SetWindowPos或MoveWindow;
    2、显示控件,ShowWindow( SW_SHOW );/*SW_HIDE*/收缩时,窗口尺寸设置小一点,把展开高级设置后的控件都隐藏了。
    展开式,窗口尺寸设置大一些,把展开后需要显示的空间显示出来。
      

  10.   

    孙鑫老师里有 就是加一个图片控件 
    static CRect rectLarge;
    static CRect rectSmall;
    if(rectSmall.IsRectNull())
    {
    CRect rectSeparator;
    GetWindowRect(&rectSmall);
    GetDlgItem(IDC_SEPARATOR)->GetWindowRect(&rectSeparator);
    rectSmall.bottom=rectSeparator.top;
    }
    if(rectLarge.IsRectNull())
    {
    GetWindowRect(&rectLarge);
    }
    if(rectbool)
    {
    SetWindowPos(NULL,0,0,rectSmall.Width(),rectSmall.Height(),
    SWP_NOMOVE | SWP_NOZORDER);
    }
    else
    {
    SetWindowPos(NULL,0,0,rectLarge.Width(),rectLarge.Height(),
    SWP_NOMOVE | SWP_NOZORDER);
    }
    rectbool=!rectbool;
      

  11.   

    在OnInitDialog()函数中:
             CRect rt;
    GetClientRect(&rt);
    SetWindowPos(0,0,0,rect.Width(),rect.Height()-100;,SWP_NOMOVE);
            //这里的100就是你弹出高级设置的窗口的高度
    然后再按钮响应函数中:
             SetWindowPos(0,0,0,rect.Width(),rect.Height();,SWP_NOMOVE);
      

  12.   

    上面代码有点小错误修改如下:设置全局变量:CRect rt;在OnInitDialog()函数中:
    GetClientRect(&rt);
    SetWindowPos(0,0,0,rt.Width(),rt.Height()-100,SWP_NOMOVE);
      //这里的100就是你弹出高级设置的窗口的高度
    然后再按钮响应函数中:
      SetWindowPos(0,0,0,rt.Width(),rt.Height();,SWP_NOMOVE);
      

  13.   

    //定义两个全局变量
    static CRect rectLarge;//保存不改变的对话框的位置
    static CRect rectSmall;//保存改变了的对话框的位置
    bHighLevel=FALSE;//全局的
    //在初始化函数中将对话框初始化为小的,IDC_PART_LINE_BOTTOM是我加的一个静态文本框,用来做分割
      if(rectLarge.IsRectNull())
      {
    CRect rectSeparator;
      GetWindowRect(&rectLarge);
      GetDlgItem(IDC_PART_LINE_BOTTOM)->GetWindowRect(&rectSeparator);
      rectSmall.left = rectLarge.left;
      rectSmall.top = rectLarge.top;
      rectSmall.right = rectLarge.right;
    rectSmall.bottom = rectSeparator.bottom;
      }
    //在登录函数中添加判断,点击一下为高级大框,再点击一下为显示小的
    if(!bHighLevel)
    {
    SetWindowPos(NULL,0,0,rectLarge.Width(),rectLarge.Height(),
    SWP_NOMOVE | SWP_NOZORDER);//设置窗口位置
    bHighLevel=TRUE; }
    else
    {
    SetWindowPos(NULL,0,0,rectSmall.Width(),rectSmall.Height(),
    SWP_NOMOVE | SWP_NOZORDER);
    bHighLevel=FALSE;
    }