博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Duilib 实现右下角弹出像QQ新闻窗口,3秒后窗口透明度渐变最后关闭,若在渐变过程中鼠标放到窗口上,窗口恢复最初状态(二)...
阅读量:5156 次
发布时间:2019-06-13

本文共 1960 字,大约阅读时间需要 6 分钟。

效果:

 

1.定义两个个定时器ID  

#define ID_TIMER_DISPLAY_DELAY 30#define ID_TIMER_DISPLAY_CLOSE 40

 

2.添加一个成员函数和成员变量

void SetAlpha(HWND hWnd,int Alpha);int m_nFlag ;

void CPopUpWnd::SetAlpha(HWND hWnd,int Alpha)

{
  HINSTANCE hInst = LoadLibrary(L"User32.DLL");
  if(hInst)
  {
    typedef BOOL (WINAPI *MYFUNC)(HWND,COLORREF,BYTE,DWORD);
    MYFUNC fun = NULL;
   //取得SetLayeredWindowAttributes函数指针
   fun=(MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes");
   if(fun)fun(hWnd,0,Alpha,2);
   FreeLibrary(hInst);
   }

}

3.修改窗口属性

void CPopUpWnd::OnPrepare(){    //直接显示在右下角    MoveSelfWindow();    //修改窗口属性为了窗口透明度    SetWindowLong(m_hWnd,GWL_EXSTYLE,GetWindowLong(m_hWnd,GWL_EXSTYLE)^0x80000);

     //3秒后改变窗口透明度

     SetTimer(m_hWnd,ID_TIMER_DISPLAY_DELAY,3000,NULL);

}

4.在定时器响应函数里

 

LRESULT CPopUpWnd::OnTimer(UINT uMsg, WPARAM wParam, LPARAM lParam,BOOL& bHandled){        switch(wParam)    {
//多个定时器 case ID_TIMER_DISPLAY_DELAY: KillTimer(m_hWnd,ID_TIMER_DISPLAY_DELAY); SetTimer(m_hWnd,ID_TIMER_DISPLAY_CLOSE,60,NULL); break; case ID_TIMER_DISPLAY_CLOSE: { if(m_nFlag < 255) { m_nFlag+= 5; SetAlpha(m_hWnd,255-m_nFlag); } else { KillTimer(m_hWnd,ID_TIMER_DISPLAY_CLOSE); Close(IDCLOSE); m_nFlag = 0; } } break; } return 0;}

 

5.窗口渐变关闭过程中,鼠标经过窗口,关闭定时器,窗口恢复原状

LRESULT CPopUpWnd::OnMouseEnter(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled){       .....        //KillTimer(m_hWnd,ID_TIMER_DISPLAY_DELAY);    KillTimer(m_hWnd,ID_TIMER_DISPLAY_CLOSE);    if (m_nFlag < 255)    {        SetAlpha(m_hWnd,255);    }      ....    return 0;}

6.鼠标出了窗口,开启定时器继续渐变关闭窗口

LRESULT CPopUpWnd::OnMouseLeave(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled){    .....    SetTimer(m_hWnd,ID_TIMER_DISPLAY_CLOSE,30,NULL);    m_nFlag = 0;       ....    return 0;}

 

转载于:https://www.cnblogs.com/chechen/p/7356754.html

你可能感兴趣的文章
投标项目的脚本练习2
查看>>
201521123107 《Java程序设计》第9周学习总结
查看>>
Caroline--chochukmo
查看>>
iOS之文本属性Attributes的使用
查看>>
从.Net版本演变看String和StringBuilder性能之争
查看>>
Excel操作 Microsoft.Office.Interop.Excel.dll的使用
查看>>
解决Ubuntu下博通网卡驱动问题
查看>>
【bzoj2788】Festival
查看>>
执行gem install dryrun错误
查看>>
Java SE之正则表达式一:概述
查看>>
HTML5简单入门系列(四)
查看>>
实现字符串反转
查看>>
转载:《TypeScript 中文入门教程》 5、命名空间和模块
查看>>
苹果开发中常用英语单词
查看>>
[USACO 1.4.3]等差数列
查看>>
Shader Overview
查看>>
Reveal 配置与使用
查看>>
Java中反射的学习与理解(一)
查看>>
C语言初学 俩数相除问题
查看>>
B/S和C/S架构的区别
查看>>