WEB开发网
开发学院软件开发VC 类似flashget的浮动窗口的实现 阅读

类似flashget的浮动窗口的实现

 2010-08-22 20:47:25 来源:WEB开发网   
核心提示:4、改变窗口的透明度,将窗口样式设置为WS_EX_LAYERED,类似flashget的浮动窗口的实现(2),并调用SetLayeredWindowAttributes函数来改变窗口的透明度,WS_EX_LAYERED可能没定义,窗口的显示与隐藏,程序的退出等简单代码我就不多介绍了,我们可以直接取值0x80000,//

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下编译调试成功。

本文配套源码

上一页  1 2 

Tags:类似 flashget 浮动

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接