怎么做网站超链接,seo搜索引擎优化实训,产品推广方案思维导图,网站主题页作者#xff1a;苍竹先生下载源代码一、简介#xff1a;象flashget、迅雷、BT等都有浮动窗口#xff0c;能详细地显示下载的详细信息#xff0c;该类型的窗口有一下几个特点#xff1a;1、窗口无标题栏#xff0c;窗口的大小跟位图一样大。2、前端显示。3、在客户区内按下… 作者苍竹先生下载源代码一、简介象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欺骗indows达到跟在标题栏拖动窗口一样的效果。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为透明度取值在0255之间。该函数要从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 C6.0下编译调试成功。 转载于:https://www.cnblogs.com/65876951/articles/vc1.html