SetWindowPos

ฟังก์ชันSetWindowPosเปลี่ยนขนาด ตำแหน่ง และ Z ลำดับของหน้าต่างแบบผุดขึ้น หรือระดับบนสุดลูก เด็ก หน้าต่างแบบผุดขึ้น และระดับบนสุดจะเรียงลำดับตามลักษณะที่ปรากฏบนหน้าจอ อยู่ด้านบนสุดของหน้าต่างได้รับเอก และมีหน้าต่างแรกในลำดับ Z.

 (BOOL SetWindowPos HWND  hWnd, / / จัดการหน้าต่างHWNDhWndInsertAfter, / / จัดการวางใบสั่งint X, / / แนวนอนตำแหน่งint Y, / / แนวตั้งตำแหน่ง int cx, // width int cy, // heightUINTuFlags / / วางตำแหน่งหน้าต่างการตั้งค่าสถานะ);
 

พารามิเตอร์

hWnd
จัดการไปยังหน้าต่าง.
hWndInsertAfter
จัดการไปยังหน้าต่างเพื่อทำการจัดวางตำแหน่งในหน้าต่างของใบ Z พารามิเตอร์นี้ต้องเป็นตัวจัดการหน้าต่างหรือหนึ่งในค่าต่อไปนี้:
ค่า ความหมาย
HWND_BOTTOM วางหน้าต่างที่ด้านล่างของใบ Z ถ้าพารามิเตอร์hWndระบุหน้าต่างจอม สูญเสียสถานะอยู่ด้านบนสุดของหน้าต่าง และจะอยู่ที่ด้านล่างของหน้าต่างอื่น ๆ ทั้งหมด.
HWND_NOTOPMOST วางหน้าต่าง windows ทั้งหมดไม่ใช่จอม (นั่นคือ เบื้องหลังทั้งหมดจอม windows) ธงชาตินี้ไม่มีผลใด ๆ ถ้าหน้าต่างแล้ว หน้าต่างไม่ใช่จอม.
HWND_TOP วางหน้าต่างที่ด้านบนของใบ Z.
HWND_TOPMOST วางหน้าต่าง windows ทั้งหมดไม่ใช่จอม หน้าต่างรักษาตำแหน่งจอมแม้ว่ามันจะถูกเรียกใช้.

ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีใช้พารามิเตอร์นี้ ส่วนข้อสังเกตต่อไป.

X
ระบุตำแหน่งใหม่ของทางด้านซ้ายของหน้าต่าง ในพิกัดของไคลเอ็นต์.
Y
ระบุตำแหน่งใหม่ของด้านบนของหน้าต่าง ในพิกัดของไคลเอ็นต์.
cx
ระบุความกว้างของหน้าต่าง ใหม่เป็นพิกเซล.
cy
ระบุความสูงของหน้าต่าง ใหม่เป็นพิกเซล.
uFlags
ระบุหน้าต่างปรับขนาด และวางตำแหน่งของธง พารามิเตอร์นี้จะเป็นการรวมกันของค่าต่อไปนี้:
ค่า ความหมาย
SWP_ASYNCWINDOWPOS ถ้าเรียกเธรดไม่เป็นเจ้าของหน้าต่าง ระบบบทความการร้องขอการเธรดที่เป็นเจ้าของหน้าต่าง การป้องกันไม่ให้เธรดการโทรจากบล็อกการดำเนินการในขณะที่หัวข้ออื่น ๆ การประมวลผลการร้องขอ.
SWP_DEFERERASE ป้องกันไม่ให้สร้างความ WM_SYNCPAINT.
SWP_DRAWFRAME วาดเฟรม (ที่กำหนดไว้ในคำอธิบายของคลาสของหน้าต่าง) รอบหน้าต่าง.
SWP_FRAMECHANGED ส่งข้อความ WM_NCCALCSIZE ไปยังหน้าต่าง แม้ว่าจะไม่มีการเปลี่ยนแปลงขนาดของหน้าต่าง ถ้าไม่ระบุค่าสถานะนี้ WM_NCCALCSIZE จะส่งเฉพาะเมื่อมีการเปลี่ยนแปลงขนาดของหน้าต่าง.
SWP_HIDEWINDOW ซ่อนหน้าต่าง.
SWP_NOACTIVATE เปิดใช้งานหน้าต่าง หากไม่ตั้งค่าสถานะนี้ หน้าต่างเปิดใช้งาน และย้ายไปยังด้านบนของทั้งสองอยู่ด้านบนสุด หรือ จอมไม่ใช่กลุ่ม (ขึ้นอยู่กับการตั้งค่าของพารามิเตอร์hWndInsertAfter ).
SWP_NOCOPYBITS ละเว้นเนื้อหาทั้งหมดของพื้นที่ที่ไคลเอ็นต์ ถ้าไม่ระบุค่าสถานะนี้ เนื้อหาถูกต้องของไคลเอ็นต์พื้นที่จะถูกบันทึก และคัดลอกกลับเข้าไปในพื้นที่ไคลเอ็นต์หลังจากหน้าต่างมีขนาด หรือ repositioned.
SWP_NOMOVE รักษาการตำแหน่งปัจจุบัน (ละเว้นพารามิเตอร์XและY ).
SWP_NOOWNERZORDER ไม่มีเปลี่ยนตำแหน่งของหน้าต่างเจ้าของตามลำดับ Z.
SWP_NOREDRAW ออกตั๋วใหม่การเปลี่ยนแปลง หากถูกตั้งค่าสถานะนี้ ไม่มี repainting ใด ๆ เกิดขึ้น นี้ใช้กับพื้นที่ไคลเอ็นต์ nonclient พื้นที่ (รวมถึงแถบเลื่อนและแถบชื่อเรื่อง), และส่วนใดส่วนหนึ่งของหน้าต่างหลักเปิดเผยเป็นผลของหน้าต่างที่มีการเคลื่อนย้าย เมื่อถูกตั้งค่าสถานะนี้ แอพลิเคชันต้องชัดเจนโมฆะ หรือออกตั๋วใหม่ส่วนใด ๆ ของหน้าต่างและหน้าต่างหลักที่จำเป็นต้อง redrawing.
SWP_NOREPOSITION เหมือนกับค่าสถานะ SWP_NOOWNERZORDER.
SWP_NOSENDCHANGING ป้องกันไม่ให้หน้าต่างรับข้อความ WM_WINDOWPOSCHANGING.
SWP_NOSIZE ขนาดปัจจุบัน (ละเว้นพารามิเตอร์cxและcy ) รักษาการ.
SWP_NOZORDER รักษาการ Z ใบสั่งปัจจุบัน (ละเว้นพารามิเตอร์hWndInsertAfter ).
SWP_SHOWWINDOW แสดงหน้าต่าง.

ส่งกลับค่า

ถ้าฟังก์ชันสำเร็จ ค่าส่งกลับจะไม่ใช่ศูนย์.

ถ้าฟังก์ชันล้มเหลว ส่งคืนค่าเป็นศูนย์ การขอเพิ่มเติมข้อมูลข้อผิดพลาด โทร GetLastError.

หมายเหตุ

หากถูกตั้งค่าสถานะ SWP_SHOWWINDOW หรือ SWP_HIDEWINDOW หน้าต่างไม่สามารถย้าย หรือขนาด.

ถ้าคุณมีการเปลี่ยนแปลงข้อมูลหน้าต่างโดยใช้SetWindowLongคุณต้องเรียกSetWindowPosต้องมีการเปลี่ยนแปลงมีผล ใช้การรวมต่อไปนี้สำหรับuFlags: SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED.

หน้าต่างสามารถทำหน้าต่างจอม โดยการตั้งค่าพารามิเตอร์hWndInsertAfter HWND_TOPMOST และการรับประกันที่ไม่ได้ตั้งค่าสถานะ SWP_NOZORDER หรือ โดยการตั้งค่าตำแหน่งของหน้าต่างในลำดับ Z ให้อยู่ข้างบน windows จอมใด ๆ ที่มีอยู่ เมื่อหน้าต่างไม่ใช่จอมทำจอม ของ windows เป็นยังมีจอม เจ้าของ อย่างไรก็ตาม จะไม่เปลี่ยนแปลง.

ถ้ามีระบุค่าสถานะทั้ง SWP_NOACTIVATE และ SWP_NOZORDER (นั่นคือ เมื่อโปรแกรมประยุกต์ที่ร้องขอว่า หน้าต่างได้พร้อมกันได้เปิดการใช้งาน และเปลี่ยนแปลงตำแหน่งของมันในลำดับ Z), ค่าที่ระบุในhWndInsertAfterจะใช้เฉพาะในสถานการณ์ต่อไปนี้:

โปรแกรมประยุกต์ไม่สามารถใช้งานหน้าต่างไม่ได้ใช้งาน โดยไม่มียัง นำไปด้านบนของใบ Z โปรแกรมประยุกต์ที่สามารถเปลี่ยนแปลงตำแหน่งของหน้าต่างเปิดใช้งานแล้วในลำดับ Z โดยไม่มีข้อจำกัด หรือจะสามารถเปิดใช้งานหน้าต่างแล้ว ย้ายไปด้านบนของหน้าต่างอยู่ด้านบนสุด หรือไม่ใช่จอม.

ถ้าหน้าต่างอยู่ด้านบนสุดคือ repositioned ไปด้านล่าง (HWND_BOTTOM) ของลำดับ Z หรือ หลังหน้าต่างใด ๆ ที่ไม่ใช่จอม ได้ไม่สูง เมื่อทำไม่ใช่จอมหน้าต่างจอม เจ้าของและของ windows เป็นยังมีจอมไม่ใช่ windows.

หน้าต่างจอมไม่สามารถเป็นเจ้าของหน้าต่างจอม แต่ตรงข้ามกันไม่สามารถเกิดขึ้น ใด ๆ หน้าต่าง (ตัวอย่างเช่น กล่องโต้ตอบ) เป็นเจ้าจอมหน้าต่างเป็นตัวทำให้หน้าต่างจอม เพื่อให้แน่ใจว่า ทั้งหมดเป็นเจ้าของ windows อยู่เหนือเจ้าของตนเอง.

ถ้าโปรแกรมประยุกต์ไม่ได้อยู่ในเบื้องหน้า และควรอยู่ในทำงานเบื้องหน้า จะต้องเรียกใช้ฟังก์ชันSetForegroundWindow.

Windows CE: ถ้านี่คือหน้าต่างระดับบนสุดสามารถมองเห็นได้ และไม่มีระบุค่าสถานะ SWP_NOACTIVATE ฟังก์ชันนี้จะเปิดใช้งานหน้าต่าง ถ้านี่คือหน้าต่างที่ใช้งานอยู่ในขณะนี้ และมีระบุค่าสถานะ SWP_NOACTIVATE หรือค่าสถานะ SWP_HIDEWINDOW การเปิดใช้งานถูกส่งผ่านไปบนหน้าต่างระดับบนสุดสามารถมองเห็นได้อีก.

เมื่อคุณตั้งค่าสถานะ SWP_FRAMECHANGED ในพารามิเตอร์nFlagsเป็นฟังก์ชันนี้ Windows CE redraws ไคลเอ็นต์ไม่ใช่พื้นที่ทั้งหมดของหน้าต่าง ซึ่งอาจมีการเปลี่ยนแปลงขนาดของพื้นที่ไคลเอ็นต์ นี้เป็นวิธีเดียวที่จะได้รับพื้นที่ไม่ได้อยู่ในไคลเอ็นต์จะคำนวณอีกครั้ง และโดยทั่วไปใช้หลังจากคุณได้เปลี่ยนแปลงลักษณะหน้าต่างได้ โดยการเรียกSetWindowLong.

SetWindowPosเสมอจะทำให้ข้อความ WM_WINDOWPOSCHANGED ให้ส่งไปหน้าต่างนั้น ค่าสถานะการส่งผ่านข้อความนี้ตรงเหมือนกันเป็นที่ส่งผ่านไปยังฟังก์ชัน ไม่มีข้อความอื่น ๆ จะถูกส่ง โดยฟังก์ชันนี้.

Windows CE 1.0 ไม่สนับสนุนค่าคง HWND_TOPMOST และ HWND_NOTOPMOST ในพารามิเตอร์hwndInsertAfter.

Windows CE 1.0 ไม่สนับสนุนค่าสถานะ SWP_DRAWFRAME หรือ SWP_NOCOPYBITS ใน paramete fuFlags.

QuickInfo

nbsp Windows &NT:ต้องการเวอร์ชัน 3.1 หรือรุ่นที่ใหม่กว่า
Windows:ต้องใช้ Windows 95 หรือรุ่นที่ใหม่กว่า
Windows CE:ต้องการเวอร์ชัน 1.0 หรือรุ่นใหม่กว่า
หัวข้อ:ประกาศใน winuser.h
ไลบรารีที่นำเข้า:ใช้ user32.lib.

ดูเพิ่มเติม

ภาพรวมของ Windowsหน้าต่างฟังก์ชัน MoveWindow, SetActiveWindow, SetForegroundWindow

Index