ใน VB แบบฟอร์ม MDI (MultipleDocumentInterface โปรแกรมหลายหน้าต่าง) ถูกกำหนดดังนี้: "แบบฟอร์ม MDI ทำหน้าที่เป็นหน้าต่างพื้นหลังของโปรแกรมและมีแบบฟอร์มที่มีแอตทริบิวต์ MDIChild ตั้งค่าเป็น True" ในโปรแกรม VB สามารถมีฟอร์มพาเรนต์ MDI ได้มากที่สุดหนึ่งฟอร์ม และอาจมีฟอร์มลูก MDI ได้หลายฟอร์ม วิธีสร้างฟอร์มพาเรนต์ MDI คือเลือก "NewMDIForm" ในเมนูไฟล์ของ VB
เมื่อโปรแกรม MDI กำลังทำงานอยู่ หากหน้าต่างลูกมีเมนู จากนั้นเมื่อหน้าต่างลูกถูกเปิดใช้งาน เมนูของหน้าต่างลูกจะเข้ามาแทนที่เมนูของหน้าต่างหลักโดยอัตโนมัติ เมื่อหน้าต่างลูกถูกย่อเล็กสุด หน้าต่างลูกจะ ปรากฏในหน้าต่างหลัก MDI
การเกิดขึ้นของอินเทอร์เฟซแบบกราฟิกสากลของ Windows ทำให้ผู้ใช้คอมพิวเตอร์สามารถใช้ซอฟต์แวร์ Windows ต่างๆ ได้อย่างง่ายดายโดยไม่ต้องเรียนรู้เป็นพิเศษ ไม่เพียงเท่านั้น ยังเป็นมาตรฐานที่นักออกแบบโปรแกรมต้องปฏิบัติตามเมื่อออกแบบอินเทอร์เฟซของโปรแกรม Windows อย่างมาก นักออกแบบโปรแกรมช่วยให้พวกเขามุ่งเน้นไปที่การแก้ปัญหาและการนำปัญหาไปใช้
การเกิดขึ้นของ Visual Basic ทำให้การออกแบบอินเทอร์เฟซโปรแกรม Windows ง่ายขึ้น จำเป็นต้องใช้โค้ดเพียงเล็กน้อยเท่านั้นเพื่อใช้อินเทอร์เฟซของแอปพลิเคชัน Windows มาตรฐาน อย่างไรก็ตาม หากคุณไม่เข้าใจหลักการออกแบบอินเทอร์เฟซโปรแกรม Windows หรือไม่คุ้นเคยกับทักษะการเขียนโปรแกรมอินเทอร์เฟซภายใต้ VB จะเป็นการยากที่จะออกแบบและใช้อินเทอร์เฟซที่เป็นไปตามมาตรฐานทั่วไปและมีเอกลักษณ์เฉพาะตัว หลักการออกแบบอินเทอร์เฟซ การออกแบบอินเทอร์เฟซมีหลักการทั่วไป สิ่งสำคัญที่สุดคือ:
อินเทอร์เฟซจะต้องสอดคล้องกัน หลักการของความสม่ำเสมอเป็นสิ่งที่ง่ายที่สุดที่จะละเมิดในการออกแบบอินเทอร์เฟซ และยังเป็นวิธีที่ง่ายที่สุดในการแก้ไขและหลีกเลี่ยง ตัวอย่างเช่น ต้องใช้คำศัพท์เดียวกันในเมนูและวิธีใช้ออนไลน์ กล่องโต้ตอบต้องมีสไตล์เหมือนกัน
ควรมีทางลัดสำหรับการดำเนินงานทั่วไป มีการใช้การดำเนินการทั่วไปบ่อยครั้ง และความยาวของลำดับการดำเนินการควรลดลง ตัวอย่างเช่น ตั้งค่าปุ่มลัดสำหรับการทำงานของไฟล์ทั่วไป เช่น การเปิด บันทึก และบันทึกเป็น การจัดหาทางลัดสำหรับการดำเนินงานทั่วไปจะไม่เพียงปรับปรุงประสิทธิภาพการทำงานของผู้ใช้เท่านั้น แต่ยังทำให้อินเทอร์เฟซเรียบง่ายและมีประสิทธิภาพในการใช้งานอีกด้วย
ให้การจัดการข้อผิดพลาดที่ง่ายดาย ระบบต้องมีความสามารถในการจัดการข้อผิดพลาด ระบบควรจะสามารถตรวจจับข้อผิดพลาดได้เมื่อเกิดขึ้น และให้ความสามารถในการจัดการข้อผิดพลาดที่ง่ายและเข้าใจได้ สถานะของระบบไม่เปลี่ยนแปลงหลังจากเกิดข้อผิดพลาด หรือระบบจำเป็นต้องให้คำแนะนำในการกู้คืนข้อผิดพลาด
ให้ข้อเสนอแนะที่ให้ข้อมูล ควรมีข้อมูลตอบรับการดำเนินงานที่สำคัญของผู้ปฏิบัติงาน ไม่มีข้อกำหนดสำหรับข้อเสนอแนะเกี่ยวกับการดำเนินงานที่ใช้โดยทั่วไปและการดำเนินงานที่เรียบง่าย แต่สำหรับการดำเนินงานที่ไม่บ่อยและการดำเนินงานที่สำคัญ ระบบควรให้ข้อเสนอแนะข้อมูล
การทำงานสามารถย้อนกลับได้ การดำเนินการควรสามารถย้อนกลับได้ สิ่งนี้มีประโยชน์สำหรับผู้ปฏิบัติงานที่ไม่มีความรู้เฉพาะทาง การดำเนินการแบบย้อนกลับอาจเป็นการดำเนินการเดี่ยวหรือลำดับการดำเนินการที่ค่อนข้างอิสระ
ความช่วยเหลือออนไลน์ที่ออกแบบมาอย่างดี แม้ว่าความช่วยเหลือออนไลน์จะไม่จำเป็นสำหรับผู้ใช้ที่มีทักษะ แต่ก็มีบทบาทสำคัญมากสำหรับผู้ใช้ที่ไม่มีทักษะส่วนใหญ่
หลักการออกแบบเมนูและการเขียนโปรแกรม
การออกแบบเมนูมีหลักการทั่วไปดังต่อไปนี้:
จัดระเบียบเมนูตามฟังก์ชั่นของระบบ
เลือกแผนผังเมนูที่กว้างและตื้น แทนที่จะเป็นแผนผังเมนูที่แคบและลึก
จัดกลุ่มตัวเลือกเมนูตามความหมาย และจัดเรียงตามกฎบางอย่าง ชื่อตัวเลือกเมนูควรสั้น ชัดเจน และควรเริ่มต้นด้วยคำหลัก
ต้องตั้งค่าปุ่มลัดสำหรับตัวเลือกที่ใช้บ่อย เมื่อรวมหลักการข้างต้นเข้าด้วยกัน การเขียนโปรแกรมเมนูจึงมีเทคโนโลยีและเทคนิคดังต่อไปนี้:
การจัดกลุ่มตัวเลือกเมนู
ใน VB การจัดกลุ่มตัวเลือกเมนูทำได้โดยการแบ่งแถบเมนูด้วยเส้นแนวนอน เพิ่มรายการเมนูที่มีแอตทริบิวต์คำอธิบายภาพเป็น "" ที่ตำแหน่งใดตำแหน่งหนึ่งในเมนู และรายการนั้นจะปรากฏเป็นเส้นแนวนอนบนเมนู ในหลายกรณี เมนูฟังก์ชันเดียวกันสามารถแบ่งออกเป็นหลายกลุ่มตามฟังก์ชันของตัวเลือกเมนู ในกรณีนี้ สามารถใช้เส้นแบ่งแนวนอนเพื่อจัดกลุ่มรายการเมนูได้
การตั้งค่าปุ่มลัดสำหรับตัวเลือกทั่วไป
เปิดหน้าต่างการออกแบบเมนู (MenuDesignWindow) ควรมีรายการคีย์ลัด (ทางลัด) ที่เกี่ยวข้องสำหรับแต่ละตัวเลือกเมนู ควรสังเกตว่าไม่สามารถกำหนดปุ่มลัดสำหรับเมนูที่มีเมนูย่อยหรือเมนูระดับบนสุดได้ด้วยวิธีนี้ ตามหลักการออกแบบอินเทอร์เฟซของ Windows ปุ่มลัดสำหรับเมนูด้านบนจะอยู่ในรูปแบบของปุ่มตัวอักษร Alt วิธีการนำไปใช้จะมีการอธิบายในภายหลัง
สำหรับรายการเมนูฟังก์ชั่นที่ใช้กันทั่วไปบางรายการ จะมีปุ่มลัดแบบธรรมดา ตัวอย่างเช่น ใช้ CTRL O เพื่อเปิดไฟล์, CRTL S เพื่อบันทึกไฟล์, CTRL P เพื่อพิมพ์ และอื่นๆ
หลังจากกำหนดปุ่มทางลัดสำหรับตัวเลือกเมนูแล้ว การแสดงข้อความของปุ่มทางลัดจะปรากฏขึ้นด้านหลังตัวเลือกบนเมนู
เปิดใช้งานและปิดใช้งานตัวเลือกเมนูที่มองเห็นและซ่อน เพื่อแสดงฟังก์ชันพิเศษบางอย่างของตัวเลือกเมนู อาจใช้คุณลักษณะเปิดและปิดใช้งาน มองเห็นและซ่อนของตัวเลือกเมนูได้ เมื่อไม่สามารถรับรู้ฟังก์ชันที่แสดงโดยตัวเลือกได้ด้วยเหตุผลบางประการ ควรห้ามไม่ให้เลือกตัวเลือกดังกล่าว ตัวเลือกเมนูถูกเปิดใช้งานและปิดใช้งานโดยการเปลี่ยนคุณลักษณะ Enabled ของตัวเลือก ตัวอย่างเช่น สมมติว่าตัวเลือกเมนูชื่อ nmuName การปิดใช้งานตัวเลือกนี้สามารถทำได้ดังนี้:
mnuName.Enabled=เท็จ
ในทำนองเดียวกัน คุณสามารถซ่อนตัวเลือกได้โดยใช้
mnuName.Visible=เท็จ
เพื่อให้บรรลุเป้าหมายนี้ ให้ใช้ตัวเลือกที่ซ่อนอยู่อีกครั้ง
mnuName.Visible=จริง
ทำให้สำเร็จ.
การซ่อนและการคืนค่าการเปิดเผยรายการเมนูมักใช้ในการใช้งานเมนูไดนามิก
การโหลดรายการเมนูแบบไดนามิก
การโหลดรายการเมนูแบบไดนามิกหมายความว่าจำนวนรายการเมนูไม่คงที่และสามารถโหลดแบบไดนามิกได้เมื่อจำเป็น ตัวอย่างที่ง่ายที่สุดคือรายการไฟล์ที่เพิ่งเปิดในเมนูไฟล์ ก่อนที่จะเปิดไฟล์เป็นครั้งแรก รายการจะว่างเปล่าและไม่ปรากฏในเมนูไฟล์ หลังจากเปิดไฟล์ รายการจะไม่ว่างเปล่าอีกต่อไป และรายการเมนูที่แสดงถึงไฟล์ที่เปิดจะปรากฏในเมนูไฟล์
ในตัวอย่างข้างต้น คุณลักษณะตัวห้อย (ดัชนี) คุณลักษณะชื่อ (คำบรรยาย) คุณลักษณะที่มองเห็นได้ (มองเห็นได้) ของรายการเมนู และวิธีการโหลด (LoadMethod) ของรายการเมนูถูกนำมาใช้อย่างครอบคลุม
กระบวนการดำเนินการเฉพาะมีดังนี้:
เพิ่มรายการเมนูลงในเมนูไฟล์ด้วยชื่อที่ต้องการ และสมมติว่าแอตทริบิวต์ Name ของรายการเมนูคือ open_files_list;
เปลี่ยนแอ็ตทริบิวต์ที่มองเห็นได้ของรายการเมนู open_files_list เพื่อให้ open_files_list.Visible=False
เปลี่ยนแอตทริบิวต์ตัวห้อยของรายการเมนู open_files_list เพื่อให้
open_files_files_list.Index=0
ควบคุมการโหลดแบบไดนามิกของรายการเมนู open_files_list ในโปรแกรม
สมมติว่าคุณต้องการแสดงชื่อไฟล์ของไฟล์ที่สองที่ถูกเปิด และชื่อไฟล์ถูกจัดเก็บไว้ในอาร์เรย์ชื่อไฟล์ open_file_name รหัสต่อไปนี้ใช้ฟังก์ชันนี้:
โหลดopened_files_list(1)
open_files_lise(1).Caption="&2" open_file_name(1)
open_files_list(1).Visible=True
ควรสังเกตว่าไม่สามารถใช้วิธี Load สำหรับรายการเมนูที่มีตัวห้อยเป็น 0 เนื่องจากรายการเมนูถูกโหลดลงในหน่วยความจำเมื่อโปรแกรมถูกดำเนินการ นอกจากนี้ อักขระ "&" ในอักขระแอตทริบิวต์ชื่อรายการเมนูยังมีความหมายพิเศษ และฟังก์ชันของมันคือการแสดงสตริงแอตทริบิวต์ ในเวลาเดียวกัน ตัว "&" จะไม่แสดง แต่อักขระที่ตามหลัง "&" ทันทีจะแสดงด้วยการขีดเส้นใต้ และอักขระจะกลายเป็นปุ่มลัด
หากไม่ต้องการรายการเมนูที่มีดัชนีไม่เป็น 0 อีกต่อไป เพื่อลดการใช้ทรัพยากรหน่วยความจำ คุณสามารถใช้วิธี Unload เพื่อยกเลิกการโหลดออกจากหน่วยความจำ ในทำนองเดียวกัน คุณจะไม่สามารถใช้ Unload เพื่อยกเลิกการโหลดรายการเมนูที่มีดัชนีได้ คือ 0
การใช้งานเมนูป๊อปอัป (PopupMenuMethod)
เมนูที่ออกแบบในหน้าต่างออกแบบเมนู (MenuDesignWindow) ใน VB เป็นเมนูแบบเลื่อนลง เมนูแบบเลื่อนลงเป็นเมนูที่ผู้ใช้สามารถดึงออกมาได้หลังจากทำการเลือกบนแถบเมนูด้านบนเมื่อใดก็ได้ ในขณะที่เมนูป็อปอัพเป็นเมนูที่ปรากฏขึ้นหลังจากคลิกปุ่มเมาส์ในบางพื้นที่ของ อินเทอร์เฟซของโปรแกรม ในบางกรณี เมนูป๊อปอัปสามารถทำให้ฟังก์ชันของระบบกระชับและมีประสิทธิภาพมากขึ้น ทำให้ใช้งานได้ง่ายขึ้น
เมนูป๊อปอัปของโปรแกรม Widnows โดยทั่วไปจะปรากฏขึ้นเมื่อผู้ใช้คลิกปุ่มเมาส์บนเดสก์ท็อปของโปรแกรม เมนูป๊อปอัปส่วนใหญ่จะใช้เพื่อใช้ฟังก์ชันเพิ่มเติมหรือที่ได้รับการปรับปรุงของระบบ เนื้อหาของเมนูป๊อปอัปสามารถเปลี่ยนแปลงได้ขึ้นอยู่กับตำแหน่งที่คลิกปุ่มเมาส์ เนื่องจากเมนูป๊อปอัปจะบังบางส่วนของหน้าจอ ข้อความในเมนูจึงควรย่อให้สั้นลงให้มากที่สุด
ใน VB การใช้เมนูป๊อปอัปต้องใช้เทคโนโลยีการออกแบบเมนูแบบเลื่อนลงและวิธีการ PopupMenu วิธีการเฉพาะคือ:
ออกแบบเมนูป๊อปอัปของแบบฟอร์มที่เกี่ยวข้องในหน้าต่างการออกแบบเมนู (MenuDesignWindow) ควรสังเกตว่าเมนูที่จะป็อปอัพต้องมีเมนูย่อยอย่างน้อยหนึ่งเมนู ดังนั้น เมนูนี้จึงไม่สามารถมีปุ่มลัดได้ และแอตทริบิวต์ Checked ต้องเป็นเท็จ จากนั้นเปลี่ยนคุณสมบัติการมองเห็นของเมนูป๊อปอัปเป็นเท็จ
เพิ่มรหัสต่อไปนี้ลงใน Form_Click ของแบบฟอร์มด้วยเมนูป๊อปอัปที่ออกแบบมา (สมมติว่าคุณสมบัติชื่อของเมนูป๊อปอัปคือ mnuExample):
SubForm_Click()
ป๊อปอัปเมนูตัวอย่าง
สิ้นสุดย่อย
หากคุณต้องการให้เมนูสามารถใช้งานได้โดยการกดปุ่มซ้ายหรือขวาของเมาส์เท่านั้น คุณต้องเพิ่มโค้ดต่อไปนี้ใน Form_MouseDown:
SubForm_MouseDown (ButtonAsInteger, ShiftAsInteger, xAsSingle, yAsSingle)
IfButton=2thenButton=2 หมายถึงปุ่มเมาส์ขวา
ป๊อปอัปเมนูตัวอย่าง
สิ้นสุดถ้า
ไวยากรณ์ที่สมบูรณ์ของ PopupMenu คือ:
[แบบฟอร์ม]ป๊อปอัปเมนูชื่อ[ธง[,x[,y]]]
การเปลี่ยนค่าของแฟล็กสามารถควบคุมลักษณะที่ปรากฏของเมนูป๊อปอัพได้ ธงมีค่าสองชุด ค่าชุดแรกใช้เพื่อควบคุมโหมดการแสดงผลของเมนู ได้แก่ POPUPMENU_LEFTALIGNPOPUPMENU_CENTERALIGN และ POPUPMENU_RIGHTALIGN ซึ่งตามลำดับแสดงถึงโหมดการแสดงผล โดยมี x เป็นเส้นขอบด้านซ้าย x เป็นจุดกึ่งกลาง และ x เป็นเส้นขอบด้านขวา และการใช้ x เป็นขอบเขตด้านซ้ายเป็นวิธีการเริ่มต้น โดยจะใช้ค่าอีกชุดหนึ่งควบคุมวิธีการเลือกรายการเมนู ได้แก่ POPUPMENU_LEFTBUTTON และ POPUPMENU_RIGHTBUTTON ซึ่งตามลำดับจะระบุการเลือกคลิกซ้ายและการเลือกคลิกซ้าย/ขวา และ การเลือกคลิกซ้ายเป็นวิธีเริ่มต้น ค่าของแฟล็กได้มาจาก ORing ค่าสองชุดข้างต้น ตัวอย่างเช่น หากจำเป็นต้องจัดจอแสดงผลให้ชิดซ้ายและเลือกปุ่มซ้าย ก็ควรจะเป็น:
flags=POPUPMENU_LEFTALIGNORPOPUPMENU_LEFTBUTTON
x และ y ใช้เพื่อกำหนดตำแหน่งของป๊อปอัปเมนู ค่าเริ่มต้นคือตำแหน่งของจุดเมาส์
คุณสมบัติอื่นๆ ของรายการเมนู
ใช้ปุ่มตัวอักษร ALT เพื่อเปิดใช้งานเมนูระดับบนสุด หรือใช้ปุ่มตัวอักษรเพื่อเปิดใช้งานรายการเมนูหลังจากเปิดใช้งานเมนูแล้ว คุณต้องเรียนรู้การใช้ & & ใช้ในแอตทริบิวต์ชื่อ (คำบรรยายภาพ) ของรายการเมนู การใช้งานและฟังก์ชั่นเหมือนกับในโปรแกรม Windows ที่คอมไพล์เป็นภาษา C
บางครั้งคุณต้องการให้ช่องว่างระหว่างเมนูระดับบนสุดใหญ่ขึ้น หรือเมนูระดับบนสุดปรากฏที่ด้านขวาสุดของแถบเมนู ในกรณีนี้ คุณต้องใช้เมนูที่มีแอตทริบิวต์ชื่อช่องว่าง หากชื่อของเมนูประกอบด้วยช่องว่างหลายช่อง เมนูจะใช้พื้นที่ตามจำนวนช่องว่างบนแถบเมนู และเมนูด้านหลังจะถูกย้ายกลับตามลำดับหากคุณสมบัติที่มองเห็นได้ของเมนูนี้คือ เท็จ ก็เหมือนกับว่ามันไม่มีอยู่จริง
หลักการออกแบบและตัวอย่างหน้าต่าง
ด้านล่างนี้เป็นตัวอย่างของเทคโนโลยีหน้าต่างลอยน้ำ เพื่อดึงดูดความสนใจของผู้ใช้ หรือเพื่อให้แน่ใจว่าหน้าต่างอื่นๆ จะไม่ครอบคลุมหน้าต่างที่มีข้อมูลสำคัญ เทคโนโลยีหน้าต่างแบบลอยตัวจึงถูกนำมาใช้เพื่อสร้างหน้าต่าง "TopMost" วิธีการเฉพาะคือ:
(1) เพิ่มข้อความต่อไปนี้ลงในโปรแกรม VB:
ประกาศ FunctionSetWindowPosLib "ผู้ใช้" (Byvalh, Byvalhb, Byvalx, Byvaly, By
valcx, Byvalcy, Byvalf) AsInteger
GlobalConstSWP_NOMOVE=2
GlobalConstSWP_NOSIZE=1
GlobalConstHWND_TOPMOST=1
GlobalConstHWND_NOTOPMOST=2
GlobalConstFLAGS=SWP_NOMOVEOrSWP_NOSIZE
(2) สมมติว่าคุณต้องการตั้งค่าแบบฟอร์ม frmExample ให้เป็นหน้าต่างที่อยู่ด้านหน้าเสมอ เพียงตั้งค่าแบบฟอร์มใน Form_Load ของแบบฟอร์ม frmExample
เพิ่มรหัสต่อไปนี้ให้กับกระบวนการ:
ความล้มเหลว
ความสำเร็จ = SetWindowPos (frmExample.hWnd, HWND_TOPMOST, 0,0,0,0, ธง)
หากคุณต้องการยกเลิกคุณลักษณะที่อยู่ด้านบนเสมอ คุณสามารถรันโค้ดต่อไปนี้:
ความสำเร็จ = SetWindowPos (frmExample.hWnd, HWND_NOTOPMOST, 0,0,0,0, ธง)
ความสำเร็จไม่เท่ากับ 0 ซึ่งหมายความว่า SetWindowPos ดำเนินการได้สำเร็จ
ในโปรแกรม MDI หน้าต่างหนึ่งคือหน้าต่างหลักของหน้าต่างอื่นๆ ทั้งหมด และหน้าต่างลูกแต่ละหน้าต่างทำหน้าที่ที่ค่อนข้างเป็นอิสระ เหมือนกับการรวมกันของเครื่องมืออิสระหลายๆ ตัว ในเรื่องนี้ FileManager ของ MSWord และ Windows เป็นตัวอย่างที่ดีที่สุด -