CToolBarCtrl: การจัดการการแจ้งเตือนเอง

ตัวควบคุมทั่วไปในแถบเครื่องมือ Windows มีคุณลักษณะแบบกำหนดเองที่มีอยู่แล้ว รวมถึงระบบที่กำหนดเองกล่องโต้ตอบ ซึ่งอนุญาตให้ผู้ใช้สามารถแทรก ลบ หรือการจัดเรียงปุ่มแถบเครื่องมือ โปรแกรมประยุกต์ที่กำหนดว่า คุณสมบัติกำหนดเองจะพร้อมใช้งาน และตัวควบคุมขอบเขตซึ่งผู้ใช้สามารถกำหนดแถบเครื่องมือ?

คุณสามารถทำคุณลักษณะแบบกำหนดเองเหล่านี้พร้อมใช้งานสำหรับผู้ใช้ โดยการกำหนดแถบเครื่องมือลักษณะCCS_ADJUSTABLE คุณลักษณะกำหนดเองอนุญาตให้ผู้ใช้ลากปุ่มไปยังตำแหน่งใหม่ หรือเอาปุ่มออก โดยการลากออกจากแถบเครื่องมือ นอก ผู้ใช้สามารถคลิกสองครั้งแถบเครื่องมือเพื่อแสดงแถบเครื่องมือแบบกำหนดเองกล่องโต้ตอบ ซึ่งช่วยให้ผู้ใช้สามารถเพิ่ม ลบ และการจัดเรียงปุ่มแถบเครื่องมือ โปรแกรมประยุกต์ที่สามารถแสดงการตั้งค่ากล่องโต้ตอบ โดยใช้ฟังก์ชันสมาชิกกำหนดเอง?

ตัวควบคุมแถบเครื่องมือส่งข้อความแจ้งเตือนในหน้าต่างหลักในแต่ละขั้นตอนในกระบวนการกำหนดเอง ถ้าผู้ใช้กดแป้น SHIFT และเริ่มลากปุ่ม แถบเครื่องมือจัดการกับการดำเนินการลากโดยอัตโนมัติ แถบเครื่องมือส่งข้อความแจ้งเตือนTBN_QUERYDELETEไปหน้าต่างหลักการตรวจสอบว่า ปุ่มอาจถูกลบ การดำเนินการลากสิ้นสุดถ้าหน้าต่างหลักจะส่งกลับค่าเท็จ มิฉะนั้น แถบเครื่องมือครอบคลุมการป้อนข้อมูลของเมาส์ และรอให้ผู้ใช้ปล่อยปุ่มเมาส์?

เมื่อผู้ใช้รุ่นปุ่มเมาส์ ตัวควบคุมแถบเครื่องมือกำหนดตำแหน่งของเคอร์เซอร์ของเมาส์ ถ้าเคอร์เซอร์อยู่นอกแถบเครื่องมือ ปุ่มจะถูกลบ ถ้าเคอร์เซอร์อยู่บนปุ่มแถบเครื่องมืออื่น แถบเครื่องมือส่งข้อความแจ้งเตือนTBN_QUERYINSERTไปหน้าต่างหลักการตรวจสอบหากอาจจะแทรกปุ่มทางด้านซ้ายของปุ่มที่กำหนด ปุ่มจะถูกแทรกถ้าหน้าต่างหลักจะส่งกลับค่าTRUE มิฉะนั้น ไม่ แถบเครื่องมือส่งข้อความแจ้งเตือนTBN_TOOLBARCHANGEเพื่อส่งสัญญาณจุดสิ้นสุดของการดำเนินการลาก?

ถ้าผู้ใช้เริ่มต้นการดำเนินการลาก โดยแป้น SHIFT ค้างไว้ ตัวควบคุมแถบเครื่องมือส่งข้อความแจ้งเตือนTBN_BEGINDRAGไปยังเจ้าของหน้าต่าง โปรแกรมประยุกต์ที่ใช้รหัสที่ลากปุ่มของตนเองสามารถใช้ข้อความนี้เป็นสัญญาณเพื่อเริ่มต้นการดำเนินการลาก แถบเครื่องมือส่งข้อความแจ้งเตือนTBN_ENDDRAGเพื่อส่งสัญญาณจุดสิ้นสุดของการดำเนินการลาก?

ตัวควบคุมแถบเครื่องมือส่งข้อความแจ้งเตือนเมื่อผู้ใช้กำหนดเองแถบเครื่องมือ โดยใช้กล่องโต้ตอบกำหนดเองแถบเครื่องมือ แถบเครื่องมือส่งข้อความแจ้งเตือนTBN_BEGINADJUSTหลังจากผู้ใช้ดับเบิลคลิแถบเครื่องมือ แต่ก่อนกล่องโต้ตอบ สร้างกล่อง ถัดไป แถบเครื่องมือเริ่มต้นส่งชุดข้อมูลของข้อความแจ้งเตือนTBN_QUERYINSERTเพื่อตรวจสอบว่า แถบเครื่องมือทำให้ปุ่มถูกแทรก เมื่อหน้าต่างหลักจะส่งกลับค่าTRUEแถบเครื่องมือหยุดส่งข้อความแจ้งเตือนTBN_QUERYINSERT ถ้าหน้าต่างหลักไม่ส่งกลับค่าTRUEสำหรับปุ่มใด ๆ แถบเครื่องมือขัดกล่องโต้ตอบ?

ถัดไป ตัวควบคุมแถบเครื่องมือกำหนดถ้าปุ่มใด ๆ อาจถูกลบออกจากแถบเครื่องมือ โดยการส่งข้อความแจ้งเตือนTBN_QUERYDELETEหนึ่งสำหรับแต่ละปุ่มในแถบเครื่องมือ ส่งกลับค่าหน้าต่างหลักจริงเพื่อบ่งชี้ว่า ปุ่มที่อาจถูกลบ มิฉะนั้น จะส่งกลับค่าเป็น FALSE แถบเครื่องมือเพิ่มปุ่มแถบเครื่องมือทั้งหมดไปยังกล่องโต้ตอบ แต่ grays ที่อาจไม่ถูกลบ?

เมื่อใดก็ ตามตัวควบคุมแถบเครื่องมือต้องการข้อมูลเกี่ยวกับปุ่มในกล่องโต้ตอบกำหนดเองแถบเครื่องมือ ส่งTBN_GETBUTTONINFOข้อความแจ้งเตือน การระบุดัชนีของปุ่มที่คุณต้องการให้ข้อมูลและอยู่ของโครงสร้างแบบTBNOTIFY หน้าต่างหลักต้องกรอกรายละเอียดโครงสร้างข้อมูลเกี่ยวข้อง?

กล่องโต้ตอบกำหนดเองแถบเครื่องมือรวมถึงวิธีใช้ปุ่มและปุ่มตั้งค่าใหม่ เมื่อผู้ใช้เลือกปุ่มวิธีใช้ ตัวควบคุมแถบเครื่องมือส่งข้อความแจ้งเตือนTBN_CUSTHELP หน้าต่างหลักควรตอบสนอง โดยการแสดงข้อมูลความช่วยเหลือ กล่องโต้ตอบการส่งข้อความแจ้งเตือนTBN_RESETเมื่อผู้ใช้เลือกปุ่ม Reset ข้อความนี้สัญญาณว่า แถบเครื่องมือที่จะเตรียมใช้งานใหม่กล่องโต้ตอบ?

ข้อความเหล่านี้เป็นข้อความการWM_NOTIFYทั้งหมด และพวกเขาสามารถจัดการหน้าต่างของเจ้าของ โดยการเพิ่มรายการของข้อความแผนผังของแบบฟอร์มต่อไปนี้ในการแมปข้อความของเจ้าของหน้าต่างของคุณ:

ON_NOTIFY ( wNotifyCode, idControl, memberFxn )

wNotifyCode

ข้อความระบุรหัสการแจ้งเตือน เช่นTBN_BEGINADJUST?

idControl

ตัวระบุของตัวควบคุมที่ส่งการแจ้งเตือน?

memberFxn

สมาชิกฟังก์ชันถูกเรียกว่าเมื่อได้รับการแจ้งเตือนนี้?

ฟังก์ชันของสมาชิกจะถูกประกาศกับตัวแบบตัวอย่างต่อไปนี้:

afx_msgโมฆะmemberFxn(NMHDR *LRESULT* pNotifyStruct,ผล);

ถ้าตัวจัดการข้อความแจ้งเตือนที่ส่งกลับค่า นั้นควรใส่ไว้ในLRESULTที่ชี้ไปตามผล?

สำหรับแต่ละข้อความpNotifyStructจุดเป็นโครงสร้างแบบNMHDRหรือโครงสร้างTBNOTIFY โครงสร้างเหล่านี้อธิบายไว้ด้านล่าง:

โครงสร้างของNMHDRประกอบด้วยสมาชิกต่อไป:

typedef struct tagNMHDR {
HWND hwndFrom; nbsp / / หมายเลขอ้างอิงของการควบคุมการส่งข้อความ
UINT idFrom; / / รหัสควบคุมการส่งข้อความ
รหัส UINT  / / รหัสการแจ้งเตือน ดูที่ด้านล่าง
} NMHDR(&N)

hwndFrom

หมายเลขอ้างอิงหน้าต่างของตัวควบคุมที่มีการส่งการแจ้งเตือน การแปลงหมายเลขอ้างอิงนี้เป็นตัวชี้CWndใช้CWnd::FromHandle?

idFrom

รหัสของตัวควบคุมที่ส่งการแจ้งเตือน?

รหัส

รหัสการแจ้งเตือน สมาชิกนี้สามารถเป็นค่าเฉพาะสำหรับชนิดตัวควบคุม เช่นTBN_BEGINADJUSTหรือTTN_NEEDTEXTหรือสามารถเป็นหนึ่งในค่าแจ้งทั่วไปที่แสดงอยู่ด้านล่าง:

โครงสร้างของTBNOTIFYประกอบด้วยสมาชิกต่อไป:

typedef struct {
NMHDR hdr / / ข้อมูลทั่วไปทั้งหมด WM_NOTIFY ข้อความ
int iItem / / ดัชนีของปุ่มที่เกี่ยวข้องกับการแจ้งเตือน
TBBUTTON tbButton / / ข้อมูลเกี่ยวกับปุ่มที่เกี่ยวข้องกับการแจ้งเตือน
int cchText; nbsp  / / นับจำนวนของอักขระในข้อความบนปุ่ม
LPSTR lpszText; / / ที่อยู่ของข้อความบนปุ่ม
} TBNOTIFY ไกล * LPTBNOTIFY(&N)

hdr

ข้อมูลทั่วไปทั้งหมดWM_NOTIFYข้อความ?

iItem

ดัชนีของปุ่มที่เกี่ยวข้องกับการแจ้งเตือน?

tbButton

โครงสร้างของTBBUTTONที่ประกอบด้วยข้อมูลเกี่ยวกับปุ่มแถบเครื่องมือที่เกี่ยวข้องกับการแจ้งเตือน?

cchText

จำนวนของอักขระในข้อความบนปุ่ม?

lpszText

ชี้ไปยังข้อความปุ่ม?

การแจ้งเตือนที่ส่งของแถบเครื่องมือจะเป็นดังนี้:

Index