首页
社区
课程
招聘
[求助]MFC基于对话框模式的程序窗口设置
发表于: 2007-7-2 16:37 8609

[求助]MFC基于对话框模式的程序窗口设置

2007-7-2 16:37
8609
想把这个对话框窗口设置为:
能独立系统控制权,现象是在窗口外点击鼠标,该窗口标题条就闪动2下。点任务栏都不行,非得完成对话框窗口后才行...

请教怎样实现啊?

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 242
活跃值: (112)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
我对MFC很晕菜,请大侠说详细点,谢谢
2007-7-2 16:38
0
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
3
是不是模态对话框啊?

domal()成员函数就可以了吧...
2007-7-2 22:23
0
雪    币: 709
活跃值: (2420)
能力值: ( 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;
}
2007-7-2 22:28
0
雪    币: 216
活跃值: (12)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
5
楼主说的应该就是模态对话框了。
2007-7-4 15:07
0
雪    币: 242
活跃值: (112)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
普通的模态对话框只是对自身程序起作用.

我需要的是对系统起作用的模态对话框.

不知道这样行不行:将桌面作为这个模态对话框的父进程,这样的话,如果对话框不返回,也回不到桌面.
有这个想法,可是不会实现,大侠指点一二...

MFC封装得俺找不着北,,,,
2007-7-5 17:52
0
游客
登录 | 注册 方可回帖
返回
//