QQ登录

只需一步,快速开始

396上位机VC MFC实现窗口抖动渐透明效果

[ 复制链接 ]

396上位机VC MFC实现窗口抖动渐透明效果

396上位机VC MFC实现窗口抖动渐透明效果

实现窗口抖动渐透明效果
功能展示
桌面右下角时常会有小窗口抖动进行消息的提示,然后逐渐透明到消失,我们当前例程也实现这一功能,在上位机开发时可以很友好的提示设备发生的事件,功能效果如图,点击<在桌面右下角显示事件>就会在右下角显示一事件对话框几秒后逐渐透明到消失。点击<动画窗口>可将事件窗口动态的由隐藏到显示或动态的由显示到隐藏

要点提示
例程窗口的抖动效果是通过在短时间内快速的调用函数SetWindowPos()来设置窗口的位置实现。在例程中是随机是抖动,大家也可以实现圆形的抖动;函数原型 为BOOL SetWindowPos( HWND hWnd, HWND hWndInsertAfter, int X, int Y, int cx, int cy, UINT uFlags); hWnd为窜句柄, hWndInsertAfter为Z相标识,例程使用HWND_TOPMOST表示在桌面顶层显示窗口。X,Y,CX,CY表示窗口新的左上角坐标及窗口大小。 uFlags表示窗口大小和位置调节的标识,例程有用到SWP_SHOWWINDOW,表示显示窗口,更多标识可阅读MSDN;

窗口的关闭,打开动态效果是通过函数AnimateWindow()实现。 函数原型为BOOL AnimateWindow( HWND hwnd, DWORD dwTime, DWORD dwFlags); hwnd表示窗口的句柄, dwTime表示动画执行的时间。 dwFlags表示动画的类型,有AW_CENTER, AW_HOR_NEGATIVE等等,类型可以组合使用,类型的描述介绍可翻阅MSDN或打开例程 阅读源码 ;

实现功能
1.新建基于对话框的应用程序
2.新建立一对话框资源IDD_DIALOG1,用于抖动窗口测试用,往内添加静态文本控件IDC_SHOWTEXT,用于显示文字提示,然后再关联对话框类class CNoticeDlg : public Cdialog;
3.在类中添加自定义变量及函数并在OnInitDialog()中初始化变量
public:
void RandomAnimateWindow();//新添加的效果,不好
void ShowNotice(CString sNotice);//桌面右下角显示窗口
protected:
void RockWindow();//抖动窗口
void PauseHidingWindow(BOOL bPause=TRUE);//暂停隐藏
BOOL SetWindowTransparency(HWND hWnd,COLORREF rgb,BYTE byte,DWORD dword);//设置窗口透明度
private:
UINT m_TransDecrease;
UINT m_AnimateWinStyle;
BOOL m_bPauseTrans;
BOOL CNoticeDlg::OnInitDialog()
{
CRect rect;
GetWindowRect(&rect);
int Xscreen,Yscreen;
Xscreen = GetSystemMetrics(SM_CXSCREEN);
Yscreen = GetSystemMetrics(SM_CYSCREEN);
::SetWindowPos(GetSafeHwnd(),HWND_NOTOPMOST,Xscreen-rect.Width(),Yscreen-rect.Height(),rect.Width(),rect.Height(),SWP_NOZORDER);
m_TransDecrease = 255; //255 to 50
m_bPauseTrans = FALSE; //for pause;
m_AnimateWinStyle=0;
}
4.类中仅有两函数RandomAnimateWindow() ShowNotice()仅外部调用使用,然后添加时间处理函数,实现逐渐隐藏效果
void CNoticeDlg::OnTimer(UINT nIDEvent)
{
if(nIDEvent == 1) //300ms后抖动
{
RockWindow();
SetTimer(2,2000,NULL);
KillTimer(1);
}
if(nIDEvent == 2)//窗口显示 2000ms渐隐关闭
{
KillTimer(2);
SetTimer(3,1,NULL);
}
//
if(nIDEvent == 3) //for hiding window
{
if(!m_bPauseTrans)
{
SetWindowTransparency(GetSafeHwnd(),RGB(0,255,0),m_TransDecrease,2);
m_TransDecrease -= 1;
if(m_TransDecrease<=100)
{
ShowWindow(SW_HIDE);
m_TransDecrease = 255;
SetWindowTransparency(GetSafeHwnd(),RGB(0,255,0),m_TransDecrease,2);
KillTimer(3);
}
}
}
if(nIDEvent == 4) //for pause hiding window
{
CRect rect;
GetWindowRect(&rect);
CPoint pos;
GetCursorPos(&pos);

if(rect.PtInRect(pos))
{
PauseHidingWindow();
}
else
{
PauseHidingWindow(FALSE);
}
if(!IsWindowVisible())
KillTimer(4);
}
CDialog::OnTimer(nIDEvent);
}
5.要使用窗口具有手拖动功能,可以在鼠标左键点击消息处理函数中添加代码::SendMessage(GetSafeHwnd(),WM_SYSCOMMAND,SC_MOVE + HTCAPTION,0);最后是类的使用,
在主对话框类中包含此类的头文件并添加类的实例对象,初始化变量
#include "NoticeDlg.h" CNoticeDlg m_NoticeDlg; m_NoticeDlg.Create(IDD_DIALOG1,this);
分别添加两个按钮<在桌面右下角显示事件><动画窗口>调用变量仅有的两个函数便可
void CGkbc8Dlg::OnShownotice()
{
m_NoticeDlg.ShowNotice("工控编程吧,事件显示");
}
void CGkbc8Dlg::OnAnimate()
{
m_NoticeDlg.RandomAnimateWindow();
}

我们来演示下功能实现的整个过程
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:396.上位机VC MFC实现窗口抖动渐透明效果.zip 
文件大小:141.14 KB  售价:10金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我

  

如果您认可,可联系功能定制!

  

如果您着急,充值会员可直接联系发您资料!

  

QQ联系我

微信扫扫联系我

  

  

您的支持是我们创作的动力!  

  

您可花点闲钱积分自助任意充值

  

成为VIP会员 全站资源任意下载永久更新!




回复

使用道具 举报

快速回复 返回列表 客服中心 搜索