Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Обращение к свойствам объектов диалога.

7.7K
22 апреля 2005 года
Elder386
38 / / 06.04.2005
Извиняюсь, конечно, за ламерский вопрос, но все же:

Как в MFC проектах Visual C++ (из Microsoft Visual Studio .NET 2003) обращаться к каким-нибудь свойствам объектов диалогов (Dialog Based) из других объектов (в смысле, в обработчике сообщения от другого объекта)?

Например: в Borland C++ Builder, для того, чтобы какая-нибудь кнопка изменяла Label, достаточно в её OnClick написать, например, Form1->Label1->Caption = "Привет";

Как это же сделать в Visual C++ (если есть несколько вариантов, то желательно их указать).
Думаю, несложный вопрос. Заранее благодарю.
425
23 апреля 2005 года
sq_deep
498 / / 18.02.2005
Если как диалог, так и тот "другой" объект выполняются в одном потоке, то "другому объекту" надо передпть указатель на диалог. Тогда обращение к public членам класса диалога будет обычным для C:
pDlg->m_propSo_and_so;

Если "другой объект" — окно, то ещё в Windows принято обмениваться сообщениями, см. SendMessage() и PostMessage().
7.7K
24 апреля 2005 года
Elder386
38 / / 06.04.2005
Цитата:
Originally posted by sq_deep
надо передпть указатель на диалог


Нет, я неверно задал вопрос. Я имел ввиду это:
Где в классе диалога хранятся его объекты (типа: кнопка, текст…) и где вообще хранится диалог?
Вот, например, в редакторе диалога я создал кнопку Button1 (но имя у нее почему-то IDC_BUTTON1), затем создал Static (IDC_STATIC1). Далее, я нажал на Button1 два раза, и появилось:

 
Код:
void Cmy1Dlg::OnBnClickedButton1()
{
    // TODO: Add your control notification handler code here
}

Что тут надо писать для того, чтобы изменить текст в том Static???

В Borland C++ Builder все объекты хранятся в самом классе формы, которая является обычной переменной (вроде: Form1), и обращаться к ним можно так Form1->Label1->… Как это делать в Visual C++ , и где они хранятся? (возможно, по приведенному выше примеру, мне станет все понятно, так что лучше просто укажите сроку программы).
488
24 апреля 2005 года
Mоngооsе
465 / / 01.04.2005
Цитата:
Originally posted by Elder386

Что тут надо писать для того, чтобы изменить текст в том Static???


 
Код:
CWnd *pWnd = GetDlgItem(IDC_STATIC1);
  pWnd->SetWindowText("New text");
7.7K
24 апреля 2005 года
Elder386
38 / / 06.04.2005
Цитата:
Originally posted by Mоngооsе
 
Код:
CWnd *pWnd = GetDlgItem(IDC_STATIC1);
  pWnd->SetWindowText("New text");


Не работает. Пишет, что нету IDC_STATIC1 (error C2065: 'IDC_STATIC1' : undeclared identifier). Посмотрел, что IDC_STATIC1 равно 1000 и вставил вместо этого 1000. Ошибок нет, но ничего не меняется при нажатии!

7.7K
24 апреля 2005 года
Elder386
38 / / 06.04.2005
Цитата:
Originally posted by Mоngооsе
 
Код:
CWnd *pWnd = GetDlgItem(IDC_STATIC1);
  pWnd->SetWindowText("New text");


ОО! IDC_STATIC1 заменил на IDC_STATIC – заработало! Ну и почему у него в свойствах в name стоит IDC_STATIC1?
Все, теперь можно начинать делать анализатор речи :D.
Пасиба!

488
24 апреля 2005 года
Mоngооsе
465 / / 01.04.2005
Цитата:
Originally posted by Elder386
ОО! IDC_STATIC1 заменил на IDC_STATIC – заработало! Ну и почему у него в свойствах в name стоит IDC_STATIC1?
Все, теперь можно начинать делать анализатор речи :D.
Пасиба!

Как раз наоборот. Каждый static text получает автоматически IDC=IDC_STATIC. Поэтому если нужно получить этот элемент через GetDlgItem(), тогда необходимо дать ему уникальный IDC.
Кроме этого Class Wizard->Member Variables не отображает static text с IDC=IDC_STATIC. Т.е. если хочешь связать этот элемент с member variable, сперва нужно изменить его IDC.

7.7K
25 апреля 2005 года
Elder386
38 / / 06.04.2005
Цитата:
Originally posted by Mоngооsе
Кроме этого Class Wizard->Member Variables


В этой версии VisualC++ я, чего-то, никакого ClassWizard-а не нашел.

Цитата:
Originally posted by Mоngооsе
Т.е. если хочешь связать этот элемент с member variable, сперва нужно изменить его IDC.


Ну, изменил на IDC_STATIC1, и никакой разници не обнаружил: как небыло в классе диалога переменной Static1, так и нет, а GetDlgItem(IDC_STATIC1) работает также.

488
25 апреля 2005 года
Mоngооsе
465 / / 01.04.2005
Цитата:
Originally posted by Elder386
В этой версии VisualC++ я, чего-то, никакого ClassWizard-а не нашел.

Нужно назать на Ctrl-W и появится окно. Или же View->Class Wizard

Цитата:
Ну, изменил на IDC_STATIC1, и никакой разници не обнаружил: как небыло в классе диалога переменной Static1, так и нет, а GetDlgItem(IDC_STATIC1) работает также.

Переменная добавляется вручную. Через ClassWizard->Member Variables. Может быть двух типов: Control+CStatic или Value+CString. В этом случае лучше первый тип. И если дать имя переменной напр. m_stat, тогда в OnBnClickedButton1() достаточно написать m_stat->SetWindowText("New Text");

7.7K
25 апреля 2005 года
Elder386
38 / / 06.04.2005
Цитата:
Originally posted by Mоngооsе
Нужно назать на Ctrl-W и появится окно. Или же View->Class Wizard Переменная добавляется вручную. Через ClassWizard->Member Variables. Может быть двух типов: Control+CStatic или Value+CString.


В данной версии VisualC++(Microsoft Visual Studio .NET 2003) в меню View нет ClassWizard (это в 6-й версии был), а Ctrl-W – просто выделяет текущее слово в редакторе. Там есть Class View, в котором это все можно сделать. Но, все равно спасибо за подсказку. Я раньше не замечал там этого(про назначение члену ID).
Не знаю, стоит ли с этим всем разбираться. Когда читаю книгу, при очередной встрече слова “Microsoft”, у меня пропадает желание дальше читать. Но вот, читаю про Unix – душа радуется. Как там все логично и просто. Только, правда, времени нет. Жаль, так много его ушло на Microsoft (всякие, там, форточки и доси).

488
25 апреля 2005 года
Mоngооsе
465 / / 01.04.2005
В Net чуть по-другому. ClassView и Add Member variables.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог