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]]
|