VC绘图中CPaintDC类和CRect类等涉及到的实际选中区域大小
作者: gadflycq 日期:2008-08-04
一、VC中在当前窗口中绘图涉及到的坐标系

二、CPaintDC类中的LineTo等函数实际绘图区域
LineTo(x,y)函数从当前点画一条直线到坐标为(x,y)的点。具体精确到每一个象素则实际上是从当前点(包括当前点)画到坐标为(x,y)之前的一个象素点,并不包括(x,y)这一点本身。例如:
CPaintDC dc;
dc.MoveTo(50,50);
dc.LineTo(100,50); //实际直线是从坐标为(50,50)象素到坐标为(99,50)的象素点
如下图:

再如:
dc.MoveTo(50,50);
dc.LineTo(50,100); //实际直线是从坐标为(50,50)象素到坐标为(50,99)的象素点
dc.MoveTo(50,50);
dc.LineTo(100,100); //实际直线是从坐标为(50,50)象素到坐标为(99,99)的象素点
三、CRect类中的SetRect函数实际选中区域
SetRect(x1,y1,x2,y2)函数选中当前窗口中自左上角坐标为(x1,y1)到右下角坐标为(x2,y2)的区域。这个区域具体精确到每一个象素则实际上是包括最左上角坐标为(x1,y1)的象素到右下角坐标为(x2-1,y2-1)的象素之间的矩形区域。
如下图所示,SetRect(x,y,x+4,y+2)函数实际选中的象素区域是除去最下边一行象素和最右边一列象素后的矩形区域。再如SetRect(x,y,x+1,y+1)选中的区域就只有(x,y)这一个象素点;而SetRect(x1,y,x2,y) 和SetRect(x,y1,x,y2)将不会选中任何区域。
