Страница 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;

Я так задаю ..... неужели не влезет? ... я так понимаю начало координат ведь в левом верхнем угле?