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();//设为非模态框,主窗口退出,悬浮窗自动销毁