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实现悬浮窗
一、修改窗口风格
void CFloatWnd::InitWindow()
{
//加入WS_EX_LAYERED扩展属性
LONG styleValue = ::GetWindowLong(m_hWnd, GWL_EXSTYLE); styleValue &= ~(WS_EX_APPWINDOW);//当窗口可见时将一个顶层窗口放置在任务栏上
styleValue |= WS_EX_TOOLWINDOW; //工具条窗口样式 SetWindowLong(m_hWnd,GWL_EXSTYLE,styleValue);
}
二、窗口置顶
void CFloatWnd::OnPrepare()
{
::SetWindowPos(m_hWnd,HWND_TOPMOST,,,,,SWP_NOMOVE|SWP_NOSIZE);//窗口置顶
}
三、使用时用非模态显示
//悬浮窗口
CFloatWnd* pFloatWnd= new CFloatWnd;
pFloatWnd->Create(NULL, _T("FloatWnd"), UI_WNDSTYLE_EX_FRAME,WS_EX_WINDOWEDGE | WS_EX_ACCEPTFILES);
pFloatWnd->CenterWindow();
//pFloatWnd->ShowModal();//设为模态框,主窗口退出,悬浮窗阻塞不会销毁
pFloatWnd->ShowWindow();//设为非模态框,主窗口退出,悬浮窗自动销毁