VC獲取屏幕分辨率及大小相關(轉)


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 及更早版本的支持


免責聲明!

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



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