[叩响C#之门]写给初学者:滚动条原理
2010-09-30 20:56:08 来源:WEB开发网实际上椭圆下半部分纵坐标范围为200~250,所以要想正确绘制出空白区域的图形,需要把绘图的坐标原点向上平移50像素,而这一点可以通过坐标的平移变换实现,如图17-25所示。
图17-26 坐标平移
坐标平移的情况如图17-26所示,要绘制从A点开始的区域,就要把坐标系原点由工作区的左上角A平移到文档的左上角O,即始终使坐标系的原点位于文档的左上角。这种变换可以通过下面的语句实现。
g.TranslateTransform(this.AutoScrollPosition.X, this.AutoScrollPosition.Y);
属性AutoScrollPosition表示的是滚动条的位置,滚动条移动了多少像素,坐标系就要平移多少像素。需要注意的是,AutoScrollPosition.X和AutoScrollPosition.Y均为负数,所以坐标原点实际上是向左上角平移的。
试一试:根据滚动条的位置调整坐标系
public partial class Form1 : Form
{
//构造函数
public Form1()
{
InitializeComponent();
//将窗体的背景色设置为白色
this.BackColor = Color.White;
//当工作区小于300×250像素时显示滚动条
this.AutoScrollMinSize = new Size(300, 250);
}
//重写OnPaint()方法
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
Graphics g = e.Graphics;
//平移坐标系
g.TranslateTransform(this.AutoScrollPosition.X, this.AutoScrollPosition.Y);
//绘制矩形和椭圆
g.FillRectangle(Brushes.LightPink, 0, 0, 200, 150);
g.FillEllipse(Brushes.LightGreen, 0, 150, 300, 100);
}
}
运行程序,结果如图17-27所示,一切正常。
图17-27 根据滚动条的位置调整坐标系的运行结果
- ››初学者对于三层框架的理解
- ››写给初学者:多线程系列( 十)——死锁(Deadlock)...
- ››写给初学者:多线程系列( 十一)——线程池(Thread...
- ››写给初学者:多线程系列(一)——线程的概念
- ››写给初学者:多线程系列(二)—— Thread类(线程类...
- ››写给初学者:多线程系列(三)——线程的优先级
- ››写给初学者:多线程系列(四)——线程的插入 Join(...
- ››写给初学者:多线程系列(五)——线程的状态
- ››写给初学者:多线程系列(六)——线程同步的概念
- ››写给初学者:多线程系列(七)——互锁(Interlocke...
- ››写给初学者:多线程系列(八)——管程类(Monitor类...
- ››写给初学者:多线程系列( 九)——互斥体(Mutex类...
更多精彩
赞助商链接