• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 程序界面多模式顯示的實現

    發表于:2007-05-25來源:作者:點擊數: 標簽:程序實現模式顯示界面
    如果我們想在程序界面上實現象RealPlayer播放器那樣有正常和精簡兩種顯示模式,該怎樣實現呢?下面我用VC6.0做的一個多模式顯示程序示例來向大家展示,它是怎樣實現類似功能的。如下圖所示:(圖一) 正常顯示模式;(圖二)簡潔顯示模式,無視圖;(圖三),精簡
      如果我們想在程序界面上實現象RealPlayer播放器那樣有正常和精簡兩種顯示模式,該怎樣實現呢?下面我用VC6.0做的一個多模式顯示程序示例來向大家展示,它是怎樣實現類似功能的。如下圖所示:(圖一) 正常顯示模式;(圖二)簡潔顯示模式,無視圖;(圖三),精簡顯示模式,僅工具條。






    圖一 



    圖二

     

    圖三

      基本構成思想:

      實現原理很簡單,只要分別獲取窗體大小、客戶區大小、工具條大小、狀態條大小、邊框大小以及標題欄大小,既可根據不同顯示模式,計算出不同的新窗體的高度(關鍵在于要重新計算高度,寬度)。如:簡潔顯示模式(無視圖方式下),為寬度不變、高度=窗體高度-客戶區高度-狀態條高度-邊框高度既可。精簡顯示模式(僅工具條方式下),為寬度不變,先隱藏菜單、高度=標題欄高度+工具條高度+邊框高度既可。其實就是這么簡單,RealPlayer是寬度,高度一起改變并計算,本示例只簡單的改變高度,寬度不變,但基本原理是相同的。下面看看它的代碼實現情況吧!

      關鍵代碼實現:

      我先做了一個涵數,示例程序只需調用此涵數便可實現。其中當nViewType傳值為0時,為正常顯示模式、傳值為1時,為簡潔顯示模式、傳值為2時,為精簡顯示模式。

    void CMainFrame::ViewMode(int nViewType)
    {
    CRect ClientRect;
    CRect WindowRect;
    CRect ToolbarRect;
    CRect StatusbarRect;

    //獲取窗體、客戶區及工具條大小
    WindowRect = m_WindowRect;
    ClientRect = m_ClientRect;
    m_wndToolBar.GetWindowRect(&ToolbarRect);

    //獲取邊框及標題欄大小
    int borderHeight = GetSystemMetrics(SM_CYBORDER);
    int captionHeight = GetSystemMetrics(SM_CYCAPTION);

    //獲取狀態條大小
    CStatusBar* pStatus = (CStatusBar*) AfxGetApp()->m_pMainWnd->GetDescendantWindow(AFX_IDW_STATUS_BAR);
    pStatus->GetWindowRect(&StatusbarRect);

    //??抗ぞ邨l
    DockControlBar(&m_wndToolBar);

    int CompactCx; //新窗體寬
    int CompactCy; //新窗體高

    //以多種模式顯示
    switch(nViewType)
    {
    case 0:     //正常顯示模式
    {
    //顯示菜單
    if ( hMenu != NULL )
    ::SetMenu( m_hWnd, hMenu );

    //顯示狀態條
    pStatus->ShowWindow(SW_SHOW);

    //新窗體寬、高
    CompactCx=WindowRect.Width();
    CompactCy=WindowRect.Height();
    }
    break;
    case 1: //簡潔顯示模式
    {
    //顯示菜單
    if ( hMenu != NULL )
    ::SetMenu( m_hWnd, hMenu );

    //隱藏狀態條
    pStatus->ShowWindow(SW_HIDE);

    //新窗體寬、高
    CompactCx=WindowRect.Width();
    CompactCy=WindowRect.Height() - ClientRect.Height() + ToolbarRect.Height() - borderHeight;
    }
    break;
    case 2: //精簡顯示模式
    {
    //隱藏菜單
    hMenu = ::GetMenu(m_hWnd);
    ::SetMenu( m_hWnd, NULL );

    //隱藏狀態條
    pStatus->ShowWindow(SW_HIDE);

    //新窗體寬、高
    CompactCx=WindowRect.Width();
    CompactCy=captionHeight + ToolbarRect.Height() + borderHeight*2;
    }
    break;
    }

    //設置新窗體顯示
    SetWindowPos( &wndTop, WindowRect.left, WindowRect.top, CompactCx, CompactCy, SWP_SHOWWINDOW);

    }

      

    原文轉自:http://www.kjueaiud.com

    評論列表(網友評論僅供網友表達個人看法,并不表明本站同意其觀點或證實其描述)
    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>