MFC滚动位图
需求:
采用C#编写一个能显示、缩放、移动图片的dll给C++调用,目前基本实现了所需功能,不过遇到两个问题,如下所述;
问题:
1.如何在缩小后擦除背景,Graphics::Clear,需填充颜色,而且有闪烁;
代码:
Graphics gs = Graphics.FromHdc(sourceHDC);
gs.Clear(Color.FromArgb(255, 240, 240, 240));
gs.DrawImage(sourceBitmap, new Rectangle(0, 0,newWidth, newHeight),
new Rectangle(sourceX, sourceY, sourceBitmap.Width, sourceBitmap.Height), GraphicsUnit.Pixel);
gs.Dispose();
2.OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)函数中的nPos是以什么为单位的,如何转换成像素,因为C#显示图片的时候采用Pixel为单位,我现在的做法是以图片的宽/高设置滚动条的滚动范围,但是测试发现会滚动出界,怀疑是因为单位不一样造成的。
void CEObjectsTestDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
int nMin,nMax;
m_scrollBarH.GetScrollRange(&nMin,&nMax); //取得滚动条范围
m_nX = m_scrollBarH.GetScrollPos(); //取得当前值
switch(nSBCode) //处理滚动信息
{
case SB_LINELEFT: //向左的箭头被按下
if (m_nX>nMin+4)
{
m_nX -= 5;
}
break;
case SB_LINERIGHT: //向右的箭头被按下
if (m_nX<nMax-4)
{
m_nX += 5;
}
break;
case SB_THUMBTRACK: //鼠标拖动
if (nPos<nMax && nPos>nMin)
{
m_nX = nPos;
}
break;
}
m_scrollBarH.SetScrollPos(m_nX);
PIC::Scroll(0,m_nX,m_nY);//调用C#滚动显示方法
CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}