-1

私はGUIプログラミングが初めてです。Visual Studio (C++) を使用しています。私が聞きたかったのは、ダイアログ ボックスがメイン ウィンドウから起動されたときに、親ウィンドウを非表示にする方法はありますか? また、ダイアログ ボックスを終了するときにウィンドウを再表示する方法を教えてください。

4

2 に答える 2

2

ウィンドウが不可解に消え始めると、ユーザーが混乱する可能性があるため、あなたが求めているのはあまり良いUIデザインではありません。

おそらくあなたがしようとしているのは、ユーザーの注意をダイアログ ボックスに向けさせ、メイン ウィンドウに戻る前に強制的に使用させることです。これは、ダイアログ ボックスをモーダル ダイアログ ボックスにすることで既に達成されています。ダイアログとウィンドウには違いがあることに注意してください。ダイアログは、親ウィンドウでの入力を許可しません。

于 2013-10-04T16:08:45.297 に答える
-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);
于 2013-10-04T16:06:09.813 に答える