0
点赞
收藏
分享

微信扫一扫

非模态对话框,自己关掉自己

Sikj_6590 2022-03-11 阅读 63

 用非模态对话框显示提示信息,自动定时关闭,时间可调.代码可以直接使用

一:创建对话框及绑定类

 

 就这样的  STATIC 控件 ID   改成IDC_STATIC_TIP,

对话框本身ID改成IDD_DIALOG_TIP,这样的话你可以直接复制下面代码使用

对话框.h文件

//TipDlg.h文件
#pragma once
class CTipDlg : public CDialogEx
{
	DECLARE_DYNAMIC(CTipDlg)

public:
	CTipDlg(CString mStrTip=_T(""),UINT mDelayTime=0,CWnd* pParent = NULL);   // 标准构造函数
	virtual ~CTipDlg();

// 对话框数据
	enum { IDD = IDD_DIALOG_TIP };
private:
	CString strTip;
	UINT uDelayTime;
protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持

	DECLARE_MESSAGE_MAP()
public:
	afx_msg void OnClose();
	virtual BOOL OnInitDialog();
	afx_msg void OnTimer(UINT_PTR nIDEvent);
	void SetNewInfoMation(CString mTip,UINT mDelayTime=0);
};

 对话框.cpp文件

//TipDlg.cpp

#include "stdafx.h"
#include "MainDLg.h"
#include "TipDlg.h"

IMPLEMENT_DYNAMIC(CTipDlg, CDialogEx)

CTipDlg::CTipDlg(CString mStrTip/*=_T("")*/,UINT mDelayTime/*=0*/,CWnd* pParent /*=NULL*/)
	: CDialogEx(CTipDlg::IDD, pParent)
{
	strTip=mStrTip;
	uDelayTime=mDelayTime;
}

CTipDlg::~CTipDlg()
{
}

void CTipDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
}


BEGIN_MESSAGE_MAP(CTipDlg, CDialogEx)
	ON_WM_TIMER()
    ON_WM_CLOSE()
END_MESSAGE_MAP()

BOOL CTipDlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();
	SetDlgItemText(IDC_STATIC_TIP,strTip);
	SetTimer(0,uDelayTime,NULL);
	ShowWindow(SW_SHOW);
	return TRUE;  
}

void CTipDlg::OnTimer(UINT_PTR nIDEvent)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	if(nIDEvent==0)
	{
		KillTimer(0);
		PostMessage(WM_CLOSE);
	}
	CDialogEx::OnTimer(nIDEvent);
}

void CTipDlg::SetNewInfoMation(CString mTip,UINT mDelayTime)
{
	KillTimer(0);
	uDelayTime=mDelayTime;
	strTip=mTip;
	SetDlgItemText(IDC_STATIC_TIP,strTip);
	SetTimer(0,uDelayTime,NULL);
}

void CTipDlg::OnClose()
{
	CDialogEx::OnClose();
	strTip=_T("");
	uDelayTime=0;
    DestroyWindow();
	delete this;
	mTipdlg=NULL;
} 

二.使用

1.定义全局变量

我在XXXApp类里定义的,并定义了全局函数ShowTip

//XXX.cpp文件
#include "stdafx.h"
#include "XXX.h"
#include "XXXDlg.h"

CTipDlg* mTipdlg;
void ShowTip(CString mStrTip,UINT mDelayTime);
void ShowTip(string mStrTip,UINT mDelayTime);
void ShowTip(CString mStrTip,UINT mDelayTime)
{
	if(mTipdlg)
	{
		mTipdlg->SetNewInfoMation(mStrTip,mDelayTime);
		mTipdlg->UpdateData(FALSE);
		mTipdlg->UpdateWindow();

	}else
	{
		mTipdlg=new CTipDlg(mStrTip,mDelayTime);
		mTipdlg->Create(IDD_DIALOG_TIP,AfxGetApp()->m_pMainWnd->GetActiveWindow());
		mTipdlg->UpdateWindow();
	}
}

 然后在XXX.h里

//在XXX.h里
//和extern CXXXApp theApp;放一起
extern CTipDlg* mTipdlg;
extern void ShowTip(CString mStrTip,UINT mDelayTime);
extern void ShowTip(string mStrTip,UINT mDelayTime);

2.在需要使用的地方(需要先包含XXX.h)

//XXXDlg.cpp

ShowTip("成功啦!",3000);
举报

相关推荐

0 条评论