SLIDER 的自绘问题

confucius 2007-07-31 06:34:11
网上抄了一个CMySliderCtrl的类,透明的SLIDER,别的都没有什么问题,但是我想使用一个位图来做滑块,出现问题,我的位图大小是16*16的,具体的绘制代码在下面,我感觉是自绘的区域有点小,各位大侠帮忙看看怎么解决,或者有没有现成的类似控件

/////////////////////////////////////////////////////////////////////////////
// CTranSlider message handlers
//-------------------------------------------------------------------
//
void CTranSlider::OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult)
//
// Description : Sent by the slider control to notify the parent window
// about drawing operations. This notification is sent in
// the form of a WM_NOTIFY message.
// Parameters : pNMHDR - a pointer to a NM_CUSTOMDRAW structure.
// pResult - value depends on the current drawing state.
{
LPNMCUSTOMDRAW lpcd = (LPNMCUSTOMDRAW)pNMHDR;
CDC *pDC = CDC::FromHandle(lpcd->hdc);
switch(lpcd->dwDrawStage)
{
case CDDS_PREPAINT:
*pResult = CDRF_NOTIFYITEMDRAW ;
break;
//return;
case CDDS_ITEMPREPAINT:
if (lpcd->dwItemSpec == TBCD_THUMB)
{
if(m_hBlockImage)
{
BITMAP bmp;
//获取位图大小
::GetObject( m_hBlockImage, sizeof(BITMAP), &bmp );
if( bmp.bmWidth>0 && bmp.bmHeight>0 )
{
CDC dcTemp;
//创建临时设备描述
dcTemp.CreateCompatibleDC( pDC );
//粘贴位图
HGDIOBJ obj = ::SelectObject( dcTemp.m_hDC, m_hBlockImage );
CSize sz(bmp.bmWidth, bmp.bmHeight);
CRect rect(lpcd->rc);
// if( rect.Width() < sz.cx )
// sz.cx = rect.Width();
// if( rect.Height() < sz.cy )
// sz.cy = rect.Height();
CPoint point = CRect(lpcd->rc).CenterPoint();
::BitBlt( pDC->m_hDC, point.x-sz.cx/2, point.y-sz.cy/2,
sz.cx, sz.cy, dcTemp.m_hDC, 0, 0, SRCCOPY );
::SelectObject( dcTemp.m_hDC, obj );
dcTemp.DeleteDC();
}
}
*pResult = CDRF_SKIPDEFAULT;
break;
}
...全文
513 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zmmici 2012-09-06
  • 打赏
  • 举报
回复
请问,按照那个网址的例子去做,我想做出进度条随着窗口的改变而改变!请问有没有什么办法呀!!
WindAndSnow 2007-08-01
  • 打赏
  • 举报
回复
只要是bitmap,它有你想象中任一种样式的slider,而且代码精悍
WindAndSnow 2007-08-01
  • 打赏
  • 举报
回复
http://www.codeproject.com/staticctrl/CBitmapSlider.asp
是个很好的例子,你一见就会喜欢它,我写Slider的时候就是参照它写的.
不过它只能处理bitmap

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧