TN024: MFC-กำหนดข้อความและทรัพยากร

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

หมายเหตุนี้ประกอบด้วยรายละเอียดของการใช้งานส่วนตัวของ MFC เนื้อหาทั้งหมดอยู่ภายใต้การเปลี่ยนแปลงในอนาคต MFC ข้อความ Windows ส่วนตัวมีความหมายในขอบเขตของโปรแกรมประยุกต์ที่หนึ่งเท่านั้น แต่จะเปลี่ยนแปลงในอนาคตจะประกอบด้วยข้อความทั้งระบบ?

ทรัพยากรชนิดและช่วงของ MFC ข้อความ Windows ส่วนตัวอยู่ในช่วงสงวน "ระบบ" กัน โดย Microsoft Windows ใช้หมายเลขทั้งหมดที่ไม่อยู่ในช่วง นั้น ในอนาคต อาจใช้หมายเลขใหม่ในช่วง หมายเลขที่ใช้อยู่ในขณะนี้อาจถูกเปลี่ยนแปลง?

MFC Windows ส่วนตัวข้อความที่อยู่ในช่วงของ 0x360-gt; 0x37F(&G)?

MFC ส่วนทรัพยากรชนิดอยู่ในช่วงของ 0xF0-gt; 0xFF(&G)?

ข้อความ Windows ส่วนตัวของ MFC

ข้อความเหล่านี้ Windows จะใช้ในตำแหน่งของฟังก์ชันเสมือน c ++ที่คลัป loose ค่อนข้างจำเป็น ระหว่างหน้าต่างวัตถุ และต้องที่ฟังก์ชัน c ++เสมือนจะไม่เหมาะสม?

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

ในกรณีหายากของต้องการจัดการกับข้อความเหล่านี้อย่างใดอย่างหนึ่ง คุณควรใช้แมโครการแมปข้อความON_MESSAGEและจัดการข้อความในรูปแบบทั่วไปของ LRESULT/WPARAM/LPARAM?

WM_QUERYAFXWNDPROC

ข้อความนี้ถูกส่งไปยังหน้าต่างที่กำลังสร้าง นี้ส่งเร็วมากในกระบวนการสร้างเป็นการกำหนดถ้าเป็น WndProc AfxWndProc. AfxWndProcส่งกลับค่า 1?

wParam ไม่ได้ใช้
lParam ไม่ได้ใช้
ส่งกลับค่า 1 ถ้าถูกประมวลผลโดยAfxWndProc

WM_SIZEPARENT

ข้อความนี้ถูกส่ง โดยหน้าต่างเฟรมของเด็กทันทีในระหว่างการปรับขนาด (CFrameWnd::OnSizeเรียกCFrameWnd::RecalcLayoutซึ่งเรียกCWnd::RepositionBars) เพื่อเปลี่ยนตำแหน่งแถบควบคุมรอบด้านของเฟรม โครงสร้างของAFX_SIZEPARENTPARAMSประกอบด้วยสี่เหลี่ยมพร้อมใช้งานไคลเอ็นต์ปัจจุบันของแม่และ HDWP การ (ซึ่งอาจจะเป็น NULL) ด้วยซึ่งจะเรียกDeferWindowPosในการลด repainting?

wParam ไม่ได้ใช้
lParam ที่อยู่ของโครงสร้างแบบAFX_SIZEPARENTPARAMS
ส่งกลับค่า ไม่ใช้ (0)

ละเว้นข้อความระบุว่า หน้าต่างไม่มีส่วนร่วมในเค้าโครง?

WM_SETMESSAGESTRING

ข้อความนี้ถูกส่งไปยังหน้าต่างเฟรมเพื่อขอให้ปรับปรุงบรรทัดของข้อความในแถบสถานะ ID เป็นสายอักขระหรือ LPCSTR สามารถระบุ (แต่ไม่ทั้ง)?

wParam สตริงที่ ID (หรือศูนย์)
lParam LPCSTR สำหรับสาย (หรือค่า NULL)
ส่งกลับค่า ไม่ใช้ (0)

WM_IDLEUPDATECMDUI

ข้อความนี้ถูกส่งในเวลาว่างเพื่อใช้การปรับปรุงที่ไม่ได้ใช้เวลาของตัวจัดการ UI คำสั่ง update ถ้าหน้าต่าง (โดยปกติแถบควบคุม) จัดการข้อความดังกล่าวสร้างเป็นCCmdUI (หรือวัตถุของคลาสที่ได้รับ) และโทรCCmdUI::DoUpdateสำหรับแต่ละ "สินค้า" ในหน้าต่าง นี้จะตรวจสอบการจัดการON_UPDATE_COMMAND_UIสำหรับวัตถุในห่วงโซ่ตัวจัดการคำสั่งตามลำดับ?

wParam BOOL bDisableIfNoHandler
lParam ไม่ใช้ (0)
ส่งกลับค่า ไม่ใช้ (0)

bDisableIfNoHandlerคือไม่เป็นศูนย์เพื่อปิดใช้งานวัตถุ UI ถ้ามีทั้งแบบON_UPDATE_COMMAND_UIและการจัดการON_COMMAND?

WM_EXITHELPMODE

ข้อความนี้ถูกลงรายการบัญชีไปCFrameWndที่บริบทการออกจากโหมดวิธีใช้ การรับข้อความนี้สิ้นสุดลงการวนรอบโมดอลที่เริ่มต้นโดยCFrameWnd::OnContextHelp.

wParam ไม่ใช้ (0)
lParam ไม่ใช้ (0)
ส่งกลับค่า ไม่ได้ใช้

WM_INITIALUPDATE

ข้อความนี้ถูกส่ง โดยแม่แบบเอกสารไปตามทั้งหมดของหน้าต่างเฟรมเมื่อจะปลอดภัยสำหรับทำการปรับปรุงครั้งแรกของพวกเขาเหล่านั้น แผนที่ไปยังการเรียกไปยังCView::OnInitialUpdateแต่ยังสามารถใช้ในการอื่นCWnd-มาเรียนสำหรับการปรับปรุงอื่น ๆ one-shot?

wParam ไม่ใช้ (0)
lParam ไม่ใช้ (0)
ส่งกลับค่า ไม่ใช้ (0)

WM_RECALCPARENT

ข้อความนี้ถูกส่ง โดยมุมมองไปยังหน้าต่างของแม่ (ที่ได้รับผ่านทางGetParent) เพื่อบังคับให้คำนวณใหม่เค้าโครง (ปกติ แม่จะเรียกRecalcLayout) ใช้ในโปรแกรมประยุกต์ของเซิร์ฟเวอร์ OLE ที่เป็นความจำเป็นสำหรับเฟรมจะมีขนาดใหญ่ ตามขนาดรวมของมุมมองการเติบโต?

ถ้าหน้าต่างหลักการประมวลผลข้อความนี้ ควรกลับ TRUE และเติม RECT ส่งผ่านไปใน lParam กับขนาดของพื้นที่ไคลเอนต์ใหม่ นี้ใช้ในCScrollViewเพื่อจัดการอย่างเหมาะสม scrollbars (ทำแล้วด้านนอกของหน้าต่างเมื่อมีเพิ่ม) เมื่อวัตถุเซิร์ฟเวอร์ที่ถูกเปิดใช้งานในสถาน?

wParam ไม่ใช้ (0)
lParam LPRECT rectClient อาจเป็น NULL
ส่งกลับค่า ไคลเอ็นต์ที่จริงถ้าใหม่สี่เหลี่ยมกลับ FALSE มิฉะนั้น

WM_SIZECHILD

ข้อความนี้ถูกส่งโดยCOleResizeBarไปยังหน้าต่างของเจ้าของ (ผ่านGetOwner) เมื่อผู้ใช้ปรับขนาดแถบปรับขนาด มีจับสำหรับปรับขนาด COleIPFrameWndตอบสนองต่อข้อความนี้ โดยพยายามที่จะเปลี่ยนตำแหน่งหน้าต่างเฟรม ตามที่ผู้ใช้ร้องขอ?

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

wParam ไม่ใช้ (0)
lParam LPRECT rectNew
ส่งกลับค่า ไม่ใช้ (0)

WM_DISABLEMODAL

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

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

wParam ไม่ใช้ (0)
lParam ไม่ใช้ (0)
ส่งกลับค่า ไม่ใช่ศูนย์เป็นปิดไม่ใช้หน้าต่าง 0 แสดงหน้าต่างจะถูกปิดใช้งาน

WM_FLOATSTATUS

ข้อความนี้ถูกส่งไปยังหน้าต่างแบบผุดขึ้นทั้งหมดของหน้าต่างเฟรมเมื่อเฟรมถูกเปิดใช้งาน หรือปิดการใช้งาน โดยหน้าต่างระดับบนเฟรมอื่น ใช้ โดยการใช้งานMFS_SYNCACTIVEในCMiniFrameWndเพื่อให้การเปิดใช้งานหน้าต่างแบบผุดขึ้นเหล่านี้สอดรับการเปิดใช้งานของหน้าต่างเฟรมที่ระดับบนสุด?

wParam เป็นหนึ่งในค่าต่อไปนี้:
FS_SHOW
FS_HIDE
FS_ACTIVATE
FS_DEACTIVATE
FS_ENABLE
FS_DISABLE
FS_SYNCACTIVE
lParam ไม่ใช้ (0)

ค่าส่งคืนควรจะไม่เป็นศูนย์ถ้าFS_SYNCACTIVEจะตั้งค่าและการทำหน้าต่างที่เปิดใช้งานกับเฟรมหลัก CMiniFrameWndส่งกลับค่าไม่เป็นศูนย์เมื่อมีการตั้งค่าลักษณะการMFS_SYNCACTIVE.

ดูข้อมูลเพิ่มเติม การใช้งานCMiniFrameWnd?

WM_ACTIVATETOPLEVEL

ข้อความนี้ถูกส่งไปยังหน้าต่างระดับบนสุดเมื่อหน้าต่างใน "ระดับบนกลุ่มของ" ถูกเปิดใช้งาน หรือปิดการใช้งาน หน้าต่างเป็นส่วนหนึ่งของกลุ่มระดับบนสุดหากมีหน้าต่างระดับบนสุด (ไม่มีแม่หรือเจ้าของ), หรือจะเป็นเจ้าของ โดยหน้าต่าง ข้อความนี้เหมือนกับใช้การWM_ACTIVATEAPPแต่ทำงานในสถานการณ์ที่ผสมของกระบวนการต่าง ๆ ของ windows ในลำดับชั้นหน้าต่างเดียว (ทั่วไปในโปรแกรมประยุกต์ OLE)?

WM_QUERY3DCONTROLS

มีส่งข้อความนี้ในระหว่างการสร้างหน้าต่างเพื่อกำหนดว่าถ้าหน้าต่างควรเป็น subclassed โดย CTL3D32DLL โดยเริ่มต้น 3D ควบคุมจะเปิดใช้งานสำหรับCControlBar, CDialog, CPropertySheet และ CFormView.

wParam ไม่ใช้ (0)
lParam ไม่ใช้ (0)
ส่งกลับค่า ไม่ใช่เป็นศูนย์เพื่อซับคลาสกับ CTL3D.nbsp ค่าส่งกลับถูกใช้สำหรับการโทรไปยังCtl3dSubclassDlgEx.(&N)

WM_COMMANDHELP, WM_HELPHITTEST, WM_EXITHELPMODE

ข้อความเหล่านี้จะใช้ในการใช้งานวิธีใช้ตามบริบท กรุณาอ้างอิงถึง28 หมายเหตุทางเทคนิคสำหรับข้อมูลเพิ่มเติม?

รูปแบบของทรัพยากร Private MFC

ในปัจจุบันมีรูปเดียว MFC ทรัพยากรส่วนตัวแบบกำหนดRT_DLGINIT?

รูปแบบของทรัพยากร RT_DLGINIT

รูปแบบส่วนตัวทรัพยากร MFC หนึ่งถูกใช้เพื่อเก็บข้อมูลการเตรียมใช้งานพิเศษการโต้ตอบ ซึ่งรวมถึงสายอักขระเริ่มต้นจัดเก็บไว้ในกล่องคำสั่งผสม รูปแบบของทรัพยากรนี้ไม่ได้ถูกออกแบบมาเพื่อแก้ไขด้วยตนเองได้ แต่ถูกจัดการ โดย Visual c ++?

Visual c ++และทรัพยากรRT_DLGINITนี้ไม่จำเป็นใช้คุณลักษณะที่เกี่ยวข้องของ MFC เนื่องจากมี API ทางเลือกในการใช้ข้อมูลในทรัพยากร ใช้ Visual c ++ง่ายมากเขียน เก็บรักษา และแปลโปรแกรมประยุกต์ของคุณเรียกนาน?

โครงสร้างพื้นฐานของทรัพยากรRT_DLGINITเป็นดังนี้:

+---------------+nbsp;                   \
| ควบคุม ID |   UINT |
+---------------+                    |
| ข้อความ# |   UINT |
+---------------+                    |
|length ข้อมูล |   DWORD |
+---------------+                    | การทำซ้ำ
|   ข้อมูล |   ความยาวของตัวแปร |   สำหรับตัวควบคุม
|     ...      |   และรูปแบบ |   และข้อความ
+---------------+                    /
|     0         |   ไบต์
+---------------+(&N)

ส่วนซ้ำประกอบด้วย ID ควบคุมการส่งข้อความไป ความ#ส่ง (ปกติ Windows message) และความยาวของข้อมูลตัวแปร มีส่งข้อความ Windows ในแบบฟอร์ม:

SendDlgItemMessage (ltID การควบคุม >, <ข้อความ# >, 0, & <Data>)

นี้เป็นรูปแบบทั่วไปมาก ช่วยให้ข้อความของ Windows และเนื้อหาของข้อมูลใด ๆ การแก้ไขทรัพยากรของ Visual c ++และ MFC เท่านั้นสนับสนุนชุดย่อยจำกัดของข้อความ Windows: CB_ADDSTRING สำหรับการเริ่มต้นรายการเลือกสำหรับกล่องคำสั่งผสม (ข้อมูลเป็นสายอักขระข้อความ)?

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

Index