赞助

duilib : 滑动显示的窗口实现以及 悬浮窗 (转载)

1.

vc 判断窗口是否显示  BOOL IsWindowVisible(HWND hWnd);

 

2.悬浮窗

http://blog.csdn.net/lincyang/article/details/38729275

目标
实现像迅雷那样炫酷的悬浮窗。
计划&方案
首先第一步要实现一个悬浮窗,窗体无边框,能够随意拖动。
对于一个窗体来说,只有我们把鼠标放到标题栏中才进入到拖拽模式。
由于是无边框的窗体,默认是不能够移动的。我们尝试用两种办法使其跟随鼠标移动。一个是用OnNcHitTest函数,另一个是在OnLButtonDown时发消息。
实践
demo链接

http://pan.baidu.com/s/1sku7eDf

 

3.使用Duilib实现滑动显示子窗口

参考链接:http://blog.csdn.net/lostspeed/article/details/22357251

demo下载

http://pan.baidu.com/s/1skgZYbz

 

4.Duilib实现悬浮窗

 一、修改窗口风格

 

 1 void CFloatWnd::InitWindow()
 2 {
 3     //加入WS_EX_LAYERED扩展属性
 4     LONG styleValue = ::GetWindowLong(m_hWnd, GWL_EXSTYLE); 
 5 
 6     styleValue &= ~(WS_EX_APPWINDOW);//当窗口可见时将一个顶层窗口放置在任务栏上
 7     styleValue |= WS_EX_TOOLWINDOW; //工具条窗口样式
 8 
 9     SetWindowLong(m_hWnd,GWL_EXSTYLE,styleValue);
10 }

 

二、窗口置顶

  

1 void CFloatWnd::OnPrepare()
2 {
3     ::SetWindowPos(m_hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);//窗口置顶
4 }

 三、使用时用非模态显示

 

1 //悬浮窗口
2     CFloatWnd* pFloatWnd= new CFloatWnd;
3     pFloatWnd->Create(NULL, _T("FloatWnd"), UI_WNDSTYLE_EX_FRAME,WS_EX_WINDOWEDGE | WS_EX_ACCEPTFILES);
4     pFloatWnd->CenterWindow();
5     //pFloatWnd->ShowModal();//设为模态框,主窗口退出,悬浮窗阻塞不会销毁
6     pFloatWnd->ShowWindow();//设为非模态框,主窗口退出,悬浮窗自动销毁

 转载:http://blog.csdn.net/lostspeed/article/details/46944917

posted @ 2016-02-29 16:23  车臣  阅读(4753)  评论(0编辑  收藏  举报