VC獲取螢幕解析度及大小相關

2021-06-21 07:08:55 字數 2318 閱讀 2091

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 );

這兩個函式獲取的是真正螢幕的大小。

當顯示器解析度改時時,傳送這個訊息 wm_displaychanged

VC獲取螢幕解析度及大小相關

vc得到螢幕的當前解析度方法 1.windows api呼叫 int width getsystemmetrics sm cxscreen int height getsystemmetrics sm cyscreen 如果想動態自適應解析度的變化,處理wm displaychange訊息.2.獲得...

VC中獲取螢幕解析度及大小相關

vc得到螢幕的當前解析度方法 1.windows api呼叫 int width getsystemmetrics sm cxscreen int height getsystemmetrics sm cyscreen 如果想動態自適應解析度的變化,處理wm displaychange訊息.2.獲得...

獲取手機螢幕解析度

獲取手機螢幕解析度的類 displaymetrics dm new displaymetrics getwindowmanager getdefaultdisplay getmetrics dm 獲得手機的寬頻和高度畫素單位為px string str 手機螢幕解析度為 dm.widthpixels...