WEB开发网
开发学院软件开发VC 在VC中透明浮动按键的实现 阅读

在VC中透明浮动按键的实现

 2008-11-13 19:34:27 来源:WEB开发网   
核心提示: 接着就是绘制按键的各种状态:由于按键必须“透明”,所以在按下和释放时只在按键区域的四周加上一个3D边框就行了,在VC中透明浮动按键的实现(4),而在正常状态下,则必须去掉边框恢复背景,但如何恢复背景图象呢?我是这样做的:在按键初始化时,先把被按键覆盖了的区域保存在一

接着就是绘制按键的各种状态:由于按键必须“透明”,所以在按下和释放时只在按键区域的四周加上一个3D边框就行了。而在正常状态下,则必须去掉边框恢复背景。但如何恢复背景图象呢?我是这样做的:在按键初始化时,先把被按键覆盖了的区域保存在一个CBitmap类中,以后需要重绘按键时就把这个CBitmap画在按键上就行了。

void CDrawButton::DrawItem
(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
  // TODO: Add your code to draw the specified item
  CDC dc;
  CRect rect=lpDrawItemStruct- >rcItem;
  CString sCaption;
  dc.Attach(lpDrawItemStruct->hDC);
//得到绘制的设备环境CDC
  VERIFY(lpDrawItemStruct- >CtlType==ODT_BUTTON);
  if (lpDrawItemStruct- >itemAction & ODA_DRAWENTIRE){
    //重绘控件(正常状态)
    mBtnStats=BTN_NORMAL;
    if (m_pBitmap!=0){
      CDC memDC;
      memDC.CreateCompatibleDC(&dc);
      memDC.SelectObject(m_pBitmap);
  dc.BitBlt(0, 0, rect.Width(), rect.Height(),
        &memDC, 0, 0, SRCCOPY);
      memDC.DeleteDC();
    }
    //显示按键标题
    GetWindowText(sCaption);
    dc.SetBkMode(TRANSPARENT);
    if (m_pFont!=0){
    CFont* m_pOldFont=dc.SelectObject(m_pFont);
    dc.DrawText(sCaption,&rect,
  DT_CENTER|DT_VCENTER|DT_SINGLELINE);
      dc.SelectObject(m_pOldFont);
    }
  }
if ((lpDrawItemStruct- >itemState & ODS_SELECTED) &&
(lpDrawItemStruct- >itemAction & ODA_SELECT)){
//按下鼠标
mBtnStats=BTN_DOWN;
dc.Draw3dRect(&rect,RGB(128,128,128),RGB(192,192,192));
rect.top=rect.top+1;rect.bottom=rect.bottom-1;
rect.left=rect.left+1;rect.right=rect.right-1;
dc.Draw3dRect(&rect,RGB(0,0,0),RGB(255,255,255));
  }
if(!(lpDrawItemStruct- >itemState & ODS_SELECTED) &&
(lpDrawItemStruct- >itemAction & ODA_SELECT)){
//释放鼠标或鼠标进入按键区域
mBtnStats=BTN_UP;
dc.Draw3dRect(&rect,RGB(255,255,255),RGB(0,0,0));
rect.top=rect.top+1;rect.bottom=rect.bottom-1;
rect.left=rect.left+1;rect.right=rect.right-1;
dc.Draw3dRect(&rect,RGB(192,192,192),RGB(128,128,128));
  }
  dc.Detach();
}

上一页  1 2 3 4 5 6  下一页

Tags:VC 透明 浮动

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