Condividi tramite


TN024: risorse e messaggi definiti da MFC

Nota

La seguente nota tecnica non è stata aggiornata da quando è stata inclusa per la prima volta nella documentazione online. Di conseguenza, alcune procedure e argomenti potrebbero essere non aggiornati o errati. Per le informazioni più recenti, è consigliabile cercare l'argomento di interesse nell'indice della documentazione online.

Questa nota descrive i messaggi di Windows interni e i formati di risorse usati da MFC. Queste informazioni illustrano l'implementazione del framework e consentono di eseguire il debug dell'applicazione. Per l'avventura, anche se tutte queste informazioni sono ufficialmente non supportate, è possibile usare alcune di queste informazioni per le implementazioni avanzate.

Questa nota contiene i dettagli dell'implementazione privata MFC; tutti i contenuti sono soggetti a modifiche in futuro. I messaggi di Windows privati MFC hanno un significato nell'ambito di un'unica applicazione, ma cambieranno in futuro in modo da contenere messaggi a livello di sistema.

L'intervallo di messaggi e tipi di risorse di Windows privati MFC si trova nell'intervallo riservato di "sistema" messo da parte da Microsoft Windows. Attualmente non vengono usati tutti i numeri negli intervalli e, in futuro, potrebbero essere usati nuovi numeri nell'intervallo. I numeri attualmente utilizzati possono essere modificati.

I messaggi di Windows privati MFC si trovano nell'intervallo 0x360-0x37F>.

I tipi di risorse private MFC si trovano nell'intervallo 0xF0-0xFF>.

Messaggi di Windows privati MFC

Questi messaggi di Windows vengono usati al posto di funzioni virtuali C++ in cui è necessario un accoppiamento relativamente libero tra gli oggetti finestra e dove una funzione virtuale C++ non sarebbe appropriata.

Questi messaggi privati di Windows e le strutture di parametri associate vengono dichiarati nell'intestazione privata MFC 'AFXPRIV. H'. Si avvisa che qualsiasi codice che include questa intestazione potrebbe basarsi su un comportamento non documentato e probabilmente si interromperà nelle versioni future di MFC.

Nel raro caso in cui sia necessario gestire uno di questi messaggi, è consigliabile usare la macro della mappa dei messaggi ON_MESSAGE e gestire il messaggio nel formato LRESULT/WPARAM/LPARAM generico.

WM_QUERYAFXWNDPROC

Questo messaggio viene inviato a una finestra che viene creata. Questo viene inviato molto presto nel processo di creazione come metodo per determinare se WndProc è AfxWndProc. AfxWndProc restituisce 1.

Parametri e valore restituito Descrizione
wParam Non usato
lParam Non usato
restituisce 1 se elaborato da AfxWndProc

WM_SIZEPARENT

Questo messaggio viene inviato da una finestra cornice ai relativi elementi figlio immediati durante il ridimensionamento (CFrameWnd::OnSize chiamate CFrameWnd::RecalcLayout che chiama CWnd::RepositionBars) per riposizionare le barre di controllo intorno al lato del frame. La struttura AFX_SIZEPARENTPARAMS contiene il rettangolo client corrente disponibile dell'elemento padre e una piattaforma HDWP (che può essere NULL) con cui chiamare DeferWindowPos per ridurre al minimo la riproduzione.

Parametri e valore restituito Descrizione
wParam Non usato
lParam Indirizzo di una struttura AFX_SIZEPARENTPARAMS
restituisce Non usato (0)

Ignorando il messaggio viene indicato che la finestra non partecipa al layout.

WM_edizione Standard TMESSAGESTRING

Questo messaggio viene inviato a una finestra cornice per chiedere di aggiornare la riga del messaggio nella barra di stato. È possibile specificare un ID stringa o un LPCSTR (ma non entrambi).

Parametri e valore restituito Descrizione
wParam ID stringa (o zero)
lParam LPCSTR per la stringa (o NULL)
restituisce Non usato (0)

WM_IDLEUPDATECMDUI

Questo messaggio viene inviato in tempo di inattività per implementare l'aggiornamento inattiva dei gestori dell'interfaccia utente di update-command. Se la finestra (in genere una barra di controllo) gestisce il messaggio, crea un CCmdUI oggetto (o un oggetto di una classe derivata) e chiama CCmdUI::DoUpdate ognuno degli "elementi" nella finestra. Verrà a sua volta verificata la presenza di un gestore ON_UPDATE_COMMAND_UI per gli oggetti nella catena del gestore dei comandi.

Parametri e valore restituito Descrizione
wParam BOOL bDisableIfNoHandler
lParam Non usato (0)
restituisce Non usato (0)

bDisableIfNoHandler è diverso da zero per disabilitare l'oggetto dell'interfaccia utente se non è presente né un ON_UPDATE_COMMAND_UI né un gestore ON_COMMAND.

WM_EXITHELPMODE

Questo messaggio viene inviato a un CFrameWnd oggetto che per uscire dalla modalità guida sensibile al contesto. La ricezione di questo messaggio termina il ciclo modale avviato da CFrameWnd::OnContextHelp.

Parametro e valore restituito Descrizione
wParam Non usato (0)
lParam Non usato (0)
restituisce Non usato

WM_INITIALUPDATE

Questo messaggio viene inviato dal modello di documento a tutti i discendenti di una finestra cornice quando è sicuro per eseguire l'aggiornamento iniziale. Esegue il mapping a una chiamata a CView::OnInitialUpdate , ma può essere usato in altre CWndclassi derivate per l'aggiornamento di un'altra operazione.

Parametri e valore restituito Descrizione
wParam Non usato (0)
lParam Non usato (0)
restituisce Non usato (0)

WM_RECALCPARENT

Questo messaggio viene inviato da una visualizzazione alla relativa finestra padre (ottenuta tramite GetParent) per forzare un ricalcolo del layout (in genere, l'elemento padre chiamerà RecalcLayout). Questa operazione viene usata nelle applicazioni server OLE in cui è necessario che il frame cresca di dimensioni man mano che le dimensioni totali della vista aumentano.

Se la finestra padre elabora questo messaggio, restituisce TRUE e riempie il RECT passato in lParam con le nuove dimensioni dell'area client. Viene usato in CScrollView per gestire correttamente le barre di scorrimento (posizionare quindi all'esterno della finestra quando vengono aggiunte) quando un oggetto server è attivato sul posto.

Parametri e valore restituito Descrizione
wParam Non usato (0)
lParam LPRECT rectClient, può essere NULL
restituisce TRUE se viene restituito un nuovo rettangolo client, FAL edizione Standard in caso contrario

WM_SIZECHILD

Questo messaggio viene inviato dalla COleResizeBar finestra del proprietario (tramite GetOwner) quando l'utente ridimensiona la barra di ridimensionamento con gli handle di ridimensionamento. COleIPFrameWnd risponde a questo messaggio tentando di riposizionare la finestra cornice come richiesto dall'utente.

Il nuovo rettangolo, specificato nelle coordinate client rispetto alla finestra cornice che contiene la barra di ridimensionamento, punta a lParam.

Parametri e valore restituito Descrizione
wParam Non usato (0)
lParam LPRECT rectNew
restituisce Non usato (0)

WM_DISABLEMODAL

Questo messaggio viene inviato a tutte le finestre popup di proprietà di una finestra cornice disattivata. La finestra cornice usa il risultato per determinare se disabilitare o meno la finestra popup.

È possibile usarlo per eseguire un'elaborazione speciale nella finestra popup quando il frame entra in uno stato modale o per impedire la disabilitazione di determinate finestre popup. Le descrizioni comando usano questo messaggio per distruggersi quando la finestra cornice entra in uno stato modale, ad esempio.

Parametri e valore restituito Descrizione
wParam Non usato (0)
lParam Non usato (0)
restituisce Non-zero per NON disabilitare la finestra, 0 indica che la finestra verrà disabilitata

WM_FLOATSTATUS

Questo messaggio viene inviato a tutte le finestre popup di proprietà di una finestra cornice quando il frame viene attivato o disattivato da un'altra finestra cornice di primo livello. Viene usato dall'implementazione di MFS_SYNCACTIVE in CMiniFrameWndper mantenere sincronizzata l'attivazione di queste finestre popup con l'attivazione della finestra cornice di primo livello.

Parametri Descrizione
wParam Uno dei valori seguenti:

FS_SHOW

FS_HIDE

FS_ACTIVATE

FS_DEACTIVATE

FS_ENABLEFS_DISABLE

FS_SYNCACTIVE
lParam Non usato (0)

Il valore restituito deve essere diverso da zero se FS_SYNCACTIVE è impostato e la finestra ne sincronizza l'attivazione con il frame padre. CMiniFrameWnd restituisce un valore diverso da zero quando lo stile è impostato su MFS_SYNCACTIVE.

Per altre informazioni, vedere l'implementazione di CMiniFrameWnd.

WM_ACTIVATETOPLEVEL

Questo messaggio viene inviato a una finestra di primo livello quando una finestra nel relativo "gruppo di primo livello" viene attivata o disattivata. Una finestra fa parte di un gruppo di primo livello se è una finestra di primo livello (nessun padre o proprietario) o è di proprietà di tale finestra. Questo messaggio è simile a quello usato per WM_ACTIVATEAPP, ma funziona in situazioni in cui le finestre appartenenti a processi diversi sono miste in una singola gerarchia di finestre (comune nelle applicazioni OLE).

WM_COMMANDHELP, WM_HELPHITTEST, WM_EXITHELPMODE

Questi messaggi vengono usati nell'implementazione della Guida sensibile al contesto. Per altre informazioni, vedere la nota tecnica 28 .

Formati di risorse private MFC

Attualmente, MFC definisce due formati di risorse private: RT_TOOLBAR e RT_DLGINIT.

formato risorsa RT_TOOLBAR

La barra degli strumenti predefinita fornita da AppWizard si basa su una risorsa personalizzata RT_TOOLBAR introdotta in MFC 4.0. È possibile modificare questa risorsa usando l'editor della barra degli strumenti.

formato risorsa RT_DLGINIT

Un formato di risorsa privata MFC viene usato per archiviare informazioni aggiuntive sull'inizializzazione del dialogo. Sono incluse le stringhe iniziali archiviate in una casella combinata. Il formato di questa risorsa non è progettato per essere modificato manualmente, ma viene gestito da Visual C++.

Visual C++ e questa risorsa RT_DLGINIT non sono necessarie per usare le funzionalità correlate di MFC poiché esistono api alternative all'uso delle informazioni nella risorsa. L'uso di Visual C++ semplifica notevolmente la scrittura, la gestione e la conversione dell'applicazione a lungo termine.

La struttura di base di una risorsa RT_DLGINIT è la seguente:

+---------------+    \
| Control ID    |   UINT             |
+---------------+    |
| Message #     |   UINT             |
+---------------+    |
|length of data |   DWORD            |
+---------------+    |   Repeated
|   Data        |   Variable Length  |   for each control
|   ...         |   and Format       |   and message
+---------------+    /
|     0         |   BYTE
+---------------+

Una sezione ripetuta contiene l'ID di controllo a cui inviare il messaggio, il messaggio # a cui inviare (un normale messaggio di Windows) e la lunghezza variabile dei dati. Il messaggio di Windows viene inviato in un modulo:

SendDlgItemMessage(<Control ID>, <Message #>, 0, &<Data>);

Si tratta di un formato molto generale, che consente qualsiasi contenuto di dati e messaggi di Windows. L'editor di risorse di Visual C++ e MFC supportano solo un subset limitato di messaggi di Windows: CB_ADDSTRING per le scelte di elenco iniziali per le caselle combinate (i dati sono una stringa di testo).

Vedi anche

Note tecniche per numero
Note tecniche per categoria