SetWindowPos 函式詳解

2021-06-12 08:55:46 字數 3206 閱讀 3226

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:將視窗置於所有非頂層視窗之上。即使視窗未被啟用視窗也將保持頂級位置。

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

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

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

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

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

uflags:視窗尺寸和定位的標誌。該引數可以是下列值的組合:

swp_asncwindowpos:如果呼叫程序不擁有視窗,系統會向擁有視窗的執行緒發出需求。這就防止呼叫執行緒在其他執行緒處理需求的時候發生死鎖。

swp_defererase:防止產生wm_syncpaint訊息。

swp_drawframe:在視窗周圍畫乙個邊框(定義在視窗類描述中)。

swp_framechanged:給視窗傳送wm_nccalcsize訊息,即使視窗尺寸沒有改變也會傳送該訊息。如果未指定這個標誌,只有在改變了視窗尺寸時才傳送wm_nccalcsize。

swp_hidewindow;隱藏視窗。

swp_noactivate:不啟用視窗。如果未設定標誌,則視窗被啟用,並被設定到其他最高端視窗或非最高端組的頂部(根據引數hwndlnsertafter設定)。

swp_nocopybits:清除客戶區的所有內容。如果未設定該標誌,客戶區的有效內容被儲存並且在視窗尺寸更新和重定位後拷貝回客戶區。

swp_nomove:維持當前位置(忽略x和y引數)。

swp_noownerzorder:不改變z序中的所有者視窗的位置。

swp_noredraw:不重畫改變的內容。如果設定了這個標誌,則不發生任何重畫動作。適用於客戶區和非客戶區(包括標題欄和滾動條)和任何由於窗回移動而露出的父視窗的所有部分。如果設定了這個標誌,應用程式必須明確地使視窗無效並區重畫視窗的任何部分和父視窗需要重畫的部分。

swp_noreposition;與swp_noownerzorder標誌相同。

swp_nosendchanging:防止視窗接收wm_windowposchanging訊息。

swp_nosize:維持當前尺寸(忽略cx和cy引數)。

swp_nozorder:維持當前z序(忽略hwndlnsertafter引數)。

swp_showwindow:顯示視窗。

返回值:如果函式成功,返回值為非零;如果函式失敗,返回值為零。若想獲得更多錯誤訊息,請呼叫getlasterror函式。

備註:如果設定了swp_showwindow和swp_hidewindow標誌,則視窗不能被移動和改變大小。如果使用setwindowloog改變了視窗的某些資料,則必須呼叫函式setwindowpos來作真正的改變。使用下列的組合標誌:swp_nomoveiswp_nosizeiswp_framechanged。

有兩種方法將視窗設為最頂層視窗:一種是將引數hwndlnsertafter設定為hwnd_topmost並確保沒有設定swp_nozorder標誌;另一種是設定視窗在z序中的位置以使其在其他存在的視窗之上。當乙個視窗被置為最頂層視窗時,屬於它的所有視窗均為最頂層視窗,而它的所有者的z序並不改變。

如果hwnd_topmost和hwnd_notopmost標誌均未指定,即應用程式要求視窗在啟用的同時改變其在z序中的位置時,在引數hwndinsertafter中指定的值只有在下列條件中才使用:

在hwndlnsertafter引數中沒有設定hwnd_notopmost和hwnd_topmost標誌。

由hwnd引數標識的視窗不是啟用視窗。

如果未將乙個非啟用視窗設定到z序的頂端,應用程式不能啟用該視窗。應用程式可以無任何限制地改變被啟用視窗在z序中的位置,或啟用乙個視窗並將其移到最高端視窗的頂部或非最高端視窗的頂部。

如果乙個頂層視窗被重定位到z序的底部(hwnd_bottom)或在任何非最高序的視窗之後,該視窗就不再是最頂層視窗。當乙個最頂層視窗被置為非最頂級,則它的所有者視窗和所屬者視窗均為非最頂層視窗。

乙個非最頂端視窗可以擁有乙個最頂端視窗,但反之則不可以。任何屬於頂層視窗的視窗(例如乙個對話方塊)本身就被置為頂層視窗,以確保所有被屬視窗都在它們的所有者之上。

如果應用程式不在前台,但應該位於前台,就應呼叫setforegroundwindow函式來設定。

windows ce:如果這是乙個可見的頂層視窗,並且未指定swp_noactivate標誌,則這個函式將啟用視窗、如果這是當前的啟用視窗,並且指定了swp_noactivate或swp_hidewindow標誌,則啟用另外乙個可見的頂層視窗。

當在這個函式中的nflags引數裡指定了swp_framechanged標誌時,windowsce重畫視窗的整個非客戶區,這可能會改變客戶區的大小。這也是重新計算客戶區的唯一途徑,也是通過呼叫setwindowlong函式改變視窗風格後通常使用的方法。

setwindowpos將使wm_windowposchanged訊息向視窗傳送,在這個訊息中傳遞的標誌與傳遞給函式的相同。這個函式不傳遞其他訊息。

windows ce 1.0不支援在hwndlnsertaber引數中的hwnd_topmost和hwnd_notopmost常量。

windows ce1.0不支援在fufags引數中的swp_drawframe和swp_nocopybits標誌。

速查:windows nt:3.1以上版本;windows:95以上版本;windows ce:1.0以上版本;標頭檔案:winuser.h庫檔案:eser32lib。

SetWindowPos 逃跑按鈕

孫鑫老師在講 vc的過程中,曾實現 逃跑按鈕的效果 主要思想是,在基於對話方塊的工程中,可以通過新建乙個類 cnewbtn1 名字可以任意命名 讓該類繼承 cbutton 類,然後在對話方塊類中針對目標按鈕新建乙個成員變數 m btn1 通過選擇成員變數的型別為新建的繼承於 cbutton 類cne...

ngx process options函式詳解

ngx process options是初始化init cycle中的一些如 conf file,prefix,conf prefix等字段的功能,其方法的定義在src core nginx.c中,以下為詳細 主要功能是將ngx prefix,配置檔案的位置資訊,以及命令列引數的資訊初始化到cycl...

linux clock gettime函式詳解

注意 1.精確級別,納秒級別 原型long sys clock gettime clockid t which clock,struct timespec tp which clock引數解釋 clock realtime 系統實時時間,隨系統實時時間改變而改變,即從utc1970 1 1 0 0 ...