Страница 1 из 2
Динамическое создание элемента управления в диалоге
Добавлено: 27 апр 2004, 00:39
Асия
В общем, дело вот в чем:
При открытии диалога в него динамически надо поместить элемент управления, как это сделать?
Например, мне надо вставить Edit-box, вот что я делаю:
RECT rect;
rect.bottom=50; rect.left=10; rect.right=60; rect.top=20;
CEdit ed;
ed.Create(ES_AUTOHSCROLL,rect,0,IDC_EDIT4);
вот, я так понимаю, в файле resource.h надо объявить IDC_EDIT4 и усе ... так?
толи я куда-то не туда этот код пишу, толи вообще пишу его неверно, но у меня ничего не получается ... плиииз, помогите, что мне делать?
Надеюсь, эту тему не удалят ... постаралась подобрать осмысленное название
Добавлено: 27 апр 2004, 12:23
Romeo
Моё предположение он создался, но ты его не видишь. По поводу первого параметра (dwStyle) в MSDN сказано:
Specifies the edit control’s style. Apply any combination of edit styles to the control
По русски: "Примените к элементу управления любые комбинации стилей Edit Box'а". Там нету слова ТОЛЬКО

. Таким образом ты забыла добавить свойство WS_VISIBLE, которое валидно для любого окна. На всякий случай, чтобы ты не запуталась, вот исправленный участок кода
Код: Выделить всё
...
ed.Create(WS_VISIBLE | ES_AUTOHSCROLL, rect, 0, IDC_EDIT4);
...
И ещё не советую вносить IDC_EDIT4 в resourse.h по той причине, что это файл генерируется редактором ресурсов АВТОМАТИЧЕСКИ и ручная его правка требует определённого опыта. Если ты хочешь, чтобы идентификатор был доступен во всех файлах можешь вынести его в StdAfx.h.
Добавлено: 27 апр 2004, 12:27
Hawk
Во-первых такие контролсы следует создавать в обработчике OnInitDialog
во-вторых надо передать родителя, т.е. этот самый диалог, и в-третьих надо стиль нормлаьные ему задать :
Код: Выделить всё
BOOL CMyDialog::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
CEdit ed;
ed.Create(ES_AUTOHSCROLL|WS_CHILD|WS_VISIBLE|WS_TABSTOP, rect, this, IDC_EDIT4);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
Добавлено: 27 апр 2004, 12:32
Romeo
Ну WS_CHILD он внутри метода Create всё равно сделается, а вот на счёт парента - проморгал, каюсь

Добавлено: 27 апр 2004, 13:55
Hawk
ПравильнЕе все делать самому
Добавлено: 27 апр 2004, 22:42
Асия
Спасибки!!!!!!! Огромные!!!!
Ща буду пробывать ... если что ... еще поспрашиваю ......
Добавлено: 27 апр 2004, 23:20
Асия
Не ругается - уже хорошо .... но и не отображает его .... мдяяя .... буду еще че-нить делать ....
Добавлено: 28 апр 2004, 09:31
Hawk
а rect у него правильный стоит ? может он за границей диалога рисуется
Добавлено: 28 апр 2004, 10:48
Romeo
Координаты rect'а ведь должны быть заданы в координатной системе парента, т.е. диалога, на котором лежит edit.
Добавлено: 29 апр 2004, 19:07
Асия
RECT rect;
rect.bottom=50; rect.left=10; rect.right=60; rect.top=20;
Я так задаю ..... неужели не влезет? ... я так понимаю начало координат ведь в левом верхнем угле?