เมื่อเขียนโปรแกรมภายใต้ Windows เรามักจะพบว่ามีฟังก์ชั่นมากมายที่ระบบ Windows ได้นำไปใช้แล้ว หากสามารถเรียกได้โดยตรงจะช่วยประหยัดการเขียนโปรแกรมได้มากและปรับปรุงประสิทธิภาพการทำงานของโปรแกรม ในหลายกรณี เราสามารถใช้ "Ctrl + ความสามารถในการเรียกใช้ฟังก์ชันเหล่านี้ของระบบในโปรแกรมโดยไม่จำเป็นต้องกังวลเกี่ยวกับวิธีดำเนินการเหล่านี้ หลังจากการสำรวจอย่างต่อเนื่อง ในที่สุดฉันก็พบว่า SendMessage และ PostMessage สามารถทำหน้าที่สำคัญนี้ได้ ดังนั้นฉันจึงแทบรอไม่ไหวที่จะแนะนำสิ่งเหล่านี้ให้กับเพื่อน ๆ ทุกคน
ฟังก์ชัน API ทั้งสองนี้สามารถพบได้ง่ายโดยใช้ "เบราว์เซอร์ API" ของ VB5:
ประกาศ FunctionSendMessageLib "user32" นามแฝง "SendMessageA" _ (ByValhwndAsLong, ByValwMsgAsLong, ByValwParamAsLong, _lParamAsAny) AsLong
ประกาศ FunctionPostMessageLib "user32" นามแฝง "PostMessageA" _ (ByValhwndAsLong, ByValwMsgAsLong, ByValwParamAsLong, _ByVallParamAsLong) AsLong
ฟังก์ชันของทั้งสองฟังก์ชันนี้เกือบจะเหมือนกัน ยกเว้นว่า SendMessage จะเรียกใช้ฟังก์ชัน Windows โดยตรงเพื่อส่งข้อความ จะได้รับการจัดการในระหว่างการจัดการเหตุการณ์ปกติในอนาคต ข้อมูลต่อไปนี้ใช้ SendMessage เป็นตัวอย่างเท่านั้น
แม้ว่าฟังก์ชันจะมีพารามิเตอร์สี่ตัว แต่พารามิเตอร์ที่สำคัญคือสองตัวแรก: hwnd และ wMsg Hwnd เป็นตัวจัดการ แต่ละฟอร์มและตัวควบคุมในแอปพลิเคชัน Microsoft Windows มีตัวจัดการสามารถระบุวัตถุการทำงานของฟังก์ชัน wMsg เป็นเลขฐานสิบหกที่แสดงถึงข้อความเฉพาะที่จะถูกส่งโดยฟังก์ชัน
ต่อไปนี้ใช้ตัวอย่างเฉพาะเพื่อแสดงวิธีใช้ SendMessage เพื่อใช้ฟังก์ชัน "ตัด", "คัดลอก", "วาง", "เลิกทำ" และ "ลบ":
วางกล่องข้อความ Text1 และปุ่มห้าปุ่มในแบบฟอร์มเพื่อทำหน้าที่ห้าฟังก์ชันข้างต้นตามลำดับ และเขียนโปรแกรมต่อไปนี้
ตัวเลือกที่ชัดเจน
PRivateDeclareFunctionSendMessageLib "user32" นามแฝง "SendMessageA" _ (ByValhwndAsLong, ByValwMsgAsLong, ByValwParamAsLong, lParamAsAny) AsLong
ConstWM_CUT=&H300
ConstWM_COPY=&H301
ConstWM_PAST=&H302
ConstWM_CLEAR=&H303
ConstWM_UNDO=&H304
DimfbAsLong
PrivateSubcmdClear_Click()
fb=PostMessage(Text1.hwnd,WM_CLEAR,0,0)
สิ้นสุดย่อย
PrivateSubcmdCopy_Click()
fb=ส่งข้อความ(Text1.hwnd,WM_COPY,0,0)
สิ้นสุดย่อย
PrivateSubcmdCut_Click()
fb=ส่งข้อความ(Text1.hwnd,WM_CUT,0,0)
สิ้นสุดย่อย
PrivateSubcmdPast_Click()
fb=ส่งข้อความ(Text1.hwnd,WM_PAST,0,0)
สิ้นสุดย่อย
PrivateSubcmdUndo_Click()
fb=ส่งข้อความ(Text1.hwnd,WM_UNDO,0,0)
สิ้นสุดย่อย
นอกจากกล่องข้อความแล้ว SendMessage ยังสามารถทำงานบน RitchTextBox และ ComboBox ฯลฯ ตราบใดที่พารามิเตอร์ hwnd มีการเปลี่ยนแปลงตามนั้น -