หมายเหตุนี้อธิบายถึงคลาสที่แถบควบคุมใน MFC: ทั่วไปCControlBar, CStatusBar, CToolBar, CDialogBarและCDockBar?
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 หมายเหตุทางเทคนิค?
แถบสถานะแถบตัวควบคุมซึ่งมีแถวของบานหน้าต่างผลลัพธ์ของข้อความได้ มีสองวิธีที่พบโดยทั่วไปการใช้บานหน้าต่างแสดงผลข้อความ:
(ตัวอย่างเช่น เมนูมาตรฐานวิธีใช้ข้อความบรรทัด) เหล่านี้มักจะถูกเข้าถึงได้ โดย 0-ใช้ดัชนี
(ตัวอย่างเช่น ตัวบ่งชี้ CAP, NUM และ SCRL กล่อง) เหล่านี้มักจะถูกเข้าถึงได้ โดย ID สตริง/คำสั่ง?
แบบอักษรสำหรับแถบสถานะได้ 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?
แถบเครื่องมือแถบควบคุมที่ มีแถวของปุ่มบิตแมปที่อาจรวมตัวคั่นอยู่ ลักษณะของปุ่มที่สองได้รับการสนับสนุน: 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 ค่าต่อไปนี้:
แถบการโต้ตอบเป็นแถบควบคุมที่ประกอบด้วยการควบคุมมาตรฐานของ 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)