Buongiorno,
ho un'applicazione a finestra con due finestre di dialogo.
L'applicazione disegna il grafico di valori ricevuto sulla porta seriale.
Un dialogo contiene i controlli per impostare la composizione del grafico.
L'altro dialogo mi fa da legenda dei valori.
Problema: ho letto che quando c'è una finestra e dei dialog si deve modificare il ciclo dei messaggi principali.
codice:
// Ciclo di messaggi principale:
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
modificato in:
codice:
// Ciclo di messaggi principale:
while (GetMessage(&msg, NULL, 0, 0))
{
if ((NULL == hDlgCurrent) || (!IsDialogMessage(hDlgCurrent, &msg)) || (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
In hDlgCurrent viene memorizzato l'handle del dialogo attualmente attivo.
Solo che così facendo i messaggi delle finestre di dialogo sono duplicati. Ossia, un click sulla barra di scorrimento ad esempio è come se fosse "mezzo" click. Devo cliccare due volte per ottenerne uno.
Se invece lascio il ciclo dei messaggi originale, tutto funziona.
Direte voi, e allora lascia quello originale.
E' che volevo capire che succede.
WinXP con VC++ express 2008.