一般情況下,計算機用戶都是使用單一的顯示屏來觀察顯示的信息,目前比較流行的是17英寸的顯示器,可以滿足一般用戶的需求。但是在一些特殊的場合下,例如需要對現場進行大範圍的監控、CAD繪圖、或套用電子地圖技術等的情況下,需要全景顯示時,用戶就不得不要求計算機有足夠大的顯示桌面,以便對場景的細節看的更清楚、操作起來更方便。
針對上述情況,即使是二十九寸的顯示器其有效的顯示尺寸也是十分有限的,這時候解決桌面大小問題就不得不採用分屏顯示技術,Windows作業系統支持這種技術,這裡的分屏顯示並不是指採用分屏分配器驅動多個顯示器,從而使多個螢幕顯示相同的畫面,就如同VC界面編程中的動態拆分效果,而是指在一台計算機上安裝多個顯示卡帶多台顯示器,實現成倍的擴展計算機桌面尺寸的目的。
例如台灣Dream公司推出的ViewPacket軟體,可以一邊顯示視頻流,一邊編輯Word文檔,一邊上網瀏覽網路上的信息,極大的方便了用戶的使用。
為了安裝多顯示器,首先檢查機器硬體,當前Windows作業系統只支持PCI適配器來實現多顯示器桌面,它要求顯示卡必須使用以下晶片組中的一種:ATI Mach64、S3 764和764+、Cirrushgic5436、5446和7458、Imagine 128 Series1和2、S3 Virge或ET6000、M9711等。一般情況下,一個顯示卡驅動一個顯示器,一台機器最多可以驅動7台顯示器,其中一台為主顯示器,其餘為副顯示器。主顯示器也是Windows啟動畫面出現的那個顯示器。
進入"控制臺"-"顯示",雙擊"顯示",彈出"顯示屬性"對話框,選中"設定",如果安裝了多個監視器,這時候對話框的上半部分顯示系統中目前顯示器的數量。可右鍵單擊一個監視器圖示,再單擊"標識"查看對應於單擊其圖示的監視器的顯示編號。請將它們拖動到代表在監視器間移動項目方式的位置。例如,如果您正使用兩個監視器,並希望通過左右拖動來將項目從一個監視器中移到另一個中,請將圖示並排排列。要通過上下拖動來在監視器間移動項目,請將圖示上下排列。圖示的位置並不一定與監視器的物理位置相對應。您可以將圖示上下放置,即使監視器是並排放置的。
通過上面的設定,雖然使Windows支持多顯示器擴展桌面的功能,但也僅僅是實現了設備的連線與管理,一般Windows應用程式的視窗不能自動運行到副顯示器上,用戶只能通過滑鼠拖動來將程式的視窗擴展到副顯示器上,如果需要將程式視窗自動擴展到不同的顯示器顯示,必須採用相應的分屏顯示編程技術。在這種技術中,可以使用Windows的User32.DLL動態連線庫提供的API函式SetWindowPos()(如果採用VC這個開發平台,CWnd類提供了一個同樣的成員函式),它的功能是更改視窗的大小、位置及視窗的順序,因此可以用來在多顯示器桌面上實現應用程式窗體的定位顯示。下面對這個函式進行詳細的解釋:
BOOL SetWindowPos(
HWND hWnd, // 視窗的句柄;
HWND hWndInsertAfter, // 視窗次序句柄,
int X, // 視窗左上角的水平位置;
int Y, // 視窗左上角的垂直位置;
int cx, // 視窗的寬度;
int cy, // 視窗的高度;
UINT uFlags file://標誌位;
);
這裡需要解釋的有hWndInsertAfter、uFlags兩個參數
hWndInsertAfter
在視窗的"Z"序中排在需要的設定的視窗之前的視窗句柄;這個參數取以下值:
Value Meaning
HWND_BOTTOM 將要操作的視窗放置在所有視窗之下;
HWND_NOTOPMOST 將要操作的視窗放置在"non-topmost"視窗之下;
HWND_TOP 將操作的視窗放置在所有的視窗之上;
HWND_TOPMOST 將要操作的視窗放置在"non-topmost"視窗之上;
uFlags
規定視窗的尺寸和位置的標誌,這個參數通常取以下值:
Value Meaning
SWP_DRAWFRAME 視窗重畫時,繪製出視窗類中所描述的視窗的框架
SWP_HIDEWINDOW 隱藏視窗;
SWP_NOACTIVATE 視窗無任何動作;
SWP_NOMOVE
保持視窗的當前位置;
SWP_NOREDRAW 在新位置並不重畫視窗;
SWP_NOSIZE 改變視窗的位置,並不改變視窗的大小,既忽略cx,cy兩個參數的值;
SWP_NOZORDER 視窗重畫時,保留當前的順序,既忽略hWndInsertAfter參數的值
SWP_SHOWWINDOW Displays the window.
另,該參數還可以取其它的值,具體含義讀者可以參考MSDN。
為了說明問題,下面的VB代碼僅僅實現了在兩個顯示器分別顯示不同的視窗,用戶點擊按鈕後,主顯示器顯示視窗Form1,副顯示器顯示視窗Form2,感興趣的讀者可以稍加修改,就可以套用到實際項目開發中去。
首先在VB全局模組中聲明:
Public Declare Function SetWindowPos Lib "user32" Alias "SetWindowPos" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
其次在需要定位的兩個視窗模組中調用該函式。具體的VB代碼是:
Private Sub Form1_Load( )
Const HWND_TOPMOST=-1
Const SWP_NOACTIVATE=&H10
SetWindowPos Me.hWnd, HWND_TOPMOST, 0, 0, ScreenWidht/2, ScreenHeight, SWP_NOACTIVATE '在主顯示器的顯示區域上顯示視窗1;
End Sub
Private Sub Form2_Load( )
Const HWND_TOPMOST=-1
Const SWP_NOACTIVATE=&H10
SetWindowPos Me.hWnd, HWND_TOPMOST, ScreenWidht/2, 0, ScreenWidht/2, ScreenHeight, SWP_NOACTIVATE '在副顯示器的顯示區域上顯示視窗2;
End Sub
為了正確的顯示,需要將窗體的ScaleMode屬性設定為twips,這樣才可以與Windows系統中ScreenWidth和ScreenHeight的計量單位twips保持一致。
到2009年夏天,賓士S級的車主與乘客將可以同時使用COMAND系統提供的導航和娛樂功能。賓士把這種同博世合作開發的技術稱作“分屏(Splitview)”。
Splitview技術將在明年夏天套用於賓士S級轎車
從具體的技術層面來講,“分屏”技術能把2個不同畫面的像素先進行拆分,然後“相間”地在8英寸的螢幕上排列來自不同畫面的像素。這時你所看到的信息是完全零亂的。技術的關鍵就是賓士會在這塊LCD上附加一張過濾罩,信息交錯的像素所發出的光線,經過這個過濾罩後,就會被分離成2幅獨立而完整的畫面了,而且這2幅畫面的方向性比較強,這樣不同座位上的人才可以各取所需,互不干擾。賓士還強調,該版本的COMAND系統還可以支持2個用戶隨時各自調整自己的顯示信息,譬如司機可以通過中控台上的按鈕縮放地圖,同時旁邊的乘客可以用遙控器選擇想看的影片,甚至電視頻道。當然考慮到對駕駛安全的影響,S級肯定會提供耳機插座。
這家百年老店總是第一時間將新穎又實用的技術運用到汽車上
從根本的設計思路上,有點像風靡一時的立體電影,通過特殊的眼鏡分離不同的畫面,分別送到人的左眼和右眼,大腦會誤認為電影是立體的。而在新一代COMAND的“分屏”技術面前,左眼是司機,右眼是乘客。
聯想到立體電影經常會導致很多人眼睛不適,甚至頭暈,分屏技術的畫面質量是否可以得到保證,受到了人們的質疑。但賓士對此信心十足,因為賓士S級從未讓她的客戶失望過。