Ręczne dodawanie formantów

Kontrolki można dodać do okna dialogowego za pomocą edytora okien dialogowych lub dodać je samodzielnie z kodem.

Aby samodzielnie utworzyć obiekt kontrolny, zwykle osadzasz obiekt kontrolny języka C++ w oknie dialogowym języka C++ lub obiekcie okna ramowego. Podobnie jak wiele innych obiektów w strukturze, kontrole wymagają dwuetapowej konstrukcji. Należy wywołać funkcję Create member kontrolki w ramach tworzenia okna dialogowego nadrzędnego lub okna ramki. W przypadku okien dialogowych zwykle odbywa się to w elemecie OnInitDialog i oknach ramowych w obszarze OnCreate.

W poniższym przykładzie pokazano, jak można zadeklarować CEdit obiekt w deklaracji klasy pochodnego okna dialogowego, a następnie wywołać Create funkcję składową w elemencie OnInitDialog. CEdit Ponieważ obiekt jest zadeklarowany jako obiekt osadzony, jest automatycznie konstruowany podczas konstruowania obiektu okna dialogowego, ale nadal musi być inicjowany z własną Create funkcją składową.

class CCustomDialog : public CDialog
{
   CEdit m_edit;
   virtual BOOL OnInitDialog();
};

Poniższa OnInitDialog funkcja konfiguruje prostokąt, a następnie wywołuje metodę Create , aby utworzyć kontrolkę edycji systemu Windows i dołączyć ją do niezainicjowanego CEdit obiektu.

BOOL CCustomDialog::OnInitDialog()
{
   CDialog::OnInitDialog();
   CRect rect(85, 110, 180, 210);

   m_edit.Create(WS_CHILD | WS_VISIBLE | WS_TABSTOP |
                     ES_AUTOHSCROLL | WS_BORDER,
                 rect, this, IDC_EXTRA_EDIT);
   m_edit.SetFocus();
   return FALSE;
}

Po utworzeniu obiektu edycji można również ustawić fokus wejściowy na kontrolkę, wywołując funkcję składową SetFocus . Na koniec zwracasz wartość 0 z OnInitDialog , aby pokazać, że ustawiono fokus. Jeśli zwracasz wartość niezerową, menedżer okien dialogowych ustawia fokus na pierwszy element kontrolki na liście elementów okna dialogowego. W większości przypadków należy dodać kontrolki do okien dialogowych za pomocą edytora okien dialogowych.

Zobacz też

Tworzenie i używanie kontrolek
Kontrolki
CDialog::OninitDialog