Глобальная переменная в MFC проекте? КАК?

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

sand
Сообщения: 12
Зарегистрирован: 03 окт 2004, 02:46

07 окт 2004, 06:33

Собственно как создать глобальную переменную?
Мне нужно иметь доступ к ней отовсюду в проекте.
Помогите советом плизз... :roll:
Absurd
Сообщения: 1213
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

07 окт 2004, 09:32

Добавь в stdafx.h строку

extern int globalVar;

а в каком-нибудь cpp файле напиши

int globalVar = 0;

Получишь переменную globalVar, инициализируемую нулем.
2B OR NOT(2B) = FF
Kolinus
Сообщения: 449
Зарегистрирован: 23 авг 2004, 14:02
Откуда: Минск

07 окт 2004, 11:09

Можно еще во фрейме прописать - а к нему доступ отовсюду есть (если конечно окно с виндовым интерфейсом)
В SAD - все в SAD.
Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

07 окт 2004, 12:06

в App классе, если проект MFC - это классический приём. Отовсюду можно будет написать AfxGetApp()->myVar. Если не MFC - то только с помощью extern.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Hup
Сообщения: 207
Зарегистрирован: 05 мар 2004, 05:31
Откуда: Владивосток
Контактная информация:

07 окт 2004, 12:13

Можно еще static приплести :)
Усложнять - легко, упрощать - сложно
Sq
Сообщения: 3
Зарегистрирован: 07 окт 2004, 12:10
Контактная информация:

07 окт 2004, 12:18

Согласен с Romeo. Это решение в наибольшей степени соответствует идеологии MFC. Для ссылок надо, конечно, преобразовывать тип: ((CmyApp)AfxGetApp())->m_myVar. Я для этого пишу макро что-то вроде

#define GETAPP ((CmyApp)AfxGetApp())

Тогда обращение к переменной будет GETAPP->m_myVar.
sand
Сообщения: 12
Зарегистрирован: 03 окт 2004, 02:46

07 окт 2004, 12:51

огромное спасибочки!!!!!
Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

07 окт 2004, 12:59

господин Hup, хватит флэймить :) Static переменная является локальной для данного cpp файла. Static - есть противоположность extern.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
sand
Сообщения: 12
Зарегистрирован: 03 окт 2004, 02:46

07 окт 2004, 13:24

а имя документа можно через AfxGetApp достать? или для этого чего другое есть?
Acidy
Сообщения: 23
Зарегистрирован: 19 окт 2004, 10:40
Откуда: хз
Контактная информация:

19 окт 2004, 11:48

имя какого документа? CDocument?
В производных от CFrameWnd это GetActiveDocument(), у CView это (CSomeDocument*)m_pDocument
Когда вызываешь GetActiveDocument() класса CFrameWnd в MDI приложении надо проверять на соответствие runtime класса, например
if (GetActiveDocument()->IsKindOf(RUNTIME_CLASS(CSomeDocument)))
{ AfxMessageBox("CSomeDocument is active");}
Удачи... =)
Ответить