首先,我先描述下我已经做了的工作:1. 已经建立了SDI工程,基类为CFormView,屏幕大小为1280*1024
2. 通过贴图的方法BitBlt()在屏幕中“一块”显示图像,这一部分图片显示在主界面(678,330)的位置上。这一部分图片本上的大小是宽500,高320。
方法如下:
view中定义了一个函数PaintCurve(),这个函数主要实现一些动态曲线显示的功能
View::PaintCurve()
{ int i,x,y,x1,y1,j;
CString str;
CRect rc(0,0,500,320);

CDC *pDC=GetDC();// 1
CDC memDC;//2
memDC.CreateCompatibleDC(pDC);//创建兼容内存DC

CBitmap bmp;  //3 
bmp.CreateCompatibleBitmap(pDC,rc.Width(),rc.Height()); //创建兼容位图  
         CBitmap *pOldBitmap=memDC.SelectObject(&bmp); //把位图选入设备环 //设置映射模式
memDC.SetMapMode(MM_ANISOTROPIC); //可变比例映射模式
memDC.SetWindowExt(10000,-420);  //设置窗口范围,y坐标轴向上
memDC.SetViewportOrg(0,rc.Height()-1); // 设置坐标原点
memDC.SetViewportExt(rc.Width()-1,rc.Height()-1); //设置视口范围        ///其中具体曲线处理过程省略        //恢复映射模式
memDC.SetMapMode(MM_TEXT);
memDC.SetViewportOrg(0,0);
pDC->BitBlt(678,330,rc.Width(),rc.Height(),&memDC,0,0,SRCCOPY);  
memDC.SelectObject(pOldBitmap);
bmp.DeleteObject();//release 3
    memDC.DeleteDC();//release 2
ReleaseDC(pDC);//release 1
}
3. 主屏幕本来的滚动条我已经在OnSize里面屏蔽了
        OnSize()::   
          ShowScrollBar(SB_BOTH,FALSE); //去掉滚动条然后,我再描述下我遇到的问题:1. 希望在显示的这一部分图片下添加横向滚动条,并且只滚动(0,0,500,320)区域内的图象
应该如何实现呢?
2. 我在控件里可以选择Horizontal Scroll Bar,但不知道应该如何把这个控件和PaintCurve()相关联起来?
附图:    
第一次来CSDN,提问方面可能有诸多不妥的地方,望大家包涵:)
麻烦大家帮我看看这个滚动条应该怎样关联,小女子十分感谢PS:第一次发帖~没有那么多的可用分~不知道怎么回事~~给分不多~很抱歉

解决方案 »

  1.   

    在 (0,0,500,320)区域 再创建一个窗口(CScrollBar或其派生),充分利用系统的窗口机制
      

  2.   

    Sorry, 前面说错了,应该是CSrollView ,CScrollBar 应该是与Scroll Bar 控件相关联的:)(好久没写MFC程序了)
    如果你想用 Horizontal Scroll Bar 的话 从CScrollBar 派生一个类,在其中处理滚动条消息 WM_HSCROLL
    使用前调用 SetScrollRange 或 SetScrollInfo 设置其滚动范围为图像的宽
    具体请参考:http://www.codeguru.com/cpp/controls/controls/scrollbars/article.php/c2323/当你获取到当前滚动条的位置后,你可以在派生类中处理图像重绘 (事先传入 DC 及 BMP 参数)或往父窗口发送自定通知消息