เมื่อเร็ว ๆ นี้เมื่อพิจารณาถึงกรอบการทำงานโดยรวมของอินเทอร์เฟซระบบ MIS ฉันตัดสินใจใช้ MDI Child ในรูปแบบ MDI+ โมดูล แต่พื้นที่ทำงานของ MDI Form มักจะมีขอบหนาที่น่ารำคาญเสมอ
ฉันพบวิธีแก้ปัญหาสำหรับรุ่น C ++ จากอินเทอร์เน็ตเมื่อบ่ายวานนี้และฉันใช้เวลาในการแปลเป็น Delphi
เขียนรหัสต่อไปนี้ในแบบฟอร์ม MDI:
ส่วนต่อประสาน
tfmmain = คลาส (tform)
-
โพรซีเดอร์แบบฟอร์ม (ผู้ส่ง: tobject);
-
ส่วนตัว
-
โพรซีเดอร์ที่สร้างขึ้น fwndproc ();
ขั้นตอน clientwndproc (ข้อความ var: tmessage);
จบ;
การดำเนินการ
-
ขั้นตอน tfmmain.createdefwndproc;
วาจา
hwnd1: hwnd;
CCS: tclientCreatestruct;
เริ่ม
ccs.hwindowmenu: = 0;
CCS.IdFirstChild: = $ ff00;
hwnd1: = createWindowex (ws_ex_clientedge,
'mdiclient', '', ws_child หรือ ws_visible หรือ ws_group หรือ
ws_tabstop หรือ ws_clipchildren หรือ ws_hscroll หรือ ws_vscroll หรือ
ws_clipsiblings หรือ mdis_allchildstyles, 0, 0, clientWidth,
ClientHeight, Handle, 0, Hinstance, @CCS);
fclientinstance: = ตัวชี้ (getWindowLong (hwnd1, gwl_wndproc));
DestroyWindow (HWND1);
จบ;
โพรซีเดอร์ tfmmain.clientwndproc (ข้อความ var: tmessage);
// var
// mydc: hdc;
เริ่ม
if (message.msg = wm_erasebkgnd) แล้ว
เริ่ม
// โปรแกรมต้นทางที่จำลอง VCL ที่นี่เติมพื้นที่ไคลเอนต์ด้วยสีพื้นหลังของหน้าต่างหลัก
// คุณสามารถวาดกราฟิกในพื้นที่ไคลเอนต์
Fillrect (hdc (message.wparam), clientrect, brush.handle);
// mydc: = twmerasebkgnd (ข้อความ) .dc;
// bitblt (mydc, (clientWidth - imback.picture.width) div 2,
// (clientheight - imback.picture.height) Div 2,
// imback.picture.width, imback.picture.height,
// imback.picture.bitmap.canvas.handle, 0, 0, srccopy);
message.result: = 1;
จบ
อื่น
message.result: = callwindowproc (fclientinstance, clienthandle,
message.msg, message.wparam, message.lparam);
จบ;
ขั้นตอน tfmmain.formcreate (ผู้ส่ง: tobject);
เริ่ม
// ********* การลบ Mdichild หนาเส้นขอบ *********************
createFwndproc ();
setWindowLong (clienthandle, gwl_wndproc,
Longint (MakeObjectInstance (clientwndproc)));
setWindowLong (clienthandle, gwl_exstyle, getWindowlong (
clienthandle, gwl_exstyle) และ (ไม่ใช่ ws_ex_clientedge));
setWindowPos (clienthandle, 0,0,0,0,0, swp_framechanged
หรือ swp_noactivate หรือ swp_nomove หรือ swp_nosize หรือ swp_nozorder);
-
จบ;