Windows API實現視窗居中

2021-07-01 21:44:37 字數 1894 閱讀 5676

**如下:

//居中視窗

int scrwidth, scrheight;

rect rect;

scrwidth = getsystemmetrics(sm_cxscreen);

scrheight = getsystemmetrics(sm_cyscreen);

getwindowrect(hwnd, &rect);

setwindowpos(hwnd, hwnd_topmost, (scrwidth - rect.right) / 2, (scrheight - rect.bottom) / 2, rect.right - rect.left, rect.bottom - rect.top, swp_showwindow);

具體說明:

要實現視窗居中顯示並不難,只要在窗體建立的時候我們設定視窗的位置就可以了.在這裡我們主要用到3個api函式,分別是:getsysmetrics,getwindowrect,setwindowpos.

我們用getsysmetrics來獲的螢幕的寬度和高度,然後用getwindowrect來獲取視窗的座標.通過運算後計算出居中視窗的位置,最後用setwindowpos來設定窗體的位置.整個過程就是如此,而這些部步驟我們都要在視窗建立之前設定好,所以我們要把這些實現方法寫進wm_create訊息中.

現在讓我們看一下,以上3個api函式的解釋,下面的說明是從

getsystemmetrics

函式功能:

返回與windows

環境有關的資訊。

函式原型:int getsystemmetrics(int nindex)

引數:nindex:

常數,指定欲獲取的資訊。由於取值很多,所以在這裡不一一枚舉了,本例子只用到兩個常數值:

sm_cxscreen:螢幕寬度。

sm_cyscreen:螢幕高度。

getwindowrect

函式功能:該函式返回指定視窗的邊框矩形的尺寸。該尺寸以相對於螢幕座標左上角的螢幕座標給出。

函式原型:bool getwindowrect(hwnd hwnd,lprectlprect);

引數:hwnd:視窗控制代碼。

lprect:指向乙個rect結構的指標,該結構接收視窗的左上角和右下角的螢幕座標。

返回值:如果函式成功,返回值為非零:如果函式失敗,返回值為零。

setwindowpos

函式功能:該函式改變乙個子視窗,彈出式視窗式頂層視窗的尺寸,位置和z序。子視窗,彈出式視窗,及頂層視窗根據它們在螢幕上出現的順序排序、頂層視窗設定的級別最高,並且被設定為z序的第乙個視窗。

函式原型:bool setwindowpos(hwn hwnd,hwnd hwndlnsertafter,int x,int y,int cx,int cy,unit.flags);

引數:hwnd:視窗控制代碼。

hwndlnsertafter:在z序中的位於被置位的視窗前的視窗控制代碼。該引數必須為乙個視窗控制代碼,或下列值之一:

hwnd_bottom:將視窗置於z序的底部。如果引數hwnd標識了乙個頂層視窗,則視窗失去頂級位置,並且被置在其他視窗的底部。

hwnd_dottopmost:將視窗置於所有非頂層視窗之上(即在所有頂層視窗之後)。如果視窗己經是非頂層視窗則該標誌不起作用。

hwnd_top:將視窗置於z序的頂部。

hwnd_topmost:將視窗置於所有非頂層視窗之上。即使視窗未被啟用視窗也將保持頂級位置。

查g看該引數的使用方法,請看說明部分。

x:以客戶座標指定視窗新位置的左邊界。

y:以客戶座標指定視窗新位置的頂邊界。

cx:以畫素指定視窗的新的寬度。

cy:以畫素指定視窗的新的高度。

uflags:視窗尺寸和定位的標誌。

02 使用Windows API建立視窗

1 開啟visual studio 2017,其他visual studio版本也可以 2 新建乙個windows桌面嚮導專案,或者win32應用程式專案都可以 3 新建專案時,選擇windows應用程式,並勾上空專案 4 新加原始檔,注意因為windowsapi都是c語言實現,所以,新加檔案的字尾...

C winform視窗開啟特效及視窗位置居中

在啟動乙個程式時,我們希望視窗顯示的位置處於螢幕的正中心,可以如下設定 mainform mainform new mainform mainform.startposition formstartposition.centerscreen mainform.show 如果在允許操作主視窗之前,必須...

C winform視窗開啟特效及視窗位置居中

在啟動乙個程式時,我們希望視窗顯示的位置處於螢幕的正中心,可以如下設定 mainform mainform new mainform mainform.startposition formstartposition.centerscreen mainform.show 如果在允許操作主視窗之前,必須...