滾動視窗在應用程序中十分有用,它可以使用戶看到比顯示器屏幕還大的窗口。下面有一個建立滾動視窗的實例,在該例中,不僅滾動條會與視窗相連,而且HOME、PAGE DOWN、PAGE UP和END方向鍵會與視窗相連。現將本例中需用到的函數和類作一些必要的說明。
CscrollView類:它是從CvIEw類派生出來的,可以支持窗口的滾動。
GetsystemMetrics函數:它是Window中的函數,可以返回Windows顯示屏幕的高度和寬度。
OnCreate函數:若Windows發送調用。每次應用要求創建一個窗口時,WM-CREATE消息都會被發送。在本例中,Onc WM-CREATE消息,在本例中,Oncreate函數完成一些字初始化操作,如:設置窗口的大小,頁的大小和滾動行的大小。
SetScrollSizes它是滾動視窗在初始階段必要的CscrollVIEw類的成員函數。
該程序的目的是建立一個三倍於屏幕的寬度和高度的大窗口,且有視窗的中央顯示出一個大的矩形,視窗最大化時,用戶只能看到矩形的1/9。通過滾動條或方向鍵,用戶寸可以見到它的全貌,以下是建立滾動視窗的步驟:
1、運行AppWizard來創建EX例程,其中的Options選項設為lnital Toolbar和Generate Source Comments。
2、替換CEXCView類,用Visual Workbench的編輯器將ExView.h和ExView.cpp中所有的CVIEW替換成CScrollVIEw。
3、利用ClassWizard來加進對WM-CREATE和WM-KEYDOWN消息進行控制的函數,CLassWizard能夠自動地生成Oncreate和OnkeyDown成員函數。
4、對消息控制函數進行編輯。因為ClassWizard已經自動地為我們生成了函數的框架,因此,用戶只需找到這些框架加入代碼即可。
在OnCreate函數的returm-1語句後中加入代碼:
Csize totalSize=Csize(::GetSystemMetrics(SM-CXSCREEN)*3,
::GetSystemMetrics(SM-CYSCREEN)*3);
Csize pageSize=Csize(totalSize.cx/3,totalSize.cy/3);
Csize lineSize=Csize(totalSize.cx/100,totalSize.cy/100);
SetScrollSizes(MM-TEXT,totalSize,pageSize,lineSize);
在OnKeyDowm函數中加入代碼:
switch(nChar){
case VK-HOME:
OnScroll(SB-VERT,SB-TOP,0);
OnScroll(SB-HORZ,SB-TOP,0);
break;
case VDK-END:
OnScroll(SB-VERT,SB-BOTTOM,0);
break;
case VK-UP:
OnScroll(SB-VERT,SB-LINEUP,0);
break;
case VK-DOWN:
OnScroll(SB-VERT,SB-LINEDOWN,0);
break;
case VK-PRIOR;
OnScroll(SB-VERT,SB-PAGEUP,0);
break;
case VK-NEXT;
OnScroll(SB-VERT,SB-PAGEDOWN,0);
break;
case VK-LEFT;
OnScroll(SB-HORZ,SB-PAGEUP,0);
break;
case VK-RIGHT;
OnScroll(SB-HORZ,SB-PAGEDOWN,0);
break;
default:
break;
}
在OnDraw函數中加入以下代碼來代替OnDraw函數中原來的代碼:
int x=::GetSystemMetrics(SM-CXSCREEN);
int y=::GetSystemMetrics(SM-CYSCREEN);
pDC->SelectStockObject(GRAY-BRUSH);
pDC->Rectangle(Crect(x-300,y-300,x+300,y+300));
5、創建,執行程序,在Visual Workench中,在Project菜單中選擇Build,然後再選擇Execute,程序就會在滾動視窗中顯示一個大的正方形,用戶可以通過滾動條和HOME等方向鍵來觀察它。