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

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

 2008-11-13 19:34:27 来源:WEB开发网   
核心提示: 接着就必须一些初始化工作,其中最关键就是把被按键覆盖了的区域保存进CBitmap类中,在VC中透明浮动按键的实现(5),我们知道CDC::StretchBlt()函数可以把位图的指定区域从一个设备拷贝到另一个设备中,这样可以很方便地把窗口或对话框的某个区域保存

接着就必须一些初始化工作,其中最关键就是把被按键覆盖了的区域保存进CBitmap类中,我们知道CDC::StretchBlt()函数可以把位图的指定区域从一个设备拷贝到另一个设备中,这样可以很方便地把窗口或对话框的某个区域保存,条件是获得其DC:

void CDrawButton::LoadBack(CWnd *pParent)
{
  ASSERT(GetStyle() & BS_OWNERDRAW);
  if (m_pBitmap!=0) return;
  CRect rect;
  GetWindowRect(&rect);
  pParent- >ScreenToClient(&rect);//获得按键区域
  CPaintDC dc(pParent);
  if (m_pBitmap==0) m_pBitmap=new CBitmap;//初始化位图
  m_pBitmap- >CreateCompatibleBitmap
(&dc,rect.Width(),rect.Height());
  CDC memDC;
  memDC.CreateCompatibleDC(&dc);
  memDC.SelectObject(m_pBitmap);
memDC.StretchBlt(0, 0, rect.Width(),rect.Height(), &dc,
  rect.left, rect.top,
rect.Width(),rect.Height(), SRCCOPY);//保存
  memDC.DeleteDC();
m_pFont=pParent- >GetFont();//获得窗口或对话框的字体
  ModifyStyle(0,WS_VISIBLE);//显示按键
  SetBitmapMode(ODA_DRAWENTIRE,0);//绘制按键
}

而使这个类和对话框上的按键产生联系还必须调用一下SubclassDlgItem():

BOOL CDrawButton::AutoLoad(UINT nID, CWnd *pParent)
{
// first attach the CDrawButton to the dialog control
  if (m_pBitmap!=0) return FALSE;
  if (!SubclassDlgItem(nID, pParent)) return FALSE;
  LoadBack(pParent);
  return TRUE;
}

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

Tags:VC 透明 浮动

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