TN024: Messaggi definiti dal MFC e risorse

Questa nota descrive l'interni dei messaggi di Windows e i formati di risorsa utilizzati da MFC. Questa informazione spiega l'attuazione del quadro e vi assisterà durante il debug dell'applicazione. L'avventuroso, anche se non sono ufficialmente supportate, tutte queste informazioni si può utilizzare per alcune di queste informazioni per implementazioni avanzate.

Questa nota contiene i dettagli di implementazione privato MFC; tutti i contenuti sono soggetti a modifiche in futuro. Messaggi privati di Windows MFC hanno significato nell'ambito di una sola applicazione solo ma cambieranno in futuro per contenere i messaggi di sistema.

I messaggi privati di Windows gamma di MFC e i tipi di risorsa sono nell'intervallo riservato "sistema" mettere da parte di Microsoft Windows. Attualmente non tutti i numeri nelle gamme sono utilizzati e, in futuro, nuovi numeri nell'intervallo possono essere utilizzati. I numeri usati attualmente possono essere cambiati.

MFC privato Windows messa&ggi sono nella gamma 0x360-gt; 0x37F.

Risorsa privata MFC tipi sono nella &gamma 0xF0-gt; 0xFF.

MFC Private dei messaggi di Windows

Questi messaggi di Windows vengono utilizzati al posto di funzioni virtuali C++ dove è richiesta relativamente accoppiamento tra oggetti window e dove una funzione virtuale C++ non è opportuno.

Questi messaggi privati di Windows e il parametro associato strutture vengono dichiarati nell'intestazione MFC privato ' AFXPRIV.H'. Tenete presente che qualsiasi codice che include questa intestazione può essere basandosi su comportamento privi di documenti e volontà probabile pausa in futuro versioni di MFC.

Nel caso raro di dover gestire uno di questi messaggi, è necessario utilizzare macro ON_MESSAGE messaggio mappa e gestire il messaggio in formato generico LRESULT/WPARAM/LPARAM.

WM_QUERYAFXWNDPROC

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

wParam Non utilizzate
lParam Non utilizzate
restituisce 1 se elaborate da AfxWndProc

WM_SIZEPARENT

Questo messaggio viene inviato da una finestra cornice per suoi figli immediati durante il ridimensionamento (chiamateCFrameWnd::OnSize RecalcLayout che chiama CWnd::RepositionBars) per riposizionare le barre di controllo intorno al lato della cornice. La struttura AFX_SIZEPARENTPARAMS contiene il rettangolo di corrente disponibili client del padre e HDWP (che può essere NULL) con cui chiamare Error_invalid_dwp_handle per ridurre al minimo la riverniciatura.

wParam Non utilizzate
lParam Indirizzo di una struttura AFX_SIZEPARENTPARAMS
restituisce Non usate (0)

Ignorando il messaggio indica che la finestra non prende parte nel layout.

WM_SETMESSAGESTRING

Questo messaggio viene inviato a una finestra cornice per chiederlo per aggiornare la riga del messaggio nella barra di stato. O un ID di stringa o un LPCSTR può essere specificato (ma non entrambi).

wParam String ID (o zero)
lParam LPCSTR per la stringa NULL (o)
restituisce Non usate (0)

WM_IDLEUPDATECMDUI

Questo messaggio viene inviato in tempo di inattività per implementare l'aggiornamento del periodo di inattività di gestori di comando di aggiornamento dell'interfaccia utente. Se la finestra (di solito una barra di controllo) gestisce il messaggio, crea un oggetto CCmdUI (o un oggetto di una classe derivata) e chiamare CCmdUI::DoUpdate per ciascuna delle "voci" nella finestra. Questo a sua volta controlla per un gestore ON_UPDATE_COMMAND_UI per gli oggetti nella catena di comando-gestore.

wParam BOOL bDisableIfNoHandler
lParam Non usate (0)
restituisce Non usate (0)

bDisableIfNoHandler è diverso da zero per disattivare l'oggetto UI se c'è un ON_UPDATE_COMMAND_UI né un gestore ON_COMMAND.

WM_EXITHELPMODE

Questo messaggio verrà inviato a un CFrameWnd che per uscire sensibile al contesto aiutare modalità. La ricezione di questo messaggio termina il ciclo modale iniziato da CFrameWnd::OnContextHelp.

wParam Non usate (0)
lParam Non usate (0)
restituisce Non utilizzate

WM_INITIALUPDATE

Questo messaggio viene inviato da modello di documento per tutti i discendenti di una finestra cornice quando è sicuro per loro di fare il loro aggiornamento iniziale. Esegue il mapping a una chiamata a CView::OnInitialUpdate , ma può essere utilizzato in altri CWnd-classi per altri l'aggiornamento One-Shot derivate.

wParam Non usate (0)
lParam Non usate (0)
restituisce Non usate (0)

WM_RECALCPARENT

Questo messaggio viene inviato da una visualizzazione a finestra padre (ottenuto tramite GetParent) per forzare un ricalcolo layout (di solito, l'elemento padre chiamerà RecalcLayout). Questo è usato in applicazioni server OLE dove è necessario per il telaio a crescere nella dimensione come dimensione totale della visualizzazione cresce.

Se la finestra padre elabora questo messaggio dovrebbe restituire TRUE e riempire l'oggetto RECT passata in lParam con le nuove dimensioni dell'area client. Questo è usato in CScrollView per gestire in modo appropriato le barre di scorrimento (luogo poi all'esterno della finestra quando vengono aggiunte) quando un oggetto server è attivato sul posto.

wParam Non usate (0)
lParam LPRECT rectClient, può essere NULL
restituisce Rettangolo client TRUE se nuovo restituito, FALSE in caso contrario

WM_SIZECHILD

Questo messaggio viene inviato da COleResizeBar per sua finestra proprietaria (tramite GetOwner) quando l'utente ridimensiona la barra di ridimensionamento con le maniglie di ridimensionamento. COleIPFrameWnd risponde a questo messaggio, tentando di riposizionare la finestra cornice come l'utente ha richiesto.

Il nuovo rettangolo, dato in coordinate del client relativo alla finestra con frame che contiene la barra di ridimensionamento, è puntato da lParam.

wParam Non usate (0)
lParam LPRECT rectNew
restituisce Non usate (0)

WM_DISABLEMODAL

Questo messaggio viene inviato a tutte le finestre popup di proprietà di una finestra cornice che sta di disattivazione. La finestra cornice il risultato viene utilizzata per determinare se disabilitare la finestra pop-up o meno.

È possibile utilizzare questo per eseguire un'elaborazione speciale in vostra finestra popup quando il telaio entra in uno stato modale o per mantenere alcune finestre popup da sempre disattivata. Le descrizioni comandi utilizzano questo messaggio per distruggere se stessi quando la finestra cornice va in uno stato modale, ad esempio.

wParam Non usate (0)
lParam Non usate (0)
restituisce Diverso da 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 di livello superiore del telaio. Questo è usato dall'implementazione di MFS_SYNCACTIVE in CMiniFrameWnd, per mantenere l'attivazione di queste finestre popup in sincronia con l'attivazione della finestra cornice a livello superiore.

wParam È uno dei valori seguenti:
FS_SHOW
FS_HIDE
FS_ACTIVATE
FS_DEACTIVATE
FS_ENABLE
FS_DISABLE
FS_SYNCACTIVE
lParam Non usate (0)

Il valore restituito dovrebbe essere diverso da zero se FS_SYNCACTIVE è impostato e la finestra sincronizza l'attivazione con il telaio del genitore. CMiniFrameWnd restituisce diverso da zero, quando lo stile è impostato su MFS_SYNCACTIVE.

Per ulteriori informazioni, vedere l'implementazione di CMiniFrameWnd.

WM_ACTIVATETOPLEVEL

Questo messaggio viene inviato a una finestra di primo livello, quando una finestra nel suo gruppo di"primo livello" viene attivata o disattivata. Una finestra è parte di un gruppo di primo livello se è una finestra di primo livello (nessun genitore o proprietario), o è di proprietà di come una finestra. Questo messaggio è simile in uso WM_ACTIVATEAPP, ma funziona in situazioni dove windows appartenendo a diversi processi sono mescolati in una gerarchia di singola finestra (comune in applicazioni OLE).

WM_QUERY3DCONTROLS

Questo messaggio viene inviato durante la creazione della finestra per determinare se la finestra deve essere una sottoclasse da CTL3D32.DLL. dai controlli 3D predefinito vengono attivati per CControlBar, CDialog, CPropertySheet e CFormView.

wParam Non usate (0)
lParam Non usate (0)
restituisce Valore diverso da zero alla sottoclasse co&n CTL3D.nbsp; Il valore restituito viene utilizzato per la chiamata a Ctl3dSubclassDlgEx.

WM_COMMANDHELP, WM_HELPHITTEST, WM_EXITHELPMODE

Questi messaggi vengono utilizzati nell'attuazione della Guida sensibile al contesto. Per ulteriori informazioni fare riferimento al tecnico nota 28.

Formati di risorse Private MFC

Attualmente vi è un solo MFC risorsa privata formato definito, RT_DLGINIT.

Formato di risorse RT_DLGINIT

Un formato di risorsa privata MFC viene utilizzato per archiviare informazioni sull'inizializzazione ulteriore finestra di dialogo. Ciò include l'iniziale stringhe memorizzate in una casella combinata. Il formato di questa risorsa non è progettato per essere modificate manualmente, ma viene gestito da Visual C++.

Visual C++ e questa risorsa RT_DLGINIT non devono utilizzare la funzionalità correlate di MFC, poiché ci sono alternativa API utilizzando le informazioni nella risorsa. Utilizzo di Visual C++ rende molto più facile da scrivere, mantenere e tradurre l'applicazione nel lungo periodo.

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

+---------------+nbsp;                   \
| ID di controllo |   UI&NT |
+---------------+                    |
| Messaggio # |   UINT |
+---------------+                    |
|length dei dati |   DWORD |
+---------------+                    | Ripetuta
|   Dati |   Lunghezza variabile |   per ciascun controllo
|     ...      |   e il formato |   e il messaggio
+---------------+                    /
|     0         |   BYTE
+---------------+

Una sezione ripetuta contiene l'ID di controllo per inviare il messaggio, il messaggio # to send (un normale messaggio di Windows) e una lunghezza variabile dei dati. Il messaggio di Windows viene inviato in una forma:

SendDlgItemMessage (lt;ID del controllo >, < messaggio # >, 0 & <Data>)

Questo è un formato molto generale, consentendo di eventuali messaggi di Windows e il contenuto dei dati. Editor di risorse di Visual C++ e MFC supportano solo un sottoinsieme limitato di messaggi di Windows: CB_ADDSTRING per le scelte-elenco iniziale per le caselle combinate (i dati sono una stringa di testo).

&Note tecniche per numero |nbsp; Note tecniche per la categoria

Index