一个基于对话框的程序,标题栏上有最大/还原/最小化,因为我有一段代码必须是用户点击最小化后,然后点击还原触发此代码,不知道应该是在什么消息下写?
也就是说在什么地方添加还原对话框的代码?

解决方案 »

  1.   

    如果是前者,调用ShowWindow(SW_SHOWNORMAL);
    如果是后者,响应WM_SIZE消息,在afx_msg void OnSize(UINT nType,int cx,int cy);方法里根据nType==SIZE_RESTORED来判断对话框被恢复了.
      

  2.   

    是这样的这个基于对话框的程序,有一个状态栏,在显示的时总是被任务栏遮蔽,我想让它和浏览器一样,可以把状态栏显示出来,又因为中
    CHSMSDlg::OnInitDialog()
    {
    ...
        //设置窗口最大化
        ShowWindow(SW_MAXIMIZE);
        //获取窗口大小
        GetClientRect(rect);
        //使状态栏可以显示看到
        MoveWindow(0,0,rect.Width(),rect.Height()-10);
    ...
    }但是一旦点击最小化后,又成最大化了,又看不见状态栏了,
    我在 OnSize(UINT nType,int cx,int cy);方法中添加了if (nType==SIZE_RESTORED)MoveWindow(0,0,rect.Width(),rect.Height()-10);
    但是没有触发执行.
      

  3.   

    是这样的这个基于对话框的程序,有一个状态栏,在显示的时总是被任务栏遮蔽,我想让它和浏览器一样,可以把状态栏显示出来,又因为中
    CHSMSDlg::OnInitDialog()
    {
    ...
        //设置窗口最大化
        ShowWindow(SW_MAXIMIZE);
        //获取窗口大小
        GetClientRect(rect);
        //使状态栏可以显示看到
        MoveWindow(0,0,rect.Width(),rect.Height()-10);
    ...
    }但是一旦点击最小化后,又成最大化了,又看不见状态栏了,
    我在 OnSize(UINT nType,int cx,int cy);方法中添加了if (nType==SIZE_RESTORED)MoveWindow(0,0,rect.Width(),rect.Height()-10);
    但是没有触发执行.
      

  4.   

    那OnSize应该进来的吧。你看看当时那个nType的值是多少。
      

  5.   

    SIZE_MINIMIZED是窗口最小化时候,后来窗口不是又被放大了吗?那时的nType是多少?
      

  6.   

    因为在
    //设置窗口最大化OnInitDialog()中有这么一句
    ShowWindow(SW_MAXIMIZE);//这句也就是想将对话框高度调少些,以便任务栏显示出来.
    MoveWindow(0,0,rect.Width(),rect.Height()-10);还原后,是还原成最大化了(因为OnInitDialog()中有这么一句 ShowWindow(SW_MAXIMIZE);),所以返回值是,SIZE_MAXIMIZED
      

  7.   

    那你就在OnSize里的if(nType==SIZE_MAXIMIZED)后面写那句MoveWindow好了阿~可是真的挺奇怪,为什么你最大化后的窗口会被任务栏遮住?我这里不会遮住的阿~