Обращение к свойствам объектов диалога.
Как в MFC проектах Visual C++ (из Microsoft Visual Studio .NET 2003) обращаться к каким-нибудь свойствам объектов диалогов (Dialog Based) из других объектов (в смысле, в обработчике сообщения от другого объекта)?
Например: в Borland C++ Builder, для того, чтобы какая-нибудь кнопка изменяла Label, достаточно в её OnClick написать, например, Form1->Label1->Caption = "Привет";
Как это же сделать в Visual C++ (если есть несколько вариантов, то желательно их указать).
Думаю, несложный вопрос. Заранее благодарю.
pDlg->m_propSo_and_so;
Если "другой объект" — окно, то ещё в Windows принято обмениваться сообщениями, см. SendMessage() и PostMessage().
надо передпть указатель на диалог
Нет, я неверно задал вопрос. Я имел ввиду это:
Где в классе диалога хранятся его объекты (типа: кнопка, текст…) и где вообще хранится диалог?
Вот, например, в редакторе диалога я создал кнопку Button1 (но имя у нее почему-то IDC_BUTTON1), затем создал Static (IDC_STATIC1). Далее, я нажал на Button1 два раза, и появилось:
{
// TODO: Add your control notification handler code here
}
Что тут надо писать для того, чтобы изменить текст в том Static???
В Borland C++ Builder все объекты хранятся в самом классе формы, которая является обычной переменной (вроде: Form1), и обращаться к ним можно так Form1->Label1->… Как это делать в Visual C++ , и где они хранятся? (возможно, по приведенному выше примеру, мне станет все понятно, так что лучше просто укажите сроку программы).
Что тут надо писать для того, чтобы изменить текст в том Static???
pWnd->SetWindowText("New text");
pWnd->SetWindowText("New text");
Не работает. Пишет, что нету IDC_STATIC1 (error C2065: 'IDC_STATIC1' : undeclared identifier). Посмотрел, что IDC_STATIC1 равно 1000 и вставил вместо этого 1000. Ошибок нет, но ничего не меняется при нажатии!
pWnd->SetWindowText("New text");
ОО! IDC_STATIC1 заменил на IDC_STATIC – заработало! Ну и почему у него в свойствах в name стоит IDC_STATIC1?
Все, теперь можно начинать делать анализатор речи :D.
Пасиба!
ОО! 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.
Кроме этого Class Wizard->Member Variables
В этой версии VisualC++ я, чего-то, никакого ClassWizard-а не нашел.
Т.е. если хочешь связать этот элемент с member variable, сперва нужно изменить его IDC.
Ну, изменил на IDC_STATIC1, и никакой разници не обнаружил: как небыло в классе диалога переменной Static1, так и нет, а GetDlgItem(IDC_STATIC1) работает также.
В этой версии VisualC++ я, чего-то, никакого ClassWizard-а не нашел.
Нужно назать на Ctrl-W и появится окно. Или же View->Class Wizard
Переменная добавляется вручную. Через ClassWizard->Member Variables. Может быть двух типов: Control+CStatic или Value+CString. В этом случае лучше первый тип. И если дать имя переменной напр. m_stat, тогда в OnBnClickedButton1() достаточно написать m_stat->SetWindowText("New Text");
Нужно назать на 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 (всякие, там, форточки и доси).