乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      VC 單文檔程序全屏顯示及恢復(fù)--孤身我路!(My Blog)

       篩子 2006-03-19


      引言

      在編輯類軟件或程序代碼編輯程序中經(jīng)常要遇到一些長度特別大的文本或代碼,尤其是對于程序源碼的編輯,如果編輯界面太小,則需要頻繁拉動滾動條,對于程序員而言是很不情愿的,因為這樣會打斷程序的設(shè)計思路、影響編程的效果。因此不少軟件都具備了全屏放大的功能,將編輯界面放大到全屏幕,盡最大限度地減少對滾動條的依賴程度。相信不少程序員一定非常喜歡在VC的全屏編輯狀態(tài)下編程,本文就以Visual C++ 6.0為開發(fā)環(huán)境將普通的單文檔編輯視圖程序擴展為全屏編輯功能。

      程序的設(shè)計思路

      普通常規(guī)程序之所以在最大化的情況下沒能實現(xiàn)全屏,是由于狀態(tài)條、工具條、系統(tǒng)菜單、標(biāo)題欄等幾個窗口分別占據(jù)了一部分屏幕空間,所以實現(xiàn)視圖的全屏顯示首先要把以上幾個窗體隱藏起來,然后才可以考慮將視圖最大化的問題。

      隱藏狀態(tài)欄、工具條,可以將其當(dāng)作一個浮動的窗體,只需通過各自的句柄將ShowWindow()函數(shù)的參數(shù)設(shè)成SW_HIDE即可將這幾個窗體隱藏,同視圖非常類似,在需要顯示的時候可以用SW_SHOW標(biāo)志將其顯示出來。在此需要說明的是在進行全屏操作之前需要將當(dāng)前的視圖設(shè)置保存好,這在從全屏恢復(fù)為原始狀態(tài)時需要用到。該操作也比較簡單,只需簡單調(diào)用API函數(shù)GetWindowRect()即可。至于標(biāo)題欄的隱藏就不是簡單的隱藏窗口了,這涉及到窗體風(fēng)格的修改,要把WS_CAPTION風(fēng)格從現(xiàn)有的窗體風(fēng)格中剝離出來。這可以先用GetWindowLong()獲取到當(dāng)前的窗體風(fēng)格,然后通過邏輯運算將WS_CAPTION風(fēng)格從中剝離開來,最后再用SetWindowLong()函數(shù)將修改后的窗體風(fēng)格設(shè)置為當(dāng)前的窗體風(fēng)格。至于系統(tǒng)菜單的隱藏也可以很方便的加以實現(xiàn):先保存當(dāng)前菜單,然后將菜單設(shè)置為""就實現(xiàn)了菜單的隱藏。各個窗體都隱藏好后剩下的工作就是將編輯視圖放大到滿屏,可以用this來獲取當(dāng)前的視圖指針,并把ShowWindow ()函數(shù)的參數(shù)設(shè)為SW_SHOWMAXIMIZED就最終完成了整個全屏放大的全過程。

      至于從全屏恢復(fù)到初始狀態(tài)則完全是上述過程的逆操作:通過邏輯運算把WS_CAPTION風(fēng)格加入到窗體風(fēng)格中,恢復(fù)標(biāo)題欄的顯示;通過將狀態(tài)條和工具條的ShowWindow()函數(shù)的標(biāo)志參數(shù)設(shè)成WM_SHOW將其分別予以恢復(fù);系統(tǒng)菜單也可以通過從保存好的原始菜單中讀取并重新設(shè)置來恢復(fù)其原始面貌?,F(xiàn)在僅把隱藏的各個窗體顯示了出來,窗體還是處于滿屏狀態(tài),所以還要通過MoveWindow()函數(shù)把窗體的位置恢復(fù)到全屏前的狀態(tài),這也是我們?yōu)楹卧谌習(xí)r要保存窗體的一些原始參數(shù)的原因。

      三、 程序的具體實現(xiàn)

      前面部分在大體思路上對程序的設(shè)計實現(xiàn)進行了粗略的分析,但在實際編程中有不少的細節(jié)還未考慮進去,下面就根據(jù)前面的程序設(shè)計思路對其進行編碼,并結(jié)合其部分關(guān)鍵代碼進行講解說明,以便于更好的理解本程序的實現(xiàn)方法:

      全屏顯示部分:

      //通過設(shè)置SW_HIDE參數(shù)隱藏當(dāng)前的工具條、任務(wù)欄
      m_bToolBarWasVisible=(m_wndToolBar.IsWindowVisible()!=0);
      m_wndToolBar.ShowWindow(SW_HIDE);
      m_bStatusBarWasVisible=(m_wndStatusBar.IsWindowVisible()!=0);
      m_wndStatusBar.ShowWindow(SW_HIDE);
      ……
      //
      由于在全屏狀態(tài)下沒有系統(tǒng)菜單和工具條,所以需要顯示一個浮動的工具條按鈕用于//從全屏狀態(tài)下返回到正常狀態(tài)。
      //
      首先創(chuàng)建一個工具條對象,并把一個工具條資源裝載進來,同時對工具條的風(fēng)格進行//設(shè)置:
      m_pwndFullScreenBar=new CToolBar;
      m_pwndFullScreenBar->Create(this);
      m_pwndFullScreenBar->LoadToolBar(IDR_FULLSCREEN);
      m_pwndFullScreenBar->SetBarStyle(m_pwndFullScreenBar->GetBarStyle() |
      CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
      //
      浮動按鈕的效果
      m_pwndFullScreenBar->ModifyStyle(0, TBSTYLE_FLAT);
      m_pwndFullScreenBar->EnableDocking(0);
      //
      設(shè)置返回到正常狀態(tài)下的按鈕的位置
      CPoint pt(300,200);
      FloatControlBar(m_pwndFullScreenBar,pt);
      //
      在放大到滿屏前預(yù)先保存當(dāng)前的窗口位置
      GetWindowRect(&m_mainRect);
      //
      通過改變窗口風(fēng)格來隱藏標(biāo)題欄
      LONG style=::GetWindowLong(m_hWnd,GWL_STYLE);
      style&=~WS_CAPTION;
      ::SetWindowLong(m_hWnd,GWL_STYLE,style);
      int screenx=GetSystemMetrics(SM_CXSCREEN);
      int screeny=GetSystemMetrics(SM_CYSCREEN);
      //
      重新改變大?。?/font>
      SetWindowPos(NULL,0,0,screenx,screeny,SWP_NOZORDER);
      style=::GetWindowLong(m_hWnd,GWL_STYLE);
      m_bChildMax=(style & WS_MAXIMIZE)?true:false;
      //
      保存原有的系統(tǒng)菜單,并將當(dāng)前菜單設(shè)置為空
      CMenu* pOldMenu=GetMenu();
      m_OrgMenu.Attach(pOldMenu->Detach());
      SetMenu((CMenu*)NULL);
      //
      在其他窗體隱藏好后,將編輯視圖放大到滿屏
      this->ShowWindow (SW_SHOWMAXIMIZED);
      ……

      至于從全屏恢復(fù)到初始狀態(tài)的這部分代碼則相對比較簡單,只需依次將隱藏的各個窗體和菜單恢復(fù)出來并將視圖移動到原來大小即可,該段代碼許多地方同放大到全屏?xí)r的代碼相似,只是參數(shù)有所差異而已。下面就是恢復(fù)部分的主要代碼:

      ……
      //
      將保存的系統(tǒng)菜單恢復(fù)出來
      SetMenu(&m_OrgMenu);
      m_OrgMenu.Detach();
      //
      釋放掉在全屏?xí)r創(chuàng)建的工具條指針對象,由于是用new創(chuàng)建的,在系統(tǒng)堆中為指針分//配地址空間,在程序退出時不能自動釋放,所以必須要用delete顯式地進行釋放
      delete m_pwndFullScreenBar;
      //
      把前面剝離出去的WS_CAPTION風(fēng)格在加入到窗體風(fēng)格中。
      LONG style=::GetWindowLong(m_hWnd,GWL_STYLE);
      style|=WS_CAPTION;
      ::SetWindowLong(m_hWnd,GWL_STYLE,style);
      //
      顯示工具條、任務(wù)欄
      if(m_bToolBarWasVisible)
      m_wndToolBar.ShowWindow(SW_SHOW);
      if(m_bStatusBarWasVisible)
      m_wndStatusBar.ShowWindow(SW_SHOW);
      MoveWindow(&m_mainRect);
      RecalcLayout();
      ……

      小結(jié):

      本文主要是針對單文檔框架的程序進行設(shè)計的,由于不涉及到子窗體,因此比較簡單。對于多文檔的全屏放大,實現(xiàn)方法在總體思路上是與之相一致的。只是在處理全屏顯示與恢復(fù)時需要將程序子框架也響應(yīng)的進行放大與縮小,標(biāo)題欄也要通過改變窗口風(fēng)格的方式來隱藏與恢復(fù)顯示。本程序?qū)τ谄渌诜蔷庉嬕晥D的程序也是適用的。本文所述程序在Windows 2000 Professional下由Microsoft Visual C++ 6.0編譯通過。


        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多