void CMy30Dlg::OnBnClickedOk()
{
[COLOR=red]CDg[/color] D;
D.DoModal();
Диалоги
CDialog D(IDD_DIALOG1);
D.GetDlgItem(IDC_STATIC)->SetWindowTextW(_T("gfdgfd"));
OnIDC_BUTTON1()
{
GetDlgItem(IDC_STATIC)->SetWindowText(_T("gfdgfd"));
}
OnIDC_BUTTON1()
{
GetDlgItem(IDC_STATIC)->SetWindowText(_T("gfdgfd"));
}[/QUOTE]
void CDg::OnBnClickedButton1()
{
GetDlgItem(IDC_STATIC)->SetWindowTextW(_T("gfdgfd"));
}
//------ Вот так что-ли? ----------------------------->
void CDg::OnIDC_BUTTON1()
{
GetDlgItem(IDC_STATIC)->SetWindowTextW(_T("gfdgfd"));
}
1) Если так то не работает, ничего не изменилось.
2) А в чем сама идея?
(точнее, найдется первый из этих contol-ов) По умолчанию Wizard каждому Static Text присваивает это значение.
Измени его например на IDC_STATIC2 и
GetDlgItem(IDC_STATIC2)->SetWindowText(_T("gfdgfd"));
Я знаю про это, там один статик и открывая диалог через Create() все работает а через DoModal() ..., че только не перепробовал нихрена не получается.
Пока диалоговое окно не закрылось, управление остается у него.
Код D.GetDlgItem(IDC_STATIC)->SetWindowTextW(_T("gfdgfd"));
выполняется только после закрытия диалогового окна.
Можно определить какую-то public переменную в диалоговом окне. Напр.
CString str;
в основном модуле:
CDg D;
D.str = _T("gfdgfd");
D.DoModal();
И определить обработчик OnInitDialog() для диалогового окна и записать
в него
GetDlgItem(IDC_STATIC)->SetWindowText(str);
2)какого ты юзаеш SetWindowTextW?? SetWindowText!!
3)Мerlin - обработчик нажатия на кнопку будет вызыватся как раз когда окно активно (даже через DoModal)
[QUOTE=Alexandoros]3)Мerlin - обработчик нажатия на кнопку будет вызыватся как раз когда окно активно (даже через DoModal)[/QUOTE]Если я правильно понял, то кнопка находится не на том окне, на которой находится static text. См. 1 пост.
Поэтому я и не понимаю в чем проблема (кнопка и статик оба находятся на модальном окне). Поидее обращение к элементам должно быть одинаковы как через Create() так и через DoModal(). См. 5 пост
[QUOTE=bnm]Поэтому я и не понимаю в чем проблема (кнопка и статик оба находятся на модальном окне). Поидее обращение к элементам должно быть одинаковы как через Create() так и через DoModal(). См. 5 пост[/QUOTE]Переименуй IDC_STATIC на что-то другое.
Пробовал
Можешь выложить проект?
Нет, мучаюсь. :(
[QUOTE=Мerlin]Можешь выложить проект?[/QUOTE]
http://sources.codenet.ru/file/1124/DoModal.rar
http://sources.codenet.ru/file/1124/DoModal.rar[/QUOTE]
Чёт не понял, в каком месте тебе нужно вставить вызов SetWindowText? Укажи файл, номер строки; или лучше - класс, метод. Или объясни суть понятнее.
[QUOTE=bnm]
Чёт не понял, в каком месте тебе нужно вставить вызов SetWindowText? Укажи файл, номер строки; или лучше - класс, метод. Или объясни суть понятнее.
Код:
И в файле Dg.cpp из первой ф-ии лучше убрать
m_hIcon = AfxGetApp()->LoadIcon(IDD_DIALOG1);
Ты удалил определение m_hIcon из h файла. Да и
иконки IDD_DIALOG1 нет.
И почему-то твой проект компилируется только
на Ctrl+Alt+F7.
И в файле Dg.cpp из первой ф-ии лучше убрать
m_hIcon = AfxGetApp()->LoadIcon(IDD_DIALOG1);
[/QUOTE]
Это я экпериментировал, забыл удалить
[QUOTE=Мerlin]
Ты удалил определение m_hIcon из h файла. Да и
иконки IDD_DIALOG1 нет.
[/QUOTE]
Может его как-то создавать надо?
[QUOTE=Мerlin]
И почему-то твой проект компилируется только
на Ctrl+Alt+F7.
[/QUOTE]
У меня стоит VS2005, наверно из-за этого.
А у тебя чето получилось?
Окно было неправильно определено.
CDialog D(IDD_DIALOG1);
нужно заменить на
CDg D;
Все зашибись, работает!!! А в чем разница, ведь CDialog D(IDD_DIALOG1) - конструктор, который создает объект для работы с диалогом?
Из-за IDD_DIALOG1 он только внешне смотрится как CDg окно.
Вобщем берется только шаблон.
А как изменить кэпшн статика на главном окне из модального (нажав на Button1)?
wnd->SetWindowTextW(_T("ghgjh"));