在Picture控件中载入一幅图,图片比控件的尺寸要大,限于界面的大小又不能放大Picture控件的尺寸,于是为了将图片完整显示出来希望在Picture中加入滚动条,不知道该怎么实现。
我注意到Picture控件就是一个基于CStatic的类,而这个类本身就有showScrollBar的函数,但是我调用这个函数后仍然没有看到有滚动条出现,不知道何故?
看过以往的文章,也有人建议在Picture控件边上放置两个滚动条控件,但我不知道如何响应点击滚动条控件的消息使控件中的图片将没有显示的部分显示出来。
我注意到Picture控件就是一个基于CStatic的类,而这个类本身就有showScrollBar的函数,但是我调用这个函数后仍然没有看到有滚动条出现,不知道何故?
看过以往的文章,也有人建议在Picture控件边上放置两个滚动条控件,但我不知道如何响应点击滚动条控件的消息使控件中的图片将没有显示的部分显示出来。
LRESULT XXX::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
if( message == WM_NCHITTEST || message == WM_NCLBUTTONDOWN || message == WM_NCLBUTTONDBLCLK )
return ::DefWindowProc( m_hWnd, message, wParam, lParam );
return CStatic::WindowProc(message, wParam, lParam);
}
另外,即使拖动了也没用,显示图片的片段还要你自己来处理。
无非是用GDI+或者其他显示图片的库显示图片,只不过显示图片参数的源(xSrc,ySrc)根据滚动条动态修改而已。
// 拖动滚动条后,memDC和控件原点不一致
// 重新将memDC中的内容贴到控件中,只是改变原点位置。
我现在显示图片的程序写在onpaint函数里,是这样写的,该怎么改?
CPaintDC dc(GetDlgItem(IDC_STATIC1)); //IDC_STATIC1就是我要显示图片的Picture控件
CRect rcclient;
GetDlgItem(IDC_STATIC1)->GetClientRect(&rcclient);
CBrush brush;
brush.CreatePatternBrush(&m_bmp1);//m_bmp1是我要显示的位图
dc.FillRect(rcclient, &brush);
// 可以考虑处理下rcclient;
// rcclient.top = -5; //向下移动5
// 然后通过设置rect,将需要的部分bltblt到static中