2013-10-04 2 views
-1

Я новичок в программировании GUI. Я использую Visual Studio (C++). Я хотел спросить: есть ли способ сделать родительское окно невидимым при запуске диалогового окна из главного окна? Также, как сделать окно снова появляться при выходе из диалогового окна?Изменение видимости графического интерфейса с использованием C++

+3

Речь идет не о C++ в целом, а о Win32 (и потенциально MFC). Он также не демонстрирует попыток решить проблему. –

ответ

-1

Предполагая, что вы используете MFC и модальный диалог, то вы можете сделать следующее:

mainWindow.ShowWindow(SW_HIDE); 
dialog.DoModal(); 
mainWindow.ShowWindow(SW_SHOW); 

Относительно комментарии, здесь немодальное решение:

YourDialog. h

class YourDialog : public CDialog { 
    CWnd& _mainWindowToHide; 
protected: 
    DECLARE_MESSAGE_MAP(); 
    void OnShowWindow(BOOL bShow, UINT nStatus); 
    virtual void OnOK(); 
    virtual void OnCancel(); 
public: 
    YourDialog(CWnd& mainWindowToHide); 
}; 

YourDialog.cpp

BEGIN_MESSAGE_MAP(YourDialog, CDialog) 
    ON_WM_SHOWWINDOW() 
END_MESSAGE_MAP() 

YourDialog::YourDialog(CWnd& mainWindowToHide) 
    : _mainWindowToHide(mainWindowToHide) { } 

void YourDialog::OnShowWindow(BOOL bShow, UINT nStatus) { 
    if(bShow == TRUE) 
     _mainWindowToHide.ShowWindow(SW_HIDE); 
    CDialog::OnShowWindow(bShow, nStatus); 
} 

void YourDialog::OnOK() { 
    _mainWindowToHide.ShowWindow(SW_SHOW); 
    CDialog::OnOK(); 
} 

void YourDialog::OnCancel() { 
    _mainWindowToHide.ShowWindow(SW_SHOW); 
    CDialog::OnCancel(); 
} 

Где бы вы хотите использовать это:

dialogMember = new YourDialog(mainWindow); 
dialogMember->Create(IDD_YOUR_DIALOG); 
dialogMember->ShowWindow(SW_SHOW); 
+0

Это не делает то, что вы думаете. Если вы скрываете окно, это также скрывает все принадлежащие окну. – IInspectable

+0

Ну, кто говорит, что диалог принадлежит родительскому окну? – RazorX

+0

Вы назвали 'DoModal'. Это подразумевает модальный диалог. Модальный диалог без окна владельца не имеет большого смысла. И так как это называется 'parentWindow', было бы довольно далеко сказать, что это не так. – IInspectable

2

Что вы просите сделать, это не очень хороший дизайн пользовательского интерфейса, так как это может привести к путанице для пользователя, когда окна необъяснимо начинают исчезать.

Что вы, вероятно, пытаетесь сделать, это привлечь внимание пользователя к диалоговому окну и заставить их использовать его, прежде чем возвращать их в главное окно. Это уже достигнуто, сделав диалоговое окно модальным диалоговым окном - обратите внимание, что существует различие между диалогом и окном. Диалоговое окно не позволяет вводить данные в родительском окне.

+2

Диалоговое окно ** modal ** не позволяет пользователю вводить в родительском окне. Диалоговое окно ** modeless ** будет. –

+0

Хочет написать то же самое, но здесь [ссылка] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms644996 (v = vs.85) .aspx) для уточнения. – RazorX

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