ฉันมีแอปพลิเคชัน QML (ทดสอบด้วย QWidgets ปัญหาเดียวกัน) และเพื่อให้ไม่มีขอบเขต (แต่ยังคงรองรับคุณสมบัติ WM ดั้งเดิมเช่น aero snap ฯลฯ) ฉันติดตาม สิ่งนี้ โดยใช้ QAbstractNativeEventFilter และตอบสนองต่อสัญญาณ WM_NCCALSIZE ด้วยศูนย์:
switch(msg->message) {
case WM_NCCALCSIZE:
*r = 0;
return 1;
...
}
ฉันยังตั้งค่าสถานะหน้าต่างบางตัวที่ไม่อยู่ใน Qt Namespace ด้วย
SetWindowLong(hwnd, GWL_STYLE, WS_OVERLAPPEDWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_BORDER | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_THICKFRAME);
วิธีนี้ใช้ได้ดีจนกว่าฉันจะย้ายหรือปรับขนาดหน้าต่างซึ่งทำให้ Qt แสดงผลซ้ำ และพื้นที่ที่ไม่ได้ทาสี ความกว้าง ความกว้างของชื่อและเส้นขอบปรากฏขึ้น:
ก่อนที่จะย้าย/ปรับขนาด
หลังจากย้าย/ปรับขนาด
ฉันยังพบวิธีแก้ไขปัญหานี้ด้วยการเพิ่มการตั้งค่าสถานะ FramelessWindowHint ใน Qt:
window->setFlags(Qt::FramelessWindowHint | Qt::WindowSystemMenuHint | Qt::Dialog);
แต่ตอนนี้ระยะขอบนี้เกิดขึ้นอีกครั้งเมื่อสถานะของหน้าต่างเปลี่ยนแปลง (ขยายใหญ่สุด ย่อเล็กสุด ...) ด้วยการบล็อกเหตุการณ์ WM_SIZE เช่น เมื่อ SIZE_MAXIMIZED เป็นพารามิเตอร์ ระยะขอบจะไม่ปรากฏ แต่ฉันก็ไม่สามารถขยายหน้าต่างให้ใหญ่สุดจาก Qt ได้ ซึ่งหมายความว่าเป็นปัญหาด้าน Qt
ฉันยังสังเกตด้วยการตรวจสอบรูปแบบหน้าต่างด้วย winspector ว่าหลังจากที่ฉันขยายใหญ่สุดแล้ว คุณสมบัติอะตอมใหม่จะปรากฏขึ้น:
คุณช่วยฉันแก้ไขปัญหานี้ได้ไหม