2012-07-19 2 views
0
class MyApp : public CWinApp { 
     afx_msg OnPrefrences(); 
    }; 

OnPrefrences() вызывается, когда пользователь выбирает инструменты-> Предпочтение из строки меню.Обмен переменной среди экземпляров классов

Теперь в одном диалоговом окне (Скажем DlgX) есть одна кнопка, при нажатии на это мне нужно открыть диалоговое окно «Предпочтения», в котором на самом деле много панелей, но здесь мне нужно открыть диалоговое окно «Предпочтения», выбрав один из них: активный. Также в этой конкретной области мне нужно скрыть некоторые элементы управления только тогда, когда она откроется через это диалоговое окно, а не через меню.

Итак, я создал одну переменную (Say m_varX) в классе MainFrm.

void DlgX::OnButtonXClick() 
{ 
    CMainFrame* pFrame = (CMainFrame*)AfxGetMainWnd(); 
    if(pFrame) 
    { 
     pFrame->m_varX = TRUE; 
     ((CMyApp*)(AfxGetApp()))->OnPrefrences(); 
     pFrame->m_varX = FALSE; 
    } 
} 

А кнопки обработчик DlgX Я сделал это m_varX ИСТИНА и вызовите OnPreference() и после закрытия этого диалога предпочтений я сделал m_varX FALSE.

Все это работает нормально ... Но проблема в том, что в mainFrm все становится беспорядочным. Кроме того, проект, над которым я работаю, является устаревшим, поэтому я не могу внести существенных изменений.

Есть ли какие-либо инструменты для обработки такого случая?

Благодаря

ответ

1

вы могли бы решить эту проблему с помощью диалога на заказ (если вы не имеете его уже)

когда вы вызываете окно из главного меню, т.е. onPreferences() вы заполняете и показать все «стекла». вам нужно будет сделать собственное диалоговое окно, где ctor принимает некоторые аргументы

например.

enum { all, part }; 

void MainFrame::OnPreferences() 
{ 
    CMyPreferences dlg(GetDocument(), all); 
    dlg.DoModal(); 
} 

, но когда вы вызываете его из диалогового окна, вы заполняете только те детали, которые вам нужны.

void YourDialog::OnPreferences() 
{ 
    CMyPreferences dlg(GetDocument(), part); 
    dlg.doModal(); 
} 

аргумент может быть чем-то более сложным для более точной настройки того, что показывать/разрешать редактирование.

+0

okay спасибо, что сделаем! Лучше изменить его как, это то, что я делаю void OnPreferences (BOOL bShowAll = TRUE); Мне интересно, если MFC предоставляет некоторые классы utils как вещь ... – dearvivekkumar

1

Я думаю, для этого особого случая, даже если иногда не более считается шаблон, то singleton pattern будет работать для вас.

Смежные вопросы