DirectX/Message loop: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
Nessun oggetto della modifica
Riga 134:
| L'utente ha rilasciato le ancore di ridimensionamento.
|}
 
{{Avanzamento|75%|12 ottobre 2011}}
== Esempi ==
Proviamo a gestire l'utilizzo della tastiera. Utilizzando il messaggio WM_CHAR, possiamo sapere quando l'utente avrà premuto un tasto. WM_CHAR invia in wParam il codice UTF-16 del carattere Aggiungiamo quindi allo switch:
<source lang="cpp">
case WM_CHAR:
printf("E' stato premuto il tasto: %lc\n", (WCHAR) wParam);
break;
</source>
 
Ogni volta che la finestra sarà in primo piano ed un tasto verrà premuto, sarà visualizzato sul terminale. Se non avete ancora aperto il terminale seguite le istruzioni nel modulo [[DirectX/Inizializzazione/Terminale_di_debug | Terminale di debug]].
 
== Sorgente per questo modulo ==
A questo punto il codice del nostro programma dovrebbe assomigliare a qualcosa di simile:
<source lang="cpp">
#include <Windows.h>
#include <stdio.h>
#include <iostream>
#include <fcntl.h>
#include <io.h>
 
/* Da queste parti ci mettiamo OpenConsole */
 
LRESULT CALLBACK MsgHandler(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_CHAR:
printf("E' stato premuto il tasto: %lc\n", (WCHAR) wParam);
break;
default:
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
}
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR cmdLine, int cmdShow)
{
OpenConsole();
 
WNDCLASSEX wc;
ZeroMemory(&wc, sizeof(WNDCLASSEX));
 
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = MsgHandler;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_APPLICATION));
wc.hCursor = LoadCursor(hInstance, IDC_ARROW);
wc.hbrBackground = NULL;
wc.lpszMenuName = NULL;
wc.lpszClassName = L"DxTutorial1";
wc.hIconSm = NULL;
 
ATOM res = RegisterClassEx(&wc);
if (!res)
{
printf("Impossibile registrare la classe.\n");
return -1;
}
 
HWND windowHandle = CreateWindow(L"DxTutorial1", L"Titolo della finestra", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 800, 600, NULL, NULL, hInstance, NULL);
ShowWindow(windowHandle, SW_SHOWDEFAULT);
 
MSG msg = { 0 };
while (msg.message != WM_QUIT)
{
if (PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
{
// Gestisci il messaggio
}
else
{
// Disegna con DirectX
}
}
 
return 0;
}
</source>
 
[[Categoria:DirectX|Inizializzazione|Message loop]]
{{Avanzamento|75100%|1213 ottobre 2011}}