Как создать элементы управления во время выполнения? - PullRequest
6 голосов
/ 28 января 2010

Как создавать динамические элементы управления MFC и обрабатывать карты сообщений элементов управления во время выполнения?

1 Ответ

13 голосов
/ 28 января 2010

Это действительно зависит от того, какие элементы управления вы хотите создать, особенно если вы хотите знать, какие флаги вы должны установить. В общем, все сводится к этому:

Обычно 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, чтобы сопоставить диапазон идентификаторов одной и той же функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...