MFC创建非模式对话框
非模式对话框常常感到困惑的新手程序员。基本上是一个非模式对话框是一个使我们能够互动,与其他的Windows ,甚至当非模式对话框仍然是在屏幕上。如果您请记住,几个漂亮的小动作,然后编程非模式对话框,将非常简单。
步骤/方法
- 01
简单的方法创建一个非模式对话框是使用Create() 。通过名称的对话框中的模板资源和一个可选的CWnd*这点,向父窗口。如果您不通过一个父窗口指针的主要应用程序窗口将被作为父窗口。 Create()将返回true如果调用是成功的。
- 02
自Create()立即传回,不像DoModal() , you must never declare your modeless dialog as a local variable与范围及寿命只有功能函数的地方,这是申明。而不是分配非模式对话框就堆。如果你不这样做,非模式对话框会被销毁时刻,你退出功能函数,使你申明它。
- 03
另一种解决办法是要申明您的非模式对话框作为一个堆的成员对象你的主要框架窗口或您的CWinApp派生类。一的优势,用此方法是,你实际上有控件权的非模式对话框,由于你有一个指针。
- 04
由的方式不同,非模式对话框,非模式对话框需要有WS_VISIBLE风格设置如果你不想让他们看见后,立即进行创作。否则,你就会有明确要求ShowWindow()与SW_SHOW 。事实上,我建议您这样做,而不是去所有的地方,改变默认的风格。 CModeLess *m_pmodeless = new CModeLess(this); m_pmodeless->Create(CModeLess::IDD); m_pmodeless->ShowWindow(SW_SHOW);
- 05
父问题 惯常的做法是使父窗口的主窗口对您的应用程序,这是典型的主框架窗口。现在的一个问题是与这是因为非模式对话框,将继续留在上方的这父窗口。它可以让您的互动与主框架窗口,或许它还包含一个CView得出的视图。但它可能是恼人的和不可取的有非模式对话框留在顶端。该解决方案在这里是创建非模式对话框作为一个子的桌面上。使用GetDesktopWindow()得到一个指针到桌面上,并通过表示,由于父窗口为非模式对话框,在您的调用Create() 。 m_pmodeless->Create(CModeLess::IDD,GetDesktopWindow());