2016-09-29 3 views
1

私はモダリティの子ダイアログを持っています。リソースプロパティでは、可視フラグがtrueに設定されています(リソースプロパティでの自分の要件に応じて、visibleフラグがtrueになるはずです)。最初に隠されたモダリティダイアログを表示

最初に表示している間、プログラムでダイアログを非表示にしたいとします。

私はpresubclasswindowをオーバーライドし、コードの下に使用してWS_VISIBLEフラグを削除したが、ダイアログが隠された取得されていません。

void CAddressChildDlg::PreSubclassWindow() 
{ 
    CWnd::PreSubclassWindow(); 
    if (::IsWindow(m_hWnd)) 
    { 
     LONG lStyle = GetWindowLong(m_hWnd, GWL_STYLE); 
     lStyle &= ~WS_VISIBLE; 
     SetWindowLong(m_hWnd, GWL_STYLE, lStyle); 
    } 
} 

誰もがあなたが望むものでは明らかではないが、私は私の要件

+2

** ShowWindow(hWnd、SW_HIDE); **それを行う必要があります。詳細については、[リンク](https://msdn.microsoft.com/en-us/library/ms632599(VS.85).aspx#message_only)を参照してください。 – Tushar

+0

@Tushar:メッセージ専用ウィンドウの機能この質問に役立つでしょうか? – IInspectable

+0

OnInitdialogでShowWindow(hWnd、SW_HIDE)を呼び出すと、ダイアログが非表示になることはありません。 – sujitha

答えて

0

またON_WM_WINDOWPOSCHANGING

class CMyDialog : public CDialog 
{ 
public: 
    bool m_override_showwindow; 
    //initialize somewhere ... 

    void OnWindowPosChanging(WINDOWPOS* wpos) 
    { 
     if (m_override_showwindow) 
      wpos->flags &= ~SWP_SHOWWINDOW; 
     CDialog::OnWindowPosChanging(wpos); 
    } 
    DECLARE_MESSAGE_MAP() 
    ...  
}; 

BEGIN_MESSAGE_MAP(CMyDialog, CDialog) 
    ON_WM_WINDOWPOSCHANGING() 
    ... 
END_MESSAGE_MAP() 

あなたはそれがダイアログを表示したくない場合にのみ、このオーバーライドを有効に上書きすることができます。オーバーライドを無効にしないと、ダイアログが表示されません。

dlg.m_override_showwindow = true; 
dlg.Create(...); 
dlg.m_override_showwindow = false; 

MessageBox(L"Test..."); 
dlg.ShowWindow(SW_SHOW); 
+0

ありがとうBarmak、それは私のために働いています。 – sujitha

1

を達成するために助けてください。あなたのタイトルは、最初にダイアログを非表示にしたいと言っています。最初に表示され、次に非表示にしたいという質問のテキストが表示されます。それをしている/

があなたの要件とはどういう意味ですかは、ダイアログスタイルがWS_VISIBLEなければならないと述べています。最初に表示させたくない場合は、フラグを含めないでください。モードレスダイアログの

、モーダルダイアログは、通常、スタック上に作成されているのに対し、一般的には、ヒープ上に作成します。

CYourDialog* pDlg = new CYourDialog(... and whatever arguments); 
pDlg->Create(CYourDialog::IDD); // or whatever the ID is... 
pDlg->ShowWindow(SW_NORMAL); // shows window if it was invisible... 
pDlg->ShowWindow(SW_HIDE); // hides window if it was visible... 
+0

重要な違いは、*ヒープ*と*スタック*の間ではなく、*動的記憶期間*と*自動記憶期間*の間にあることです。 – IInspectable

関連する問題