BOOL LineTo( int x, int y );
参数是int 类型的,如果要画的线长度超过了 int 类型的最大值,或者要画带小数点长度的线段,该如何处理呢?
参数是int 类型的,如果要画的线长度超过了 int 类型的最大值,或者要画带小数点长度的线段,该如何处理呢?
解决方案 »
- 求助:MFC开发ActiveX控件时,如何再引入ActiveX控件?
- 奇怪的问题:为什么会出现异常
- agg图形库在vc中的使用,输入汉字出现乱码
- vc ado 操作 access 数据库,当出现错误时,用e.ErrorMessage()来获取错误信息,但信息显示为:未指定的错误。怎样才能获取正确的错误信息?
- 在线:WaitCommEvent不能正常返回怎么回事?
- 如何改变CButton大小和位置
- 请教一个基本的问题:数字在网络里以什么形式被传送?
- 有关颜色的小问题
- 谁要手机程序的源代码
- 问个扫描文件的算法问题
- 绘制按钮时,使用了DrawIconEx,结果点击按钮时出现按钮闪动现象
- 求救:playsound函数的问题
个人认为,-2147483648~2147483647之间屏幕也够了,另外半个pixel也应该没法实现,不知要做什么处理,如果超出的话,要自己写这个函数了
至于AutoCAD画线的长度,man,逻辑座标和设备座标更本就不是一个概念。
基于像素的,当然只能是Int
用以cm,mm为单位,坐标系变换,LineTo()就不能用了
如果真的超过你可以中间在极限处截断一点,然后接着这个点画条新的不就可以了。
dc.SetMapMode(MM_ISOPROPIC);
dc.SetWindowExt(cx,cy);可按原先座標放大10-100倍都沒問題.
void CPictureView::OnInitialUpdate()
{
CScrollView::OnInitialUpdate(); CSize sizeTotal;
// TODO: calculate the total size of this view
sizeTotal.cx = sizeTotal.cy = 100000;
SetScrollSizes(MM_HIMETRIC, sizeTotal);//
}
查MSDN:
void SetScrollSizes( int nMapMode, SIZE sizeTotal, const SIZE& sizePage = sizeDefault, const SIZE& sizeLine = sizeDefault );Mapping Mode Logical Unit Positive y-axis Extends...
MM_TEXT 1 pixel Downward
MM_HIMETRIC 0.01 mm Upward
MM_TWIPS 1/1440 in Upward
MM_HIENGLISH 0.001 in Upward
MM_LOMETRIC 0.1 mm Upward
MM_LOENGLISH 0.01 in Upward 我将nMapMode设为MM_HIMETRIC,画直线时我将点坐标Double类型的值*100,再取整数部分,这样点的坐标是不是就可以精确到0.01mm了?
To use a CDC object, construct it, and then call its member functions that parallel Windows functions that use device contexts.Note Under Windows 95, all screen coordinates are limited to 16 bits. Therefore, an int passed to a CDC member function must lie in the range –32768 to 32767.你绘图时可以使用double数据,强制转化成int使用设备坐标的映射模式绘图,受设备的限制,不可能出现在两个象素点中间绘图画点的情况,所以使用整形来绘图就足够了置于上面说什么改MFC库,不可行,MFC最终都是调用Win API,比如LineTo调用::LineTo API函数
dc.SetMapMode(MM_ISOPROPIC);
dc.SetWindowExt(cx,cy);可按原先座標放大10-100倍都沒問題.
////
能否详细介绍一下啊?