SCROLLINFO結構體中fMask和nPage的理解


還是VC++中有關顯示圖像的問題。

我們在顯示一幅比較大的圖像時,要使用帶標准滾動條的對話框。涉及對滾動條的操作就不得不提SCROLLINFO這個結構體。只看單詞意思就這道這個結構體要儲存滾動條的一些信息。究竟是哪些信息呢?我們先看看這個結構體的定義:

typedef struct tagSCROLLINFO
{
  UINT cbSize ;   // SCROLLINFO結構體長度的字節數
  UINT fMask ;    // 指定結構體中哪些成員有效
  int nMin;       // 滾動范圍最小尺寸
  int nMax ;        // 滾動范圍的最小尺寸
  UINT nPage ;        // 頁尺寸,用來確定比例滾動框的大小
  int nPos ;     // 滾動框的位置
  int nTrackPos ;   //
}SCROLLINFO,*LPSCROLLINFO;
typedef SCROLLINFO CONST *LPCSCROLLINFO
 
好了,與其說這個結構體儲存的是滾動條的信息,不如說它儲存了滾動塊的信息。滾動塊就是滾動條上的那個滑塊。下面我們具體說說這個結構體中幾個成員的含義。
首先,fMask,指定哪些成員有效,它的值是這些常亮:SIF_ALL,表示整個結構體都有效,SIF_PAGE,表示nPage成員有效,SIF_POS:nPos成員有效,SIF_RANGE, nMax和nMin有效。這些常量可以用或連接。
nMin:這個值我們通常都設定為0
nMax: 對於這個值,如果我們想在整個客戶區顯示一個比客戶區還要大的圖片,這個值就應該等於圖片大小和客戶區大小的差(水平和豎直兩個方向上)
nPage:這個屬性表示頁尺寸,怎么理解這個屬性呢。首先,它的設置是為了根據比例確定滾動塊的大小。這個值通常就取客戶區的大小。 但是要特別注意:當nMax<=nPage時,這時候如果使用nPage屬性,將不會顯示滾動條!!!!前面說過,nPage的設置是為了根據比例設置滾動塊的大小。我們平時看到的滾動條的滾動塊有大有小,有的滾動塊的大小還會隨着瀏覽篇幅的變化而變化。與這個nPage屬性有很大關系。但是: nMax<=nPage不代表沒有必要使用滾動條,只要nMax>nMin ,就是需要滾動條的,但是當nMax<nPage時,我們通常不設置nPage 屬性(設置分fMask時不選SIF_PAGE),這樣就可以顯示出滾動條了,只不過滾動塊的大小是標准大小,不是根據比例確定的大小而已。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM