還是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),這樣就可以顯示出滾動條了,隻不過滾動塊的大小是标準大小,不是根據比例确定的大小而已。