2010-01-28 3 views

risposta

12

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.