Используя Visual Studio 2013, я создал диалоговый ресурс с помощью редактора ресурсов.Это дочерний элемент управления без границ, это просто набор переключателей, кнопок и статического текста.Я хочу превратить это в пользовательский элемент управления, чтобы разместить его в нескольких разных местах.Давайте назовем это «Панелью».
Затем я создал обычный диалог и с помощью панели инструментов «Пользовательский элемент управления» определил область для Панели.Панель сама регистрируется и имеет действительный дескриптор окна.
Я использовал следующий пример: https://www.codeproject.com/Articles/521/Creating-Custom-Controls
Удар DDX родителя и правильное создание _panel:
MyDialog::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX)
DDX_Control(pDX, IDC_CUSTOM_PANEL, _panel)
}
Я прочитал, что мне нужно переопределитьМетоды OnPaint () и OnEraseBkgnd (CDC * pDC), поэтому класс Panel имеет их, но они пусты.У меня нет никакой настраиваемой рисования, так как на панели ничего нет, кроме обычных кнопок.
Что я должен включить в OnPaint ()?
Я также заметилчто ни одна из кнопок-членов не создается в Panel, как это обычно происходит в диалоговом методе DoDataExchange.Вместо этого мне пришлось прибегнуть к динамическому созданию каждого элемента управления внутри метода Panel PreSubclassWindow ():
void MyPanel:PreSubclassWindow()
{
_groupBox.Create(_T("Options"), WS_CHILD|WS_VISIBLE|BS_GROUPBOX, CRect(11, 11, 112, 231), this, IDC_STATIC_GROUPBOX);
//... do this for every dialog element??? seems like overkill...
CWnd::PreSubclassWindow()
}
Зачем это нужно делать, когда я уже определил / спроектировалПанель и каждый из ее элементов управления в редакторе ресурсов?
Если я не сделаю этого в методе PreSubclassWindow, в диалоговом окне ничего не появится.
Любая помощь приветствуется.Спасибо.