网上抄了一个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;
}