能力值:
( LV2,RANK:10 )
|
-
-
2 楼
我对MFC很晕菜,请大侠说详细点,谢谢
|
能力值:
( LV12,RANK:1010 )
|
-
-
3 楼
是不是模态对话框啊?
domal()成员函数就可以了吧...
|
能力值:
( LV12,RANK:1010 )
|
-
-
4 楼
给你一个WINDOWS程序设计上的关于创建模态和非模态的对话框代码吧,你看下就清楚了:
/********************************************************************************
* Name : 模态和非模态对话框.h
* Author : sudami
* Time : 2007/06/27
* Comment : 熟悉下模态和非模态对话框的不同之处
*******************************************************************************/
/////////////////////////////////////////////////////////////////////////////////
#include <afxwin.h>
////////////////////////////////////////////////////////////////////////////////
class CMyApp : public CWinApp
{
public:
virtual BOOL InitInstance ();
};
////////////////////////////////////////////////////////////////////////////////
class CMainWindow : public CWnd
{
public:
CMainWindow ();
protected:
// 2个子窗口控件 CButton
CButton m_btnModel;
CButton m_btnModeless;
// 从CWnd继承的,必须自己调用 delete this
virtual void PostNcDestroy ();
// 主窗体构造函数初始化完毕后,产生WM_CREATE消息,OnCreate函数来处理它
afx_msg BOOL OnCreate (LPCREATESTRUCT);
// 自定义的消息映射函数
afx_msg void OnModel ();
afx_msg void OnModeless ();
DECLARE_MESSAGE_MAP ()
};
////////////////////////////////////////////////////////////////////////////////
class CMyDialog : public CDialog
{
public:
CMyDialog (CWnd *pParentWnd = NULL);
BOOL m_bModeless;
protected:
// 建立对话框后必须初始化
virtual BOOL OnInitDialog ();
virtual void PostNcDestroy ();
// 这个有必要重载,模态和非模态对话框对待OnCancel还是不同的
virtual void OnCancel ();
// 自定义的消息映射函数
afx_msg void OnStart ();
DECLARE_MESSAGE_MAP ()
};
///////////////////// END---------OF-------FILE ///////////////////////////////
------------------------------------------------------
/********************************************************************************
* Name : 模态和非模态对话框.h
* Author : sudami
* Time : 2007/06/27
* Comment : 熟悉下模态和非模态对话框的不同之处
*******************************************************************************/
/////////////////////////////////////////////////////////////////////////////////
#include "resource.h"
#include "模态和非模态对话框.h"
/////////////////////////////////////////////////////////////////////////////////
CMyApp theApp;
BOOL CMyApp::InitInstance ()
{
m_pMainWnd = new CMainWindow;
m_pMainWnd->ShowWindow (m_nCmdShow);
m_pMainWnd->UpdateWindow ();
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////////
#define IDC_MODEL 10
#define IDC_MODELESS 11
////////////////////////////////////////////////////////////////////////////////
///// /////////
//// * 主窗体模块 * /////////
//// * 初始化,显示用户操作的窗体 * /////////
//// /////////
////////////////////////////////////////////////////////////////////////////////
CMainWindow::CMainWindow ()
{
// 注册窗口
LPCTSTR lpszClassName = AfxRegisterWndClass (CS_HREDRAW | CS_VREDRAW,
::LoadCursor (NULL, IDC_ARROW),(HBRUSH)(COLOR_3DFACE + 1));
// 创建窗口
CreateEx (WS_EX_CLIENTEDGE, lpszClassName, "框架程序创建的窗口 by: sudami",
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL );
}
////////////////////////////////////////////////////////////////////////////////
BEGIN_MESSAGE_MAP (CMainWindow, CWnd)
ON_WM_CREATE ()
ON_COMMAND (IDC_MODEL, OnModel)
ON_COMMAND (IDC_MODELESS, OnModeless)
END_MESSAGE_MAP ()
//////////////////////////////////////////////////////////////////////////////////
BOOL CMainWindow::OnCreate (LPCREATESTRUCT lpCreateStruct)
{
// 也没别的,就是创建2个按钮
m_btnModel.Create ("模态对话框", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
CRect (60,36,180,72), this, IDC_MODEL);
m_btnModeless.Create ("非模态对话框", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
CRect (236,36,356,72), this, IDC_MODELESS);
return TRUE;
}
//////////////////////////////////////////////////////////////////////////////////
// 如果点击了 "模态对话框"的按钮,就弹出模态对话框
void CMainWindow::OnModel ()
{
CMyDialog dlg (this);
dlg.DoModal ();
}
/////////////////////////////////////////////////////////////////////////////////
// 如果点击了 "非模态对话框"的按钮,就构造非模态对话框
void CMainWindow::OnModeless ()
{
CMyDialog *pDlg = new CMyDialog (this);
// 创建无模式对话框
pDlg->Create (IDD_DIALOG);
// 移动窗口到窗口中央
pDlg->CenterWindow ();
// 显示更新窗口
pDlg->ShowWindow (SW_NORMAL);
pDlg->UpdateWindow ();
}
////////////////////////////////////////////////////////////////////////////////
void CMainWindow::PostNcDestroy ()
{
delete this;
}
////////////////////////////////////////////////////////////////////////////////
///// /////////
//// * 对话框模块 * /////////
//// * 就是初始化,显示用户单击按钮后的窗体,没什么特别的 * /////////
//// /////////
////////////////////////////////////////////////////////////////////////////////
CMyDialog::CMyDialog (CWnd *pParentWnd):CDialog(IDD_DIALOG, pParentWnd)
{
m_bModeless = FALSE;
}
////////////////////////////////////////////////////////////////////////////////
BEGIN_MESSAGE_MAP (CMyDialog, CDialog)
ON_BN_CLICKED (IDC_START, OnStart)
END_MESSAGE_MAP ()
////////////////////////////////////////////////////////////////////////////////
// 初始化对话框
BOOL CMyDialog::OnInitDialog ()
{
CDialog::OnInitDialog ();
SetWindowText ("框架程序窗口的对话框");
return TRUE;
}
///////////////////////////////////////////////////////////////////////////////
// 用户关闭对话框
void CMyDialog::OnCancel ()
{
// 如果要关闭的是非模态的对话框,必须调用DestroyWindow 函数来销毁
if (m_bModeless)
DestroyWindow ();
// 如果要关闭的是模态的对话框,直接让它的父类处理就行
else
CDialog::OnCancel ();
}
//////////////////////////////////////////////////////////////////////////////
void CMyDialog::OnStart ()
{
MessageBox ("running...");
}
void CMyDialog::PostNcDestroy ()
{
if (m_bModeless)
delete this;
}
|
能力值:
( LV5,RANK:60 )
|
-
-
5 楼
楼主说的应该就是模态对话框了。
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
普通的模态对话框只是对自身程序起作用.
我需要的是对系统起作用的模态对话框.
不知道这样行不行:将桌面作为这个模态对话框的父进程,这样的话,如果对话框不返回,也回不到桌面.
有这个想法,可是不会实现,大侠指点一二...
MFC封装得俺找不着北,,,,
|
|
|