在一个dialogue 中, 设置border 为NONOthis->m_bMaxSize// 窗口是否处于最大化状态
在dialog 有一个按钮, 当点击的时候 响应如下代码: this->ShowWindow(this->m_bMaxSize ? SW_RESTORE : SW_MAXIMIZE);
this->m_bMaxSize = !this->m_bMaxSize;当窗口最大化的时候, 居然 把 任务栏也给遮住了,  我如何不把任务栏给遮住? 

解决方案 »

  1.   

    CRect rc;
    SystemParametersInfo(SPI_GETWORKAREA,0,&rc,0); 
    MoveWindow(&rc);
      

  2.   

    CRect m_rcWnd;
    CRect m_rcWorkArea;
    afx_msg LRESULT OnGetRect(WPARAM wParam, LPARAM lParam);#define UM_GETRECT WM_USER+0x11ON_MESSAGE(UM_GETRECT, &CXXDlg::OnGetRect)BOOL CXXDlg::OnInitDialog()
    {
     ...
     PostMessage(UM_GETRECT);
     return TRUE;
    }LRESULT CXXDlg::OnGetRect(WPARAM wParam, LPARAM lParam)
    {
      SystemParametersInfo(SPI_GETWORKAREA, 0, &m_rcWorkArea, 0);
      GetWindowRect(m_rcWnd);  return 0;
    }// 按钮响应函数中
    static BOOL bMaximum = FALSE;
    MoveWindow((bMaximum = !bMaximum) ? m_rcWorkArea : m_rcWnd);
      

  3.   

    以简便为原则:
    尝试了一楼的方法在 click 事件中:
    this->ShowWindow(this->m_bMaxSize ? SW_RESTORE : SW_MAXIMIZE);
    if(this->m_bMaxSize)
    {
    this->ShowWindow(SW_RESTORE);
    }
    else
    {
    CRect rc;
    SystemParametersInfo(SPI_GETWORKAREA,0,&rc,0); 
    MoveWindow(&rc);
    } this->m_bMaxSize = !this->m_bMaxSize;如果注释 红色的一行的话,  那么当点击按钮的时候,变成最大化(任务栏不会遮住),但是不能恢复成原来的,但如果不注释红色的话, 可以正常显示,只是貌似从最大化变成正常的时候, 会多闪一下这个 能有谁 解释下 吗? 
      

  4.   

    int sx=GetSystemMetrics(SM_CXSCREEN);  //获得屏幕的大小-宽
    int sy=GetSystemMetrics(SM_CYSCREEN);  //获得高
    int st=GetSystemMetrics(SM_CYSIZE); //获得任务栏的高度
    MoveWindow(0,0,sx,sy-st);  //移动窗口这样就可以了
      

  5.   


    int sx=GetSystemMetrics(SM_CXFULLSCREEN); //获得屏幕的大小-宽
    int sy=GetSystemMetrics(SM_CYFULLSCREEN); //获得高
    MoveWindow(0,0,sx,sy); //移动窗口