Страница 1 из 2

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

Добавлено: 07 окт 2004, 06:33
sand
Собственно как создать глобальную переменную?
Мне нужно иметь доступ к ней отовсюду в проекте.
Помогите советом плизз... :roll:

Добавлено: 07 окт 2004, 09:32
Absurd
Добавь в stdafx.h строку

extern int globalVar;

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

int globalVar = 0;

Получишь переменную globalVar, инициализируемую нулем.

Добавлено: 07 окт 2004, 11:09
Kolinus
Можно еще во фрейме прописать - а к нему доступ отовсюду есть (если конечно окно с виндовым интерфейсом)

Добавлено: 07 окт 2004, 12:06
Romeo
в App классе, если проект MFC - это классический приём. Отовсюду можно будет написать AfxGetApp()->myVar. Если не MFC - то только с помощью extern.

Добавлено: 07 окт 2004, 12:13
Hup
Можно еще static приплести :)

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

#define GETAPP ((CmyApp)AfxGetApp())

Тогда обращение к переменной будет GETAPP->m_myVar.

Добавлено: 07 окт 2004, 12:51
sand
огромное спасибочки!!!!!

Добавлено: 07 окт 2004, 12:59
Romeo
господин Hup, хватит флэймить :) Static переменная является локальной для данного cpp файла. Static - есть противоположность extern.

Добавлено: 07 окт 2004, 13:24
sand
а имя документа можно через AfxGetApp достать? или для этого чего другое есть?

Добавлено: 19 окт 2004, 11:48
Acidy
имя какого документа? CDocument?
В производных от CFrameWnd это GetActiveDocument(), у CView это (CSomeDocument*)m_pDocument
Когда вызываешь GetActiveDocument() класса CFrameWnd в MDI приложении надо проверять на соответствие runtime класса, например
if (GetActiveDocument()->IsKindOf(RUNTIME_CLASS(CSomeDocument)))
{ AfxMessageBox("CSomeDocument is active");}