การสร้างแบบวนรอบข้อความ

ระบบสร้างคิวข้อความสำหรับแต่ละหัวข้อโดยอัตโนมัติ ถ้าหัวข้อการสร้างอย่างใดอย่างหนึ่ง หรือต้องมี ให้เพิ่มเติม 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) 
    } 
} 

 

Index