?用非模态对话框显示提示信息,自动定时关闭,时间可调.代码可以直接使用
注意:线程不安全.需要写成单例,加锁
一:创建对话框及绑定类
?
?就这样的? 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);
virtual void PostNcDestroy();
};
?对话框.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();
mTipdlg=NULL;
}
void CTipDlg::PostNcDestroy()
{
// TODO: 在此添加专用代码和/或调用基类
CDialogEx::PostNcDestroy();
delete this;
}
二.使用
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);
|