Come creare controlli MFC dinamici e gestire le mappe dei messaggi dei controlli in fase di runtime?Come creare i controlli in fase di runtime?
risposta
Dipende veramente da quali controlli si desidera creare, soprattutto se si desidera sapere quali flag impostare. In generale si riduce a questo:
Normalmente un controllo derivato da CWnd viene creato utilizzando Create
o CreateEx
. Per un CButton, per esempio:
CButton button;
button.Create("Button text", WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_PUSHBUTTON | DT_CENTER, CRect(5, 5, 55, 19), this, nID);
dove il CRect
specifica la posizione del pulsante, this
è un puntatore alla finestra padre, e nID
è l'ID di controllo.
Se il controllo non viene fuori come previsto, è probabilmente perché mancano alcune bandiere. Suggerisco di disegnare un controllo campione in modalità progettazione, controllare il codice per quel controllo nel file RC e copiare i flag sul chiamante Create
.
Per quanto riguarda le mappe dei messaggi, vengono normalmente indirizzate alla finestra padre. Il valore nID
utilizzato in Create
è importante qui, perché sarà il numero che identifica il controllo nella mappa dei messaggi. Se si dispone di un numero fisso di controlli, è possibile codificare i numeri nID
per i controlli (a partire da 10000, ad esempio); in caso contrario, dovrai fornire un modo per identificarli dalla finestra principale. Quindi basta aggiungere le voci della mappa dei messaggi.
ON_BN_CLICKED(10000, OnBnClicked)
ON_CONTROL_RANGE(BN_CLICKED, 10010, 10020, OnBtnsClicked)
È possibile utilizzare la mappa ON_CONTROL_RANGE
messaggio per mappare un intervallo di ID per la stessa funzione.