Sistem otomatik olarak her iş parçacığı için bir ileti sırası oluşturur. Eğer bir iş parçacığı oluşturur veya daha fazla windows, bir ileti döngüsü sağlanmalıdır; Bu ileti döngüsü iş parçacığının ileti sırasından iletileri alır ve bunları uygun pencere yordamlara gönderir.
Çünkü mesajları tek tek Windows uygulamasında yönlendirir, bir iş parçacığı onun mesajı döngü başlamadan önce en az bir pencere oluşturmanız gerekir. Win 32 tabanlı uygulamaların çoğu windows oluşturduğu tek bir iş parçacığı içerir. Normal bir uygulama pencere sınıfı için ana penceresi kaydeder, oluşturur ve ana penceresini gösterir ve kendi ileti döngüsü başlar — tüm WinMain işlevinde.
GetMessage ve DispatchMessage işlevleri kullanarak bir ileti döngü oluşturun. Uygulamanızı kullanıcıdan karakter girişi edinmeniz gerekir döngü TranslateMessage işlevi içerir. TranslateMessage sanal-anahtar iletisi karakter iletilerine çevirir. Aşağıdaki örnek, basit bir Win32 tabanlı uygulama WinMain işlevinde ileti döngüsü gösterir.
HINSTANCE hinst;
hwnd hwndMain;
int pascal WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow) {msg msg;
wndclass wc;
UNREFERENCED_PARAMETER(lpszCmdLine);
/ / Ana penceresinin pencere sınıfı kayıt.
Eğer (! hPrevInstance) {wc.style = 0;
WC.lpfnWndProc (wndproc) WndProc; =
WC.cbClsExtra = 0;
WC.cbWndExtra = 0;
WC.hInstance = HINSTANCE;
WC.hIcon = null LoadIcon((HINSTANCE), IDI_APPLICATION);
WC.hCursor = null LoadCursor((HINSTANCE), IDC_ARROW);
WC.hbrBackground = GetStockObject(WHITE_BRUSH);
WC.lpszMenuName = "MainMenu";
WC.lpszClassName = "MainWndClass";
if (!.RegisterClass(amp;wc)) return false;
} hinst = HINSTANCE; / / Örnek tanıtıcı Kaydet / / ana pencere oluşturmak.
hwndMain = Cw_usedefault ("MainWndClass", "Örnek", WS_OVERLAPPEDWINDOW, üste üste, üste, üste, (hwnd) null, (HMENU'nun) null, hinst, (LPVOID) null);
/ / Ana pencere oluşturulamıyor, sonlandırmak / / uygulama.
Eğer (! hwndMain) return false;
/ / Penceresini göster ve içeriğini boyamak.
ShowWindow (hwndMain, nCmdShow);
UpdateWindow(hwndMain);
/ / İleti döngüsü başlar.
süre (GetMessage (& msg, (hwnd) null, 0, 0)) {TranslateMessage(&msg);
DispatchMessage(&msg);
} / / Sistem çıkış kodunu döndürür.
return msg.wParam;
}
Aşağıdaki örnek, bir ileti döngüsü Hızlandırıcılar kullanan ve bir kalıcı olmayan bir iletişim kutusu görüntüleyen bir iplik için gösterir. TranslateAccelerator ya da IsDialogMessage doğru döndüğünde (ileti işlendiğini gösteren), TranslateMessage ve DispatchMessage adı verilen değil. Bunun nedeni TranslateAccelerator ve IsDialogMessage tüm gerekli çevriliyor ve mesajların gönderilmesi gerçekleştirmek olduğunu.
Hwnd hwndMain;
hwnd hwndDlgModeless = null;
msg msg;
haccel haccel;
/ / / / Başlatma gerçekleştirmek ve bir ana pencere oluşturmak.
/ / süre (GetMessage (amp; msg, (hwnd) null, 0, 0)) {If (hwndDlgModeless == (hwnd) null ||
!IsDialogMessage (hwndDlgModeless & msg) & &!TranslateAccelerator (hwndMain, haccel ve msg)) {TranslateMessage(&msg);
DispatchMessage(&msg);
}
}