作图区坐标系的设置问题
映射模式有MM_LOMETRIC、MM_HIMETRIC、MM_LOENGLISH、MM_HIENGLISH、MM_TWIPS种。
它们默认的坐标原点都使在左上角。其区别在于每一个逻辑单位对应的物理大小不一样。
所对用的逻辑单位分别为0.1毫米,0.01毫米,0.01英寸,0.001英寸,1/1440英寸(0.00
07英寸)。
我在窗体上放置一个ScrollBox,然后在这个ScrollBox上拖动图形控件作图。由于默认
的
坐标系是MM_TEXT,逻辑单位为象素,这样图形链接的时候很不精确,我想把我的作图区坐
标设置成MM_TWIPS,这样逻辑单位就是1/20象素,在两个图形控件相连时,可以很精确的
对齐了。请问具体改怎么设置?
我自己试着写了一下
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
SetMapMode(Form1->Canvas->Handle,MM_TWIPS);
}
//-------------------------------------------------------------------------
void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift,
int X, int Y)
{
TVarRec tempvar1[2] = {X, Y};
StatusBar1->Panels->Items[0]->Text=Format("当前位置: (%d, %d)", tempvar1, 2)
;
}
按理状态条上应该是以1/20象素为单位显示的坐标,可是,结果还是按象素显示。
而且,如果我要设置ScrollBox的话,ScrollBox没有Canvas对象,那要怎么设置呢?
问题点数:0、回复次数:9Top
1 楼constantine(飘遥的安吉儿)回复于 2003-12-03 15:05:22 得分 0
建议放弃ScrollBox,图象的移动就像ACDSEE一样处理,这样就不用考虑ScrollBox的问题了Top
2 楼zhvickie(相信)回复于 2003-12-03 20:29:23 得分 0
具体一点。
我也想知道,顶Top
3 楼vdragon(紫龙)回复于 2003-12-03 21:55:51 得分 0
void __fastcall TForm1::FormMouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
SetMapMode(Form1->Handle,MM_TWIPS);
TPoint* pt;
pt->x=X;
pt->y=Y;
Text1->Text=pt->x;
DPtoLP(Form1->Handle,pt,1);
Text2->Text=pt->x;
}
按道理,Text2显示的值是Text1的值的20倍,可是结果却是相等的,也就是我这个坐标转换根本没有成功,请问正确的该怎么做?Top
4 楼vdragon(紫龙)回复于 2003-12-03 21:57:56 得分 0
知道了,我改成
Form1->Canvas->Handle就可以了,忘记了:(
但是,对于ScrollBox这种没有Canvas的控件,该怎么转换坐标呢?Top
5 楼laishishenghust(好好学习)回复于 2003-12-30 14:36:51 得分 0
markerTop
6 楼goneaway1981(当我们踏上征程)回复于 2003-12-31 09:15:24 得分 0
学习Top
7 楼goneaway1981(当我们踏上征程)回复于 2003-12-31 09:50:35 得分 0
我也用这个函数试了试,怎么没有变化啊~~~~~Top
8 楼emsi(TObject *Sender)回复于 2003-12-31 11:45:36 得分 0
楼主提供的源码有好几处错误.
楼上的当然不能看到变化了.
将构造函数里的那一行删掉.
void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
TPoint* pt=new TPoint();
pt->x=X;
pt->y=Y;
Text1->Text=pt->x;
SetMapMode(Form1->Canvas->Handle,MM_TWIPS);
DPtoLP(Form1->Canvas->Handle,pt,1);
Text2->Text=pt->x;
}Top
9 楼emsi(TObject *Sender)回复于 2003-12-31 11:51:40 得分 0
至于要在ScrollBox里产生Canvas.简单的方法就是放一个PaintBox进去.利用PaintBox的Canvas进行绘图.不知能不能满足楼主的要求?Top




