TN031: ตัวควบคุมแถบ

หมายเหตุนี้อธิบายถึงคลาสที่แถบควบคุมใน MFC: ทั่วไปCControlBar, CStatusBar, CToolBar, CDialogBarและCDockBar?

CControlBar

ControlBarเป็นแบบCWnd-มาคลาสที่:

ตัวควบคุมแถบสนับสนุนลักษณะเพิ่มเติม:

คลาสที่ได้รับจากCControlBarให้ใช้งานที่น่าสนใจมากขึ้น:

ตัวควบคุมแถบวัตถุ/หน้าต่างทั้งหมดจะเด็ก windows ของหน้าต่างกรอบบางหลัก พวกเขามักจะถูกเพิ่มเป็นน้องที่ไปยังพื้นที่ของไคลเอ็นต์ของเฟรม (ตัวอย่างเช่น MDI ไคลเอนต์หรือมีมุมมอง) ID ของแถบควบคุมหน้าต่างลูกเป็นสิ่งสำคัญ เค้าโครงเริ่มต้นของตัวควบคุมแถบงานเท่านั้นสำหรับแถบควบคุมด้วยรหัสในช่วงAFX_IDW_CONTROLBAR_FIRSTไปAFX_IDW_CONTROLBAR_LAST หมายเหตุที่แม้ว่าจะมีช่วงของการควบคุมที่ 256 แถบรหัส 32 ตัวแรกของเหล่านี้แถบควบคุมรหัสเป็นพิเศษเนื่องจากพวกเขาโดยตรงสนับสนุนสถาปัตยกรรมตัวอย่างก่อนพิมพ์?

คลาCControlBarให้ใช้งานมาตรฐานสำหรับ

C ++ควบคุมแถบวัตถุจะมักจะฝังเป็นสมาชิกของCFrameWndมาคลาส และจะทำความสะอาดขึ้นเมื่อแม่HWNDและวัตถุถูกทำลาย ถ้าคุณต้องการปันส่วนวัตถุแถบควบคุมบนกอง คุณเพียงแค่สามารถกำหนดสมาชิกm_bAutoDestructที่เป็นจริงเพื่อให้ตัวควบคุมแถบ "ลบนี้" เมื่อHWNDถูกทำลาย?

สิ่งสำคัญnbsp  ถ้าคุณสร้างCControlBarของคุณเอง-รับคลาส แทนที่จะใช้วิธีการใดวิธีการหนึ่งของของ MFC มาคลาสของ เช่นCStatusBar, CToolBarหรือCDialogBarคุณจะต้องตั้งค่าข้อมูลสมาชิกm_dwStyle นี้สามารถทำได้ในการแทนของการสร้าง(&N):

 / / CMyControlBar ที่ได้รับมาจาก CControlBar
BOOL CMyControlBar::Create (CWnd * pParentWnd, DWORD dwStyle, UINT nID)
{
 nbsp m_dwStyle = dwStyle

.
   .
   .
}(&N)

อัลกอริทึมของแถบควบคุมเค้าโครง

ขั้นตอนวิธีการเค้าโครงตัวควบคุมแถบคือง่ายมาก หน้าต่างเฟรมส่งข้อความWM_SIZEPARENTให้เด็กทั้งหมดในช่วงแถบควบคุม พร้อมกับข้อความนี้ ตัวชี้ไปยังสี่เหลี่ยมไคลเอ็นต์ของผู้ปกครองถูกส่งผ่านไป ข้อความนี้ถูกส่งให้เด็กในลำดับ Z ตัวควบคุมแถบเด็ก ๆ ใช้ข้อมูลนี้ เพื่อวางตำแหน่งตัวเอง และ เพื่อลดขนาดของพื้นที่ไคลเอ็นต์ของผู้ปกครอง สี่เหลี่ยมสุดท้ายที่เหลือสำหรับพื้นที่ไคลเอ็นต์ปกติ (น้อยกว่าแถบควบคุม) ใช้ในการวางตำแหน่งหน้าต่างไคลเอ็นต์หลัก (มักจะเป็นไคลเอ็นต์ มุมมอง หรือแยกหน้าต่าง MDI)?

ดูที่CWnd::RepositionBarsและCFrameWnd::RecalcLayoutสำหรับรายละเอียดเพิ่มเติม?

MFC ส่วนตัว Windows ข้อWM_SIZEPARENTรวมไปถึงจะปรากฏในเอกสารใน24 หมายเหตุทางเทคนิค?

CStatusBar

แถบสถานะแถบตัวควบคุมซึ่งมีแถวของบานหน้าต่างผลลัพธ์ของข้อความได้ มีสองวิธีที่พบโดยทั่วไปการใช้บานหน้าต่างแสดงผลข้อความ:

แบบอักษรสำหรับแถบสถานะได้ 10 จุด " MS Sans Serif " (ตามคำบอก โดยคำแนะนำการออกแบบแอพลิเคชันของ Windows Interface หรือตัวอักษร mappers เหมาะสมของอักษรตามสัดส่วน Swiss 10 จุด) ใน Windows รุ่นบางอย่างเช่นรุ่นภาษาญี่ปุ่นและ Windows 4.0 แบบอักษรที่เลือกจะแตกต่างกัน?

นอกจากนี้สอดคล้องกับ recomendation ของคำแนะนำการออกแบบแอพลิเคชันของ Windows Interface สีที่ใช้ในแถบสถานะได้ สีเหล่านี้จะไม่บริการกำกับใส่หนัก และมีการเปลี่ยนแปลงแบบไดนามิกในการตอบสนองต่อผู้ใช้กำหนดเองผ่าน Control Panel?

สินค้า ค่าสีของ Windows เริ่มต้นแบบ RGB
พื้นหลังของแถบสถานะ COLOR_BTNFACE RGB (192, 192, 192)
ข้อความแถบสถานะ COLOR_BTNTEXT RGB (000, 000, 000)
แถบด้านบน/ซ้ายขอบสถานะ COLOR_BTNHIGHLIGHT RGB (255, 255, 255)
สถานะแถบขอบ bot/ด้าน ขวา COLOR_BTNSHADOW RGB (128, 128, 128)

การสนับสนุน CCmdUI CStatusBar

วิธีการปรับตัวบ่งชี้ที่มีการปรับปรุงมักจะผ่านกลไกที่ON_UPDATE_COMMAND_UIได้ เวลาใช้งาน แถบสถานะจะเรียกใช้ตัวจัดการON_UPDATE_COMMAND_UIด้วยสตริงที่ ID ของบานหน้าต่างตัวบ่งชี้?

สามารถเรียกใช้ตัวจัดการON_UPDATE_COMMAND_UI:

โปรดไปที่คลาสCStatusBarในชั้นการอ้างอิงไลบรารีสำหรับรายละเอียดเกี่ยวกับการสร้างCStatusBarและการปรับแต่ง APIs การกำหนดเองของแถบสถานะที่ส่วนใหญ่ควรจะทำก่อนเริ่มต้นด้วยแถบสถานะถูกทำให้มองเห็น?

แถบสถานะสนับสนุนเฉพาะหนึ่งบาน stretchy มักจะบานหน้าต่างแรก ขนาดของบานหน้าต่างที่มีขนาดต่ำสุดจริง ๆ ถ้าแถบสถานะจะใหญ่กว่าขนาดต่ำสุดของบานหน้าต่างทั้งหมด ความกว้างพิเศษใด ๆ จะถูกกำหนดให้ไปยังบานหน้าต่าง stretchy โปรแกรมประยุกต์เริ่มต้น ด้วยแถบสถานะมีตัวบ่งชี้การจัดชิดขวา CAP, NUM และ SCRL เนื่องจากเป็นบานหน้าต่างแรก stretchy?

CToolBar

แถบเครื่องมือแถบควบคุมที่ มีแถวของปุ่มบิตแมปที่อาจรวมตัวคั่นอยู่ ลักษณะของปุ่มที่สองได้รับการสนับสนุน: pushbuttons และกล่องกาเครื่องหมายปุ่ม ฟังก์ชันการทำงานของวิทยุกลุ่มที่สามารถสร้างกล่องกาเครื่องหมายปุ่มและON_UPDATE_COMMAND_UI?

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

แต่ละปุ่มต้องเป็นขนาดเดียวกัน เริ่มต้นพิกเซล 24 x 22 มาตรฐานได้ แต่ละรูป/สัญลักษณ์ต้องมีขนาดเดียวกัน และต้องเป็น--เคียงข้างกันในบิตแมป ขนาดเริ่มต้นของรูป/สัญลักษณ์คือ 16 x 15 เซล ดังนั้น สำหรับแถบเครื่องมือกับ 10 ปุ่ม (ใช้ขนาดมาตรฐาน), คุณจำเป็นต้องเป็นบิตแมปที่มีความกว้าง 160 พิกเซลและ 15 พิกเซล?

แต่ละปุ่มมีหนึ่งเดียวเท่า นั้นรูป/สัญลักษณ์ ปุ่มต่าง ๆ ระบุ และลักษณะ (ปิดตัวอย่าง กด ขึ้น ลง ใช้ ปิดการใช้งานลง ไม่ทราบแน่ชัด) ถูกสร้างขึ้นจากรูป/สัญลักษณ์ที่หนึ่ง algorithmically บิตแมปสีหรือ DIB ใด ๆ สามารถใช้ทฤษฎี อัลกอริทึมสำหรับการสร้างปุ่มต่าง ๆ เน้นทำงานได้ดีที่สุดถ้าภาพต้นฉบับที่เป็นระดับสีเทา ดูที่ปุ่มแถบเครื่องมือมาตรฐานและภาพตัดปะปุ่มแถบเครื่องมือมีอยู่ในตัวอย่างทั่วไปของ MFC สำหรับตัวอย่างของภาพตัดปะ?

นอกจากนี้สอดคล้องกับการแนะนำของคำแนะนำการออกแบบแอพลิเคชันของ Windows Interface สีที่ใช้ในแถบเครื่องมือได้ สีเหล่านี้จะไม่บริการกำกับใส่หนัก และมีการเปลี่ยนแปลงแบบไดนามิกในการตอบสนองต่อผู้ใช้กำหนดเองผ่าน Control Panel?

สินค้า ค่าสีของ Windows เริ่มต้นแบบ RGB
พื้นหลังของแถบเครื่องมือ COLOR_BTNFACE RGB(192,192,192)
ขอบ/ด้านซ้ายด้านบนปุ่มแถบเครื่องมือ COLOR_BTNHIGHLIGHT RGB(255,255,255)
ขอบ bot/ขวา ปุ่มแถบเครื่องมือ COLOR_BTNSHADOW RGB(128,128,128)

นอกจากนี้ ปุ่มแถบเครื่องมือรูปบิตแมปจะ recolored เหมือนว่าพวกเขาถูกควบคุมปุ่ม Windows มาตรฐาน Recoloring นี้เกิดขึ้นเมื่อโหลดบิตแมป จากทรัพยากร และตอบสนองต่อการเปลี่ยนแปลงในระบบสีในการตอบสนองต่อผู้ใช้กำหนดเองผ่าน Control Panel สีต่อไปนี้ในแถบเครื่องมือบิตแมปจะถูก recolored โดยอัตโนมัติเพื่อให้พวกเขาควรใช้ ด้วยความระมัดระวัง ถ้าคุณไม่ต้องการที่มีส่วนของบิตแมปของคุณ recolored ใช้สีที่ใกล้เคียง approximates หนึ่งในค่า RGB แมป การแม็ปเสร็จตามค่า RGB แน่นอน?

ค่า RGB ค่าสีที่มีการแมปแบบไดนามิก
RGB (000, 000, 000) COLOR_BTNTEXT
RGB (128, 128, 128) COLOR_BTNSHADOW
RGB (192, 192, 192) COLOR_BTNFACE
RGB (255, 255, 255) COLOR_BTNHIGHLIGHT

โปรดดูคลาสCToolBarในชั้นการอ้างอิงไลบรารีสำหรับรายละเอียดเกี่ยวกับการสร้างCToolBarและการกำหนดเอง APIs การกำหนดเองแถบเครื่องมือส่วนใหญ่ควรจะทำก่อนเริ่มต้นแถบเครื่องมือถูกทำให้มองเห็น?

แบบกำหนดเองสามารถใช้ APIs IDs ลักษณะ ปุ่มปรับความกว้างเป็นตัวเว้นวรรคและรูป/สัญลักษณ์ที่ใช้สำหรับปุ่มใด โดยค่าเริ่มต้น คุณไม่จำเป็นต้องใช้ APIs เหล่านี้?

การสนับสนุน CCmdUI CToolBar

วิธีปุ่มแถบเครื่องมือที่มีการปรับปรุงเสมอคือผ่านกลไกที่ON_UPDATE_COMMAND_UI เวลาใช้งาน แถบเครื่องมือจะเรียกตัวจัดการON_UPDATE_COMMAND_UIด้วย ID คำสั่งของปุ่มนั้น ON_UPDATE_COMMAND_UIไม่เรียกว่าสำหรับตัวคั่น แต่มันถูกเรียกว่า pushbuttons และกล่องกาเครื่องหมายปุ่ม?

สามารถเรียกใช้ตัวจัดการON_UPDATE_COMMAND_UI:

กล่องกาเครื่องหมายปุ่มคือ ปุ่มกล่องกาเครื่องหมาย "อัตโนมัติ" กล่าวคือ เมื่อผู้ใช้กดเหล่านั้น จะทันทีเปลี่ยนสถานะ การตรวจสอบคือรัฐลง หรือคับ ไม่มีวิธีการอินเทอร์เฟซสำหรับผู้ใช้ที่มีอยู่ภายในการเปลี่ยนปุ่มเข้าสู่สถานะ "ไม่ทราบแน่ชัด" ที่ต้องดำเนินการผ่านรหัส?

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

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

มีลักษณะสี่แถบเครื่องมือปุ่มต่าง ๆ (ค่า TBBS_) ใช้สำหรับแสดงผล:

หกอย่างเป็นทางการคำแนะนำออกแบบแอพลิเคชัน Windows Interface ปุ่มลักษณะจะแสดง ด้วย TBBS ค่าต่อไปนี้:

CDialogBar

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

CDialogBarการใช้มือในตัวอย่างก่อนพิมพ์ ซึ่งประกอบด้วยตัวควบคุม pushbutton มาตรฐาน?

ใช้CDialogBarเป็นเหมือนกับการใช้แบบCFormView คุณต้องกำหนดแม่แบบโต้ตอบสำหรับแถบการโต้ตอบ และเอาลักษณะทั้งหมดยกเว้นWS_CHILD โปรดสังเกตว่า กล่องโต้ตอบต้องไม่สามารถมองเห็นได้?

การแจ้งเตือนของตัวควบคุมสำหรับการCDialogBarจะถูกส่งไปแม่ของแถบควบคุม (เหมือนปุ่มแถบเครื่องมือ)?

การสนับสนุน CCmdUI CDialogBar

ปุ่มบนแถบโต้ตอบควรมีการปรับปรุงผ่านกลไกการจัดการON_UPDATE_COMMAND_UI เวลาใช้งาน แถบการโต้ตอบจะเรียกใช้ตัวจัดการON_UPDATE_COMMAND_UIด้วย ID คำสั่งของปุ่มทั้งหมดที่มี gt ID; = 0x8000 (นั่นคือ ในช่วงของรหัสคำสั่ง)(&G)?

สามารถเรียกใช้ตัวจัดการON_UPDATE_COMMAND_UI:

สามารถทำได้เองผ่านมาตรฐานหน้าต่างจัดการ APIs?

หมายเหตุด้านเทคนิคตามหมายเลข|nbsp หมายเหตุด้านเทคนิคตามประเภท(&N)

Index