我在1024×768下做界面程序一开始就最大化窗口,用了ShowWindow(SW_SHOWMAXIMIZED);//最大化主窗口是最大化了调到800*600下却远远超过整个屏幕了,应该如何处理?
就是无论在哪种分辨率下最大化时,都是一屏,(不遮住任务栏)

解决方案 »

  1.   

    GetSystemmetrics SM_CXSCREEN SM_CXSCREEN//得到屏幕大小
      

  2.   


        调整显示器分辨率的时候,系统给所有的顶层窗口发送 WM_DISPLAYCHANGE 消息,处理它就行了:
       
        case WM_DISPLAYCHANGE:
    ShowWindow(hWnd,SW_SHOWMAXIMIZED);
    UpdateWindow(hWnd);
    return 0;
      

  3.   

    WM_DISPLAYCHANGE :怎么找不到啊,我是基于对话框的
      

  4.   

    BEGIN_MESSAGE_MAP(CWnd, CCmdTarget)
    ON_MESSAGE(WM_DISPLAYCHANGE, OnDisplayChange)
    END_MESSAGE_MAP()afx_msg LRESULT OnDisplayChange(WPARAM, LPARAM);
      

  5.   

    LRESULT CModbusMasterDlg::OnDisplayChange(WPARAM, LPARAM)
    {
      ShowWindow(SW_SHOWMAXIMIZED);
      return 0;
    }??
      

  6.   

    HDC hDC = ::GetDC(NULL);
    int width = GetDeviceCaps(hDC,HORZRES);
    int height= GetDeviceCaps(hDC,VERTRES);
    得到屏幕的宽和高,也就是分辨率,然后再设置窗口大小
      

  7.   

    你的程序是基于对话框的,在OnInitDialog()中,首先获取屏幕分辨率GetSystemmetrics(SM_CXSCREEN);// SM_CYSCREEN,以这个大小用SetWindowPos将窗口设置为屏幕大小。
      

  8.   

    int nWidth  = GetSystemMetrics(SM_CXSCREEN);
    int nHeight = GetSystemMetrics(SM_CYSCREEN);
    SetWindowPos(&wndTop,0,0,nWidth,nHeight,SWP_SHOWWINDOW);