Funzione di callback LPOFNHOOKPROC (commdlg.h)

[A partire da Windows Vista, le finestre di dialogo Apri e Salva con nome comune sono state sostituite dalla finestra di dialogo Elemento comune. È consigliabile usare l'API Finestra di dialogo elementi comuni anziché queste finestre di dialogo dalla libreria della finestra di dialogo comune.

Riceve messaggi di notifica inviati dalla finestra di dialogo. La funzione riceve anche messaggi per eventuali controlli aggiuntivi definiti specificando un modello di finestra di dialogo figlio. La procedura di hook OFNHookProc è una funzione di callback definita dall'applicazione o definita dalla libreria usata con le finestre di dialogo Apri e Salva con nome di esplorazione.

Il tipo LPOFNHOOKPROC definisce un puntatore a questa funzione di callback. OFNHookProc è un segnaposto per il nome della funzione definita dall'applicazione.

Sintassi

LPOFNHOOKPROC Lpofnhookproc;

UINT_PTR Lpofnhookproc(
  HWND unnamedParam1,
  UINT unnamedParam2,
  WPARAM unnamedParam3,
  LPARAM unnamedParam4
)
{...}

Parametri

unnamedParam1

Handle nella finestra di dialogo figlio della finestra di dialogo Apri o Salva con nome. Utilizzare la funzione GetParent per ottenere l'handle nella finestra di dialogo Apri o Salva con nome.

unnamedParam2

Identificatore del messaggio ricevuto.

unnamedParam3

Ulteriori informazioni sul messaggio. Il significato esatto dipende dal valore del parametro unnamedParam2 .

unnamedParam4

Ulteriori informazioni sul messaggio. Il significato esatto dipende dal valore del parametro unnamedParam2 . Se il parametro unnamedParam2 indica il messaggio WM_INITDIALOG , unnamedParam4 è un puntatore a una struttura OPENFILENAME contenente i valori specificati quando è stata creata la finestra di dialogo.

Valore restituito

Se la procedura hook restituisce zero, la finestra di dialogo predefinita elabora il messaggio.

Se la procedura di hook restituisce un valore diverso da zero, la procedura predefinita della finestra di dialogo ignora il messaggio.

Per i messaggi di notifica CDN_SHAREVIOLATION e CDN_FILEOK , la procedura di hook deve restituire un valore diverso da zero per indicare che ha usato la funzione SetWindowLong per impostare un valore non zero DWL_MSGRESULT .

Commenti

Se non si specifica il flag di OFN_EXPLORER quando si crea una finestra di dialogo Apri o Salva con nome e si desidera una procedura di hook, è necessario usare una procedura di hook DINHookProcOldStyle di stile precedente. In questo caso, la finestra di dialogo avrà l'interfaccia utente in stile precedente.

Quando si usano le funzioni GetOpenFileName o GetSaveFileName per creare una finestra di dialogo Apri o Salva con nome di esplorazione, è possibile fornire una procedura di hook OFNHookProc . Per abilitare la procedura di hook, usare la struttura OPENFILENAME passata alla funzione di creazione della finestra di dialogo. Specificare il puntatore alla procedura di hook nel membro lpfnHook e specificare il flag OFN_ENABLEHOOK nel membro Flags .

Se si specifica una procedura di hook per una finestra di dialogo comune di Esplora risorse, il sistema crea una finestra di dialogo figlio della finestra di dialogo predefinita. La procedura di hook funge da procedura di dialogo per la finestra di dialogo figlio. Questa finestra di dialogo figlio è basata sul modello specificato nella struttura OPENFILENAME oppure è una finestra di dialogo figlio predefinita se non viene specificato alcun modello. La finestra di dialogo figlio viene creata quando la procedura di dialogo predefinita elabora il messaggio WM_INITDIALOG . Dopo che la finestra di dialogo figlio elabora il proprio messaggio WM_INITDIALOG , la procedura di dialogo predefinita sposta i controlli standard, se necessario, per rendere disponibili eventuali controlli aggiuntivi della finestra di dialogo figlio. Il sistema invia quindi il messaggio di notifica CDN_INITDONE alla procedura di hook.

La procedura di hook non riceve messaggi destinati ai controlli standard della finestra di dialogo predefinita. È possibile sottoclasse i controlli standard, ma questo è sconsigliato perché può rendere l'applicazione incompatibile con le versioni successive. Tuttavia, le finestre di dialogo comuni in stile Esplora risorse forniscono un set di messaggi che la procedura di hook può usare per monitorare e controllare la finestra di dialogo. Questi includono un set di messaggi di notifica inviati dalla finestra di dialogo, nonché messaggi che è possibile inviare per recuperare informazioni dalla finestra di dialogo. Per un elenco completo di questi messaggi, vedere Procedure di hook in stile Explorer.

Se la procedura di hook elabora il messaggio di WM_CTLCOLORDLG , deve restituire un handle di pennello valido per disegnare lo sfondo della finestra di dialogo. In generale, se elabora qualsiasi messaggio WM_CTLCOLOR* , deve restituire un handle di pennello valido per disegnare lo sfondo del controllo specificato.

Non chiamare la funzione EndDialog dalla procedura di hook. La procedura di hook può invece chiamare la funzione PostMessage per pubblicare un messaggio di WM_COMMAND con il valore IDCANCEL nella procedura della finestra di dialogo. La registrazione IDCANCEL chiude la finestra di dialogo e causa la restituzione false della funzione della finestra di dialogo. Se è necessario sapere perché la procedura di hook ha chiuso la finestra di dialogo, è necessario fornire il proprio meccanismo di comunicazione tra la procedura di hook e l'applicazione.

Requisiti

   
Client minimo supportato Windows 2000 Professional [solo app desktop]
Server minimo supportato Windows 2000 Server [solo app desktop]
Piattaforma di destinazione Windows
Intestazione commdlg.h (includere Windows.h)

Vedi anche

Libreria di finestre di dialogo comuni

Informazioni concettuali

Getopenfilename

GetSaveFileName

OFNHookProcOldStyle

OPENFILENAME

Riferimento