在Picture控件中载入一幅图,图片比控件的尺寸要大,限于界面的大小又不能放大Picture控件的尺寸,于是为了将图片完整显示出来希望在Picture中加入滚动条,不知道该怎么实现。
我注意到Picture控件就是一个基于CStatic的类,而这个类本身就有showScrollBar的函数,但是我调用这个函数后仍然没有看到有滚动条出现,不知道何故?
看过以往的文章,也有人建议在Picture控件边上放置两个滚动条控件,但我不知道如何响应点击滚动条控件的消息使控件中的图片将没有显示的部分显示出来。

解决方案 »

  1.   

    我以前也遇到过这问题,不过没有想出切实可行的方案,也没找到相关的详细资料,后来改用C#实现了效果,但也不是直接添加,实现方法是将Picture控件放到一个Panal里,panal里可以自动实现滚动条功能。仅供参考,^_^
      

  2.   

    可我这个页面里有很多picture控件,panal只有一个
      

  3.   

    处理
    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); 

    另外,即使拖动了也没用,显示图片的片段还要你自己来处理。
      

  4.   

    这样还不如不用picture控件,继承static好了,我也不是很明白picture控件对比static做了什么。
    无非是用GDI+或者其他显示图片的库显示图片,只不过显示图片参数的源(xSrc,ySrc)根据滚动条动态修改而已。
      

  5.   

    // 将图片显示在一个memDC中,开始的时候memDC和控件的原点一致。
    // 拖动滚动条后,memDC和控件原点不一致
    // 重新将memDC中的内容贴到控件中,只是改变原点位置。
      

  6.   

    楼上的,怎么设置DC的原点和控件原点不一致啊?我翻了下好像没看到设置DC原点的函数啊。
    我现在显示图片的程序写在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); 
      

  7.   

    dc.FillRect(rcclient, &brush); 
    // 可以考虑处理下rcclient;
    // rcclient.top = -5; //向下移动5
      

  8.   

    // 你先建立一个memDC,将完整的图贴到memDC中。
    // 然后通过设置rect,将需要的部分bltblt到static中
      

  9.   

    搞定,bltblt里面设置起始位置,散分