作者:苍竹先生下载源代码一、简介:象flashget、迅雷、BT等都有浮动窗口,能详细地显示下载的详细信息,该类型的窗口有一下几个特点:1、窗口无标题栏,窗口的大小跟位图一样大。2、前端显示。3、在客户区内按下鼠标左键可以随意拖动窗口的位置。4、可以改变窗口的透明度。5、双击可以将主窗口激活,并显示。下面就该类型窗口的各个功能实现予以说明。二、代码的详细说明:1、窗口无标题栏,窗口的大小跟位图一样大。建立一个对话框资源,设置为POPUP类型,并取消Title Bar属性。在上面插入一个图片控件,设置为导入的位图。//得到位图CBitmap m_Bitmap;HBITMAP hBitmap = m_Logo.GetBitmap();ASSERT(hBitmap);//得到位图的信息m_Bitmap.Attach(hBitmap);BITMAP bmp;m_Bitmap.GetBitmap(&bmp);//得到位图的大小int nX = bmp.bmWidth;int nY = bmp.bmHeight;//根据位图的大小移动窗口MoveWindow(0,0,nX,nY);m_Logo.MoveWindow(0,0,nX,nY);CenterWindow();2、前端显示。//通过SetWindowsPos函数将窗口前端显示。::SetWindowPos(m_hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE | SWP_NOSIZE);   3、在客户区内按下鼠标左键可以随意拖动窗口的位置。响应WM_HITTEST函数,当鼠标左键按下并在客户区内,返回HTCAPTION,欺骗Windows,达到跟在标题栏拖动窗口一样的效果。UINT CFloatWnd::OnNcHitTest(CPoint pt)
{UINT nHitTest = CDialog::OnNcHitTest(pt);if (nHitTest == HTCLIENT && ::GetAsyncKeyState(MK_LBUTTON) < 0) // 如果鼠标左键按下,GetAsyncKeyState函数的返回值小于0nHitTest = HTCAPTION;return nHitTest;
}4、改变窗口的透明度。将窗口样式设置为WS_EX_LAYERED,并调用SetLayeredWindowAttributes函数来改变窗口的透明度。WS_EX_LAYERED可能没定义,我们可以直接取值0x80000。//加入WS_EX_LAYERED扩展属性SetWindowLong(m_hWnd,GWL_EXSTYLE,GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)^0x80000);BOOL SetLayeredWindowAttributes(HWND hwnd,COLORREF crKey,BYTE bAlpha,DWORD dwFlags);
hwnd是要改变的窗口,当dwFlags为LWA_ALPHA(0x2)时,crKey参数没用,bAlpha为透明度,取值在0~255之间。该函数要从User.dll中载入。//更新窗口透明度的代码,其中iTransparent为透明度。
void CFloatWnd::OnUpdateTransparent(int iTransparent)
{HINSTANCE hInst = LoadLibrary("User32.DLL");if(hInst){typedef BOOL (WINAPI *SLWA)(HWND,COLORREF,BYTE,DWORD);SLWA pFun = NULL;//取得SetLayeredWindowAttributes函数指针 pFun = (SLWA)GetProcAddress(hInst,"SetLayeredWindowAttributes");if(pFun){pFun(m_hWnd,0,iTransparent,2);}FreeLibrary(hInst); }
}5、双击可以将主窗口激活并显示。由于WM_HITTEST消息的影响,我们双击鼠标的时候产生的是WM_NCLBUTTONDBLCLK消息,而不是WM_LBUTTONDBLCLK消息。void CFloatWnd::OnNcLButtonDblClk(UINT nFlags, CPoint point)
{// TODO: Add your message handler code here and/or call default    CWnd *pParent = GetParent();ASSERT(pParent);//显示窗口if(!pParent->IsWindowVisible())pParent->ShowWindow(SW_SHOW);//置窗口到最前面pParent->SetForegroundWindow();CDialog::OnNcLButtonDblClk(nFlags, point);
}关于调节透明度的Slider使用,也写了一些代码,一并贴出来,供大家参考。void CMainDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{// TODO: Add your message handler code here and/or call default//得到Slider的位置int iCurPos = m_Slider.GetPos();  //得到最大值、最小值,及页大小int nMax = m_Slider.GetRangeMax();int nMin = m_Slider.GetRangeMin();int nPageSize = m_Slider.GetPageSize();switch(nSBCode){case SB_LINELEFT:if(iCurPos > nMin)iCurPos --;break;case SB_LINERIGHT:if(iCurPos < nMax)iCurPos ++;break;case SB_PAGELEFT:if(iCurPos > nMin)iCurPos = max(nMin,iCurPos - nPageSize);break;case SB_PAGERIGHT:if(iCurPos < nMax)iCurPos = min(nMax,iCurPos + nPageSize);break;case SB_THUMBTRACK:iCurPos = nPos;break;case SB_THUMBPOSITION:iCurPos = nPos;break;     }//设置Slider位置m_Slider.SetPos(iCurPos);//更新透明度pFloatWnd->OnUpdateTransparent(iCurPos);CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}至于该窗口的右键菜单,窗口的显示与隐藏,程序的退出等简单代码我就不多介绍了。三、该程序在Windows xp sp2和Visual C++6.0下编译调试成功。 

转载于:https://www.cnblogs.com/65876951/articles/vc1.html

类似flashget的浮动窗口的实现相关推荐

  1. html点击按钮弹出悬浮窗_javascript如何实现弹出浮动窗口

    Js弹出浮动窗口,支持鼠标拖动和关闭 /** 关于一些参数说明: *bodycontent:要在窗口显示的内容,dom对象 *title:窗口标题,字符串类型 *removeable:窗口能否拖动,布 ...

  2. html弹出窗口是浮动,JS实现弹出浮动窗口(支持鼠标拖动和关闭)实例详解

    本文实例讲述了JS实现弹出浮动窗口.分享给大家供大家参考.具体如下: 这里介绍的JS弹出浮动窗口,支持鼠标拖动和关闭,点击链接文字后弹出层窗口,也称作是弹出式对话框吧. 关于一些参数说明: bodyc ...

  3. h5 右下角浮动按钮_【js】右下角浮动窗口

    右下角浮动窗口 #msg_win{position:absolute;right:0px;overflow:hidden;z-index:99;border:1px solid #c00;backgr ...

  4. 浮动窗口代码(带关闭按钮+全屏漂浮)

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  5. html全局浮窗,Html 实现浮动窗口

    今天在写一个html代码时,需要用到浮动窗口,通知信息,网站找了一下,代码如下 带关闭按钮的浮动窗口代码(全屏漂浮) #fdck {border:1px solid #c0c0c0;margin:0 ...

  6. 【Qt教程】1.9 - Qt5菜单栏、工具栏、状态栏、核心窗口、浮动窗口、QMainWindow

    1. 窗口应用布局样式及组成 PC端软件,最基本的一个窗口应用布局样式,如下: 大体可分为菜单栏.工具栏.状态栏.核心窗口.浮动窗口,使用时按需相互组合. 2. Qt中调用这些控件 1)新建一个工程: ...

  7. 7、菜单栏、工具栏、状态栏、浮动窗口、TextEdit

    新建项目,基类选择QMainWindow,不勾选ui    mainwindow.cpp代码: #include "mainwindow.h" #include <QMenu ...

  8. qt android 浮动窗口,QT+ 状态栏+核心控件+浮动窗口

    #include "mainwindow.h" #include #include #include #include //浮动窗口所需的头文件 MainWindow::MainW ...

  9. Qt开源库-顶级浮动窗口系统-Advanced-Docking-System【01】

    一.序言 顶级浮动窗口是大型软件中的常备组件,例如Visual Studio Code软件界面: 在上图中,将软件界面划分为不同的功能区,每个功能区负责显示软件的一部分功能.在上图中有项目工程管理窗口 ...

最新文章

  1. 洛谷 P1690 贪婪的Copy
  2. 教会你Linux Shell自动交互的三种方法
  3. easyui combox使用
  4. 用户参与度与活跃度的区别_用户参与度突然下降
  5. 搭建基于飞桨的OCR工具库,总模型仅8.6M的超轻量级中文OCR,单模型支持中英文数字组合识别、竖排文本识别、长文本识别的PaddleOCR
  6. 专心写即时通讯软件争取CSDN认证专家
  7. [Ajax] jQuery中的Ajax -- 04-异步提交表单
  8. Codeforces - 706B - Interesting drink - 二分 - 简单dp
  9. Springboot2数据访问
  10. 我是小白0基础,现在我想学习前端开发,该如何系统的学习?
  11. 【原创】Kakfa api包源代码分析
  12. python是什么类型的语言-Python是什么?简单了解pythonp-入门
  13. jquery中each_如何在jQuery中使用each()
  14. 【数据库原理实验(openGauss)】金融场景化实验
  15. 2020大数据技术体系结构图,你值得拥有
  16. 过去分词和动词过去式区别
  17. 《When Private Set Intersection Meets Big Data:An Efficient and Scalable Protocol》论文解读
  18. 前序、中序、后序表达式
  19. 烽火为格兰仕集团私人订制-销售管家iCube平台
  20. Java并发工具Exchanger线程间交换数据

热门文章

  1. 不懂指针类型,7个例子给你讲明白
  2. android王者调不了界面,王者荣耀登录界面怎么改?登录界面更改教程[多图]
  3. access无法与wincc链接_wincc和Access连接写如变量
  4. 【渝粤教育】国家开放大学2018年秋季 0734-22T出纳实务 参考试题
  5. 【渝粤教育】国家开放大学2018年秋季 0695-21T (1)农业企业经营管理 参考试题
  6. [渝粤教育] 中国地质大学 金融保险业会计 复习题
  7. 【渝粤教育】电大中专学前儿童健康教育 (4)作业 题库
  8. 【渝粤题库】陕西师范大学200971教育经济学 作业(专升本、高起本)
  9. 物联网技术在智慧消防中的应用
  10. java 拉丁文 unicode_“java语言使用的是Unicode编码”是指的jvm?.java文件?