定时对话框的实现

在我们常用的软件中,有一种对话框它非常特别,能在某一时刻显示,然后显示一段时间后自动关闭,MSDN中有一些关于具体实现的说明,整理了下。实现原理很简单,首先定义一个自己的窗口类,继承自CWnd类,对其中几个比较重要的函数进行说明,

void CQQMsgWnd::CreateMsgWindow() { RECT rect; SystemParametersInfo(SPI_GETWORKAREA,0,&rect,0); int y=rect.bottom-rect.top; int x=rect.right-rect.left; x=x-WIN_WIDTH; y=y-WIN_HEIGHT; CBrush brush; brush.CreatePatternBrush(&m_Bitmap); CreateEx(0, AfxRegisterWndClass( 0, ::LoadCursor(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDC_HAND_1)),(HBRUSH)(brush.m_hObject),NULL), "", WS_POPUP|WS_EX_TOPMOST, x, y, WIN_WIDTH,//bmBitmap.bmWidth, //Bitmap Width = Splash Window Width WIN_HEIGHT,//bmBitmap.bmHeight, //Bitmap Height = Splash Window Height AfxGetMainWnd()->GetSafeHwnd(), NULL, NULL); SetTimer(ID_TIMER_DISPLAY_DELAY,3000,NULL); }


注册一个自己定义的窗口,包含自己的鼠标,背景等,注册完之后,在某一个位置进行创建,实例代码是在窗口的右下角。然后设置一个定时器,时间为3S,

定时器处理函数:

void CQQMsgWnd::OnTimer(UINT nIDEvent) { /* static int nHeight=0; int cy=GetSystemMetrics(SM_CYSCREEN); int cx=GetSystemMetrics(SM_CXSCREEN); RECT rect; SystemParametersInfo(SPI_GETWORKAREA,0,&rect,0); int y=rect.bottom-rect.top; int x=rect.right-rect.left; x=x-WIN_WIDTH; */ switch(nIDEvent) { case ID_TIMER_DISPLAY_DELAY: KillTimer(ID_TIMER_DISPLAY_DELAY); SendMessage(WM_CLOSE); break; } CWnd::OnTimer(nIDEvent); }


3S之后窗口会自动销毁。

void CQQMsgWnd::OnPaint() { CPaintDC dc(this); // device context for painting CDC dcMemory; CRect rect; GetClientRect(&rect); dcMemory.CreateCompatibleDC(NULL); dcMemory.SelectObject(&m_Bitmap); dc.StretchBlt(0, 0, rect.right-rect.left,//bmBitmap.bmWidth, rect.bottom-rect.top,//bmBitmap.bmHeight, &dcMemory, 0, 0, bmBitmap.bmWidth, bmBitmap.bmHeight, SRCCOPY); CFont font; font.CreatePointFont(90,"Impact"); dc.SelectObject(&font); //dc.SetTextColor(RGB(0,64,128)); dc.SetTextColor(RGB(255,0,0)); dc.SetBkMode(TRANSPARENT); dc.TextOut(30,10,m_strCaption); rect.top=30; dc.DrawText(m_strMessage,-1,&rect,DT_CENTER|DT_SINGLELINE|DT_VCENTER); // Do not call CWnd::OnPaint() for painting messages }

进行贴图以及文字绘制操作,到此,基本的工作已经完成,大家还可以根据自己的需要,发挥自己的想象力,添加其它的操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值