Каким образом переменная может быть доступна во всех диалогах проекта с использованием MFC? - PullRequest
0 голосов
/ 02 июля 2010

Я сделал диалог открытия файла, он содержит элемент управления редактирования, переменная которого «путь», который содержит имя файла. я хочу использовать значение этой переменной в других диалоговых окнах, но это дает ошибку, что «путь» является идентификатором undeclard. Я объявляю путь, щелкнув правой кнопкой мыши по элементу управления edit, добавив переменную типа CString. переменная пути получает значение по этому коду

class CAboutDlg : public CDialog
{
public:    
CAboutDlg();    
static CString imgname;

в том же классе, я использовал это так

CString image=CAboutDlg::imgname; 
CString szFilename(image);

и передача значения пути по этому коду

path=dlg.GetPathName();
UpdateData(FALSE);
CAboutDlg::imgname=path;

но все равно выдает ошибку, что CAboutDlg и imgname являются необъявленным идентификатором в вышеприведенном коде, в котором передается значение пути. я сделал то же самое, что узнал с сайта, что с этим не так? Пожалуйста, скажите rwong

Ответы [ 2 ]

2 голосов
/ 02 июля 2010

Перед закрытием диалога передайте этот «путь» обратно в CWinApp (путем реализации функций Get / Set в CWinApp)

Ваш основной класс, производный от CWinApp, по сути является «глобальным»msgstr "класс (статический класс или синглтон).Все, что вы хотите поместить в глобальные переменные, можно вместо этого поместить в производный от CWinApp класс.Переменные могут быть защищены мьютексом, а слушатели, подписчики и т. Д. Могут быть реализованы с использованием этого класса в качестве центрального основания.

0 голосов
/ 02 июля 2010

Попробуйте:

CFileDialog dlg(TRUE);
int result=dlg.DoModal();
if(result==IDOK)
{
    path.SetWindowText( dlg.GetPathName() );
    UpdateData(FALSE);
}

Вы не можете назначить строку для Ctrl редактирования. Вы должны установить текст, хранящийся внутри элемента управления редактирования.

Edit:

Вы определяете это в своем классе.

 static CString imgname;

Вам также нужно определить статику в одном месте (то есть не делать это в заголовке). то есть в связанный cpp-файл (и вне определения класса) вы добавите:

CString CAboutDlg::imgname;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...