Это действительно зависит от того, какие элементы управления вы хотите создать, особенно если вы хотите знать, какие флаги вы должны установить. В общем, все сводится к этому:
Обычно CWnd-производный элемент управления создается с использованием Create
или CreateEx
. Для CButton, например:
CButton button;
button.Create("Button text", WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_PUSHBUTTON | DT_CENTER, CRect(5, 5, 55, 19), this, nID);
, где CRect
указывает положение кнопки, this
- указатель на родительское окно, а nID
- идентификатор элемента управления.
Если элемент управления выходит не так, как ожидалось, возможно, это связано с отсутствием некоторых флагов. Я предлагаю вам нарисовать примерный элемент управления в режиме конструктора, проверить код этого элемента управления в файле RC и скопировать флаги для вызывающего Create
.
Что касается карт сообщений, они обычно направляются в родительское окно. Значение nID
, которое вы использовали в Create
, важно здесь, потому что это будет число, которое идентифицирует элемент управления в карте сообщений. Если у вас есть фиксированное количество элементов управления, вы можете жестко закодировать номера nID
для своих элементов управления (например, начиная с 10000); если нет, вам нужно будет предоставить способ для родительского окна, чтобы идентифицировать их. Затем вы просто добавляете записи карты сообщений.
ON_BN_CLICKED(10000, OnBnClicked)
ON_CONTROL_RANGE(BN_CLICKED, 10010, 10020, OnBtnsClicked)
Вы можете использовать карту сообщений ON_CONTROL_RANGE
, чтобы сопоставить диапазон идентификаторов одной и той же функции.