Newsgroup: it.comp.programmare.win32
Titolo: IsDialogMessage

Salve,
sto scrivendo un programmino banale in Visual C++, ma in realta il progetto
č in C con l'uso delle API (niente MFC).
Il programma č piuttosto semplice, č costituito da una finestra principale
con dei pulstanti e basta (una semplice interfaccia per l'autostart di un
CD).
La finestra č una window-class generica (non una dialog), quindi la
creazione dei pulsanti avviene nella gestione di WM_CREATE chiamando piů
volte CreatWindow.
Per implementare l'utilizzo della tastiera (acceleratori per i pulsanti,e
gestione del tasto TAB) sto sperimentando la funzione IsDialogMessage.
Funziona abbastanza bene, perň ho notato i seguneti comportamenti insoliti:
1. Quando creo la finestra se alla fine della gestione del messaggio
WM_CREATE, non do il focus (SetFocus) ad uno dei controlli, non ho la
gestione degli acceleratori dei pulsanti (ALT + lettera_sottolineata).
2. Premendo il tasto TAB, il fuoco va al primo controllo....adesso gli
acceleratori iniziano a funzionare.
3. Se premo un pulsante (con acceleratore o mouse) che mi apre un dialog
modale sopra la mia finestra e poi chiudo questa dialog, il fuoco torna alla
finestra principale....e mi ritrovo al punto 1; premendo il tasto TAB il
fuoco va al primo controllo e mi trovo nella situazione del punto 2.
A questo punto mi domando se effettivamente č un comportamento normale, e di
conseguenza sono io che mi devo premurare di memorizzare l'ultimo controllo
ad avere il fuoco e specificare nella WM_CREATE di dare il fuoco al primo
controllo e nella WM_ACTIVATE di dare il fuoco al controllo che per ultimo
aveva il fuoco.
grazie
Porlock.

"Porlock" <porloc...@SPAMMAMIinfinito.it> ha scritto nel messaggio
news:b0j163$4qv$1...@grillo.cs.interbusiness.it...

Non ho una risposta precisa da darti, la sola cosa che mi viene in mente
(consultatndo anche la documentazione del PSDK) e' quella di controllare la
dichiarazione della WNDCLASS della tua dialog box custom e verificare che il
campo cbWndExtra sia settato a DLGWINDOWEXTRA. Poi per la gestione di
default dei messaggi usi la DefDlgProc o sempre la DefWindowProc?
Luca


Utilizzo la DefWindowProc.
Porlock.


Allora sto seguendo i tuoi suggerimenti....
ho aggiunto settato DLGWINDOWEXTRA nel campo cbWndExtra e uso per il default
dei messaggi DefDlgProc.
Magicamente tutto funziona !
Rimane il fatto che nella gestione di WM_CREATE devo dare il fuoco ad un
controllo, se non gli acceleratori non vanno.
Mettendo una opportuna SetFocus(hwnd_primocontrollo) nella gestione di
WM_CREATE, tutto va come deve andare.
Grazie per i consigli.
Porlock


E usando la DefDlgProc cambia nulla?  Secondo quando dice il PSK:
---
Applications that create custom window procedures for their custom dialog
boxes often use DefDlgProc instead of the DefWindowProc function to carry
out default message processing.
---
Che e' quello che poi faccio io, pero' sempre con dialog create tramite un
dialog editor, mentre immagino che la tua sia definita a run time, no?
Luca


Bene! Hai settato il "DefPushButton" (DM_SETDEFID)?
Luca

 ha scritto nel messaggio
news:b0j9b1$499$1...@galileo.it.ip-plus.net...

Sě l'ho settato.
(rispondendo all'altro messaggio: sě tutto viene creato a runtime).
Ancora grazie.