Динамическое создание элемента управления в диалоге
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
В общем, дело вот в чем:
При открытии диалога в него динамически надо поместить элемент управления, как это сделать?
Например, мне надо вставить 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 и усе ... так?
толи я куда-то не туда этот код пишу, толи вообще пишу его неверно, но у меня ничего не получается ... плиииз, помогите, что мне делать?
Надеюсь, эту тему не удалят ... постаралась подобрать осмысленное название
При открытии диалога в него динамически надо поместить элемент управления, как это сделать?
Например, мне надо вставить 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 и усе ... так?
толи я куда-то не туда этот код пишу, толи вообще пишу его неверно, но у меня ничего не получается ... плиииз, помогите, что мне делать?
Надеюсь, эту тему не удалят ... постаралась подобрать осмысленное название
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Моё предположение он создался, но ты его не видишь. По поводу первого параметра (dwStyle) в MSDN сказано:
Specifies the edit control’s style. Apply any combination of edit styles to the control
По русски: "Примените к элементу управления любые комбинации стилей Edit Box'а". Там нету слова ТОЛЬКО
. Таким образом ты забыла добавить свойство WS_VISIBLE, которое валидно для любого окна. На всякий случай, чтобы ты не запуталась, вот исправленный участок кода
И ещё не советую вносить IDC_EDIT4 в resourse.h по той причине, что это файл генерируется редактором ресурсов АВТОМАТИЧЕСКИ и ручная его правка требует определённого опыта. Если ты хочешь, чтобы идентификатор был доступен во всех файлах можешь вынести его в StdAfx.h.
Specifies the edit control’s style. Apply any combination of edit styles to the control
По русски: "Примените к элементу управления любые комбинации стилей Edit Box'а". Там нету слова ТОЛЬКО

Код: Выделить всё
...
ed.Create(WS_VISIBLE | ES_AUTOHSCROLL, rect, 0, IDC_EDIT4);
...
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Во-первых такие контролсы следует создавать в обработчике 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
}
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Ну WS_CHILD он внутри метода Create всё равно сделается, а вот на счёт парента - проморгал, каюсь 

Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
ПравильнЕе все делать самому
Спасибки!!!!!!! Огромные!!!!
Ща буду пробывать ... если что ... еще поспрашиваю ......
Ща буду пробывать ... если что ... еще поспрашиваю ......
Не ругается - уже хорошо .... но и не отображает его .... мдяяя .... буду еще че-нить делать ....
а rect у него правильный стоит ? может он за границей диалога рисуется
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Координаты rect'а ведь должны быть заданы в координатной системе парента, т.е. диалога, на котором лежит edit.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
RECT rect;
rect.bottom=50; rect.left=10; rect.right=60; rect.top=20;
Я так задаю ..... неужели не влезет? ... я так понимаю начало координат ведь в левом верхнем угле?
rect.bottom=50; rect.left=10; rect.right=60; rect.top=20;
Я так задаю ..... неужели не влезет? ... я так понимаю начало координат ведь в левом верхнем угле?