ระบบสร้างคิวข้อความสำหรับแต่ละหัวข้อโดยอัตโนมัติ ถ้าหัวข้อการสร้างอย่างใดอย่างหนึ่ง หรือต้องมี ให้เพิ่มเติม windows วนความ วนรอบข้อความนี้ดึงข้อความจากคิวข้อความของเธรด และ dispatches เหล่านั้นไปยังกระบวนงานหน้าต่างที่เหมาะสม.
เนื่องจากระบบนำข้อความแต่ละหน้าต่างในโปรแกรมประยุกต์ ด้ายต้องสร้างหน้าต่างอย่างน้อยหนึ่งก่อนที่จะเริ่มการวนรอบของข้อความ โปรแกรมประยุกต์ที่ใช้ Win32 ที่ส่วนใหญ่ประกอบด้วยเธรดเดียวที่สร้าง windows โปรแกรมประยุกต์แบบทั่วไปคลาหน้าต่างสำหรับหน้าต่างหลักของการลงทะเบียน สร้าง และแสดงหน้าต่างหลัก แล้ว เริ่มการทำงานของการวนรอบข้อความ ทั้งหมดในฟังก์ชันWinMain.
คุณสามารถสร้างแบบวนซ้ำข้อความ โดยใช้ฟังก์ชันGetMessageและDispatchMessage ถ้าโปรแกรมประยุกต์ของคุณต้องได้รับการป้อนอักขระจากผู้ใช้ รวมฟังก์ชันTranslateMessageในการวนรอบ TranslateMessageแปลเสมือนคีย์ข้อความลงในข้อความของอักขระ ตัวอย่างต่อไปนี้แสดงการวนรอบข้อความในฟังก์ชันของโปรแกรมประยุกต์ที่ใช้ Win32 ที่วิWinMain.
HINSTANCE hinst
HWND hwndMain
int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow) {MSG msg
WNDCLASS สุขา
UNREFERENCED_PARAMETER(lpszCmdLine)
/ / ลงทะเบียนเรียนสำหรับหน้าต่างหลักหน้าต่าง
ถ้า (! hPrevInstance) { wc.style = 0
wc.lpfnWndProc = WndProc (WNDPROC)
wc.cbClsExtra = 0
wc.cbWndExtra = 0
wc.hInstance = hInstance
wc.hIcon = LoadIcon((HINSTANCE) NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor((HINSTANCE) NULL, IDC_ARROW);
wc.hbrBackground = GetStockObject(WHITE_BRUSH)
wc.lpszMenuName = "MainMenu"
wc.lpszClassName = "MainWndClass"
if (!RegisterClass(amp;wc)) ส่งกลับ FALSE
} hinst = hInstance / / บันทึกหมายเลขอ้างอิงของอินสแตนซ์ / / สร้างหน้าต่างหลัก
hwndMain = CreateWindow ("MainWndClass", "Sample", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, (HWND) NULL, NULL (HMENU) hinst, (LPVOID) NULL);
/ / สิ้นสุดถ้าไม่สามารถสร้างหน้าต่างหลัก / / แอพลิเคชัน
ถ้า (! hwndMain) ส่งกลับ FALSE
/ / แสดงหน้าต่าง และเนื้อหาของการระบายสี
ShowWindow (hwndMain, nCmdShow);
UpdateWindow(hwndMain)
/ / เริ่มการวนรอบข้อความนั้น
ในขณะที่ (GetMessage (& msg, (HWND) NULL, 0, 0)) {TranslateMessage(&msg)
DispatchMessage(&msg)
} / / ส่งกลับรหัสการออกจากระบบ
กลับ msg.wParam
}
ตัวอย่างต่อไปนี้แสดงแบบวนซ้ำข้อความสำหรับเธรดที่ใช้ accelerators และแสดงกล่องโต้ตอบที่สร้าง เมื่อTranslateAcceleratorหรือIsDialogMessageส่งกลับ TRUE (บ่งชี้ว่า ได้รับการประมวลผลข้อความ), TranslateMessageและDispatchMessageจะไม่เรียก เหตุผลนี้อยู่ที่TranslateAcceleratorและIsDialogMessageทำจำเป็นในการแปลและการจัดส่งของข้อความทั้งหมด.
HWND hwndMain
HWND hwndDlgModeless = NULL
MSG msg
HACCEL haccel
/ / / / ทำการเตรียมใช้งาน และสร้างหน้าต่างหลัก
/ / ขณะ (GetMessage (แอมป์ msg, (HWND) NULL, 0, 0)) {ถ้า (hwndDlgModeless == NULL (HWND) ||
!IsDialogMessage (hwndDlgModeless, & msg) & &TranslateAccelerator (hwndMain, haccel และ msg)) {TranslateMessage(&msg)
DispatchMessage(&msg)
}
}