vc得到屏幕的當前分辨率方法: 1.Windows API調用 int width = GetSystemMetrics ( SM_CXSCREEN ); int height= GetSystemMetrics ( SM_CYSCREEN ); 如果想動態自適應分辨率的變化,處理WM_DISPLAYCHANGE消息. 2.獲得分辨率 BOOL EnumDisplaySettings( LPCTSTR lpszDeviceName, // display device DWORD iModeNum, // graphics mode LPDEVMODE lpDevMode // graphics mode settings );
改變分辨率 LONG ChangeDisplaySettings( LPDEVMODE lpDevMode, // graphics mode DWORD dwflags // graphics mode options ); 3.用GetDeviceCaps
int GetDeviceCaps( HDC hdc, // handle to the device context int nIndex // index of capability to query );
4.用GetDeviceCaps HDC hdcScreen = GetDC( NULL ); int cx = GetDeviceCaps( hdcScreen, HORZRES ); int cy = GetDeviceCaps( hdcScreen, VERTRES ); DeleteObject( hdcScreen ); 其中nIndex可以取: HORZRES VERTRES 或 分別表示: HORZRES :Width, in pixels, of the screen. VERTRES :Height, in raster lines, of the screen.
也就是設備的分辨率了 5.得到桌面客戶區的大小 (1) 最簡單,使用API RECT rc; SystemParametersInfo(SPI_GETWORKAREA, 0, (PVOID) &rc, 0); str.Format("%d*%d",rc.right-rc.left,rc.bottom-rc.top); (2)間接計算得到:先用上面的3種方法得到這個屏幕的大小,再減去任務欄的大小(注意:要考慮任務欄是否隱藏的情況) int cx = GetSystemMetrics(SM_CXSCREEN); int cy = GetSystemMetrics(SM_CYSCREEN); 或 HDC hdcScreen = GetDC( NULL ); int cx = GetDeviceCaps( hdcScreen, HORZRES ); int cy = GetDeviceCaps( hdcScreen, VERTRES ); DeleteObject( hdcScreen );
任務欄: CWnd* pTaskWnd = FindWindow( _T("Shell_TrayWnd"), NULL ); if( pTaskWnd ) pTaskWnd->ShowWindow( FALSE ); 任務欄是否隱藏: LONG lStyle = GetWindowLong( pTaskWnd->GetSafeHwnd(), GWL_STYLE ); if( lStyle & WS_VISIBLE ) { //可見 } else { //隱藏 }
///////////////////////////////// VC獲取屏幕大小 int with= GetSystemMetrics(SM_CXFULLSCREEN);
int heigh= GetSystemMetrics(SM_CYFULLSCREEN);
通過上邊兩個函數獲取的是顯示屏幕的大小,及不包括任務欄等區域。
int cx = GetSystemMetrics( SM_CXSCREEN ); int cy = GetSystemMetrics( SM_CYSCREEN );
這兩個函數獲取的是真正屏幕的大小。
用前兩個函數獲取的大小可能是1024*687 而用下邊兩個獲取的就是1024*768 說明 返回與windows環境有關的信息 返回值 Long,取決於具體的常數索引 參數表 參數 類型及說明 nIndex Long,常數,指定欲獲取的信息;如下表所示 nIndex常數設置 常數定義 取得信息 SM_ARRANGE 設置windows如何排列最小化窗口的一個標志。參考api32.txt中的ARW常數 SM_CLEANBOOT 指定啟動模式。0=普通模式;1=帶網絡支持的安全模式 SM_CMETRICS 可用系統環境的數量 SM_CMOUSEBUTTON 鼠標按鈕(按鍵)的數量。如沒有鼠標,就為零 SM_CXBORDER, SM_CYBORDER 尺寸不可變邊框的大小 SM_CXCURSOR, SM_CYCURSOR 標准指針大小 SM_CXDLGFRAME, SM_CYDLGFRAME 對話框邊框的大小 SM_CXDOUBLECLK, SM_CYDOUBLECLK 雙擊區域的大小(參考注解) SM_CXFRAME, SM_CYFRAME 尺寸可變邊框的大小(在win95和nt 4.0中使用SM_C?FIXEDFRAME) SM_CXFULLSCREEN, SM_CYFULLSCREEN 最大化窗口客戶區的大小 SM_CXHSCROLL, SM_CYHSCROLL 水平滾動條上的箭頭大小 SM_CXHTHUMB, SM_CYHTHUMB 滾動塊在水平滾動條上的大小 SM_CXICON, SM_CYICON 標准圖標的大小 SM_CXICONSPACING, SM_CYICONSPACING 桌面圖標之間的間隔距離。在win95和nt 4.0中是指大圖標的間距 SM_CXMAXIMIZED, SM_CYMAXIMIZED 最大化窗口的默認尺寸 SM_CXMAXTRACK, SM_CYMAXTRACK 改變窗口大小時,最大的軌跡寬度 SM_CXMENUCHECK, SM_CYMENUCHECK 菜單復選號位圖的大小 SM_CXMENUSIZE, SM_CYMENUSIZE 菜單欄上的按鈕大小 SM_CXMIN, SM_CYMIN 窗口的最小尺寸 SM_CXMINIMIZED, SM_CYMINIMIZED 最小化的窗口必須填充進去的一個矩形小於或等於SM_C?ICONSPACING SM_CXMINTRACK, SM_CYMINTRACK 窗口的最小軌跡寬度 SM_CXSCREEN, SM_CYSCREEN 屏幕大小 SM_CXSIZE, SM_CYSIZE 標題欄位圖的大小 SM_CXSIZEFRAME, SM_CYSIZEFRAME 具有WS_THICKFRAME樣式的窗口的大小 SM_CXSMICON, SM_CYSMICON 小圖標的大小 SM_CXSMSIZE, SM_CYSMSIZE 小標題按鈕的大小 SM_CXVSCROLL, SM_CYVSCROLL 垂直滾動條中的箭頭按鈕的大小 SM_CYCAPTION 窗口標題的高度 SM_CYKANJIWINDOW Kanji窗口的大小(Height of Kanji window) SM_CYMENU 菜單高度 SM_CYSMCAPTION 小標題的高度 SM_CYVTHUMB 垂直滾動條上滾動塊的高度 SM_DBCSENABLED 如支持雙字節則為TRUE SM_DEBUG 如windows的調試版正在運行,則為TRUE SM_MENUDropALIGNMENT 如彈出式菜單對齊菜單欄項目的左側,則為零 SM_MIDEASTENABLED 允許了希伯來和阿拉伯語 SM_MOUSEPRESENT 如安裝了鼠標則為TRUE SM_MOUSEWHEELPRESENT 如安裝了帶輪鼠標則為TRUE;只適用於nt 4.0 SM_NETWORK 如安裝了網絡,則設置位0。其他位保留未用 SM_PENWINDOWS 如裝載了支持筆窗口的DLL,則表示筆窗口的句柄 SM_SECURE 如安裝了安全(保密)機制,則為TRUE SM_SHOWSOUNDS 強制視覺提示播放聲音 SM_SLOWMACHINE 系統速度太慢,但仍在運行中(System is too slow for effective use but is being run anyway) SM_SWAPBUTTON 如左右鼠標鍵已經交換,則為TRUE '注意這里 注解 雙擊區域指定屏幕上一個特定的顯示區域,只有在這個區域內連續進行兩次鼠標單擊,才有可能被當作雙擊事件處理 其他 常數 SM_ARRANGE, SM_CLEANBOOT, SM_CMETRICS, SM_C?MAXIMIZED, SM_C?MAXTRACK, SM_C?SIZEFRAME, SM_C?SMICON, SM_C?SMSIZE, SM_CYSMCAPTION, SM_SECURE, SM_SHOWSOUNDS, and SM_SLOWMACHINE 未獲 NT 3.51 及更早版本的支持