IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 非模态对话框自己关掉自己 -> 正文阅读

[C++知识库]非模态对话框自己关掉自己

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

注意:线程不安全.需要写成单例,加锁

一:创建对话框及绑定类

?

?就这样的? 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);

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-10 22:13:22  更:2022-03-10 22:15:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 5:02:52-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码