Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Доступ к окну 
:(
    Опции темы
xTr1m
Дата 28.9.2005, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 692
Регистрация: 9.2.2005
Где: Москва

Репутация: нет
Всего: 1



Код

void CMyFrame::OnLButtonClick()
{
     this->SetWindowText("Text");
}



А если я хочу поменять название этого окна из другого окна? Насколько я понимаю, нужен указатель подобно this, но как его получить? Спаибо.
PM MAIL WWW ICQ   Вверх
Earnest
Дата 28.9.2005, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Смотря что такое CMyFrame.


Это сообщение отредактировал(а) Earnest - 28.9.2005, 17:54


--------------------
...
PM   Вверх
Dreamer_0x01
Дата 28.9.2005, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Терминатор
**


Профиль
Группа: Участник
Сообщений: 780
Регистрация: 14.4.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 12



точно так же.
это "родной" метод для CWnd. Если у тебя класс на каком-то этапе производный от него- точно так же и делаешь:

Твой_класс * твой_объяет;

твой_объект->SetWindowTest("new text");


--------------------
Нет ничего невозможного. Есть цели, и есть время и силы на их достижение.
PM ICQ   Вверх
xTr1m
Дата 28.9.2005, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 692
Регистрация: 9.2.2005
Где: Москва

Репутация: нет
Всего: 1



Во многих учебниках приведен такой код

Код

class CMyApp : public CWindApp
{
public :  BOOL InitInstance();
};


BOOL CMyApp::InitInstance()
{
m_pMainWnd = new CFrame(); // где CFrame производный от CFrameWnd
m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();
return TRUE;
}


Получается, что в самом начале создается окно без названия. И в методах этого окна я могу писать так : this->SetWindowText("text");
А если я хочу изменить его заголовок из другого окна/класса, то как мне к нему обратиться ????->SetWindowText("new");
PM MAIL WWW ICQ   Вверх
Earnest
Дата 28.9.2005, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Доступ к главному фрейму приложения:

CWnd* AfxGetMainWnd();

и все дела. Из любого места (за исключением другого потока).


--------------------
...
PM   Вверх
kometa_triatlon
Дата 28.9.2005, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 384
Регистрация: 7.1.2005
Где: Киев

Репутация: 1
Всего: 6



xTr1m
смотря что за окно и откуда.
Нужно сначала залезть в тот, класс, который знает об этом окне. В смысле, что там есть его обьявление.
Класс приложения получаешь через AfxGetApp(), класс фрейма уже сказали.
А вообще нужен конкретный пример.


--------------------
Всё очень просто: сказки обман,
Солнечный остров скрылся в туман,
Замков воздушных не носит земля,
Кто-то ошибся, ты или я.

--------------
Программирование - самое большое удовольствие, которое вы можете получить, будучи одетым.
PM MAIL ICQ   Вверх
takedo
Дата 29.9.2005, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 501
Регистрация: 1.6.2005

Репутация: нет
Всего: 3



есть еще очень хороший способ: семмага с WM_COPYDATA, передашь все что угодно. надо только знать HWND - есть такая функция ::GetSafeHwnd() - это HWND передаешь туда откуда посылаешь и посылаешь. получив указатель на фрейм можешь подставить его CFrame* a; a->GetSafeHwnd(); Только в окне где принимаешь надо предусмотреть обработчик WM_COPYDATA (OnCopyData). вот собственно и все... smile
Добавлено @ 13:21
не семмага, а мессага smile
Добавлено @ 13:22
Рихтер.


--------------------
я не гольфист - я хоккеист
PM MAIL   Вверх
Mad
Дата 29.9.2005, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

Репутация: 2
Всего: 19



Цитата(takedo @ 29.9.2005, 12:21)
WM_COPYDATA

Вобщем смысл правильный, только не надо так все усложнять, надо сразу слать WM_SETTEXT
(кстати метод CWnd::SetWindowText так и делает smile)


--------------------
user posted image
PM MAIL   Вверх
The Thing
Дата 30.9.2005, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 286
Регистрация: 6.9.2004

Репутация: 1
Всего: 3



просто передай окну Б, которое буде изменять заголовок окна, this окна А, у которого будет изеняться заголовок, или же его ОкноА_hWnd и тогда...

из окна Б:
Код

окноА->SetWindowText("Ля-ля-ля");

или
Код

::SetWindowText(ОкноА_hWnd, "Ля-ля-ля");



--------------------
Правильность работы программы зависит от двух велечин.
В нужном месте должны стоять нолик и еденичка.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0612 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.