Vì bạn khá nhiều phải chạy một máy bơm tin nhắn để có một cửa sổ, bạn cũng có thể sử dụng máy bơm đó để xử lý đầu vào bàn phím và chuột là tốt. Đó là hoàn toàn tùy thuộc vào máy bơm của bạn cho dù bạn bàn tay sự kiện bàn phím trên một cửa sổ con, bạn có thể xử lý chúng trong máy bơm nếu bạn thích.
máy bơm thông điệp điển hình của bạn trông như thế này:
while (GetMessage(&msg, NULL, 0, 0))
{
if (WM_QUIT == msg.message)
break;
TranslateMessage(&msg); // post a WM_CHAR message if this is a WM_KEYDOWN
DispatchMessage(&msg); // this sends messages to the msg.hwnd
}
Đối với một trò chơi, máy bơm của bạn có thể trông như thế này
while (true)
{
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE | PM_NOYIELD))
{
bool fHandled = false;
if (msg.message >= WM_MOUSEFIRST && msg.message <= WM_MOUSELAST)
fHandled = MyHandleMouseEvent(&msg);
else if (msg.message >= WM_KEYFIRST && msg.message <= WM_KEYLAST)
fHandled = MyHandleKeyEvent(&msg);
else if (WM_QUIT == msg.message)
break;
if (! fHandled)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
else
{
// if there are no more messages to handle right now, do some
// game slice processing.
//
}
}
Tất nhiên, bơm thực tế của bạn có khả năng sẽ còn phức tạp hơn rằng, có thể với MsgWaitForMultipleObjects
để bạn có thể đánh thức định kỳ ngay cả khi không có thông báo nào để xử lý, nhưng ngay lập tức khi có tin nhắn.
Nguồn
2010-01-30 00:56:30
Tôi muốn biết tại sao tôi không nên sử dụng DirectInput. Cảm ơn – Adir
Được trả lời bởi Alex trong http://stackoverflow.com/questions/2165230/should-i-use-directinput-or-windows-message-loop/2168067#2168067 – bobobobo