VC++随鼠标移动显示坐标和坐标映射模式学习 |
您所在的位置:网站首页 › mfc控制鼠标移动 › VC++随鼠标移动显示坐标和坐标映射模式学习 |
VC6,新建一个单文档工程; 把这两个加到视类头文件; CPoint m_ptOut; //用来保存鼠标坐标 CString strPosition; //用来保存输出的内容 视类CPP的构造函数中初始化, m_ptOut.x = 0; m_ptOut.y = 0; 用类向导为视类添加鼠标移动消息处理函数,该函数代码如下; void CMmView::OnMouseMove(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default //this->GetDC()->SetMapMode(MM_HIENGLISH); m_ptOut.x = point.x; m_ptOut.y = point.y; Invalidate(); CView::OnMouseMove(nFlags, point); }OnDraw()函数代码如下; void CMmView::OnDraw(CDC* pDC) { CMmDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here //pDC->SetMapMode(MM_TEXT); //pDC->SetMapMode(MM_HIENGLISH); strPosition.Format("当前鼠标坐标:%d,%d", m_ptOut.x,m_ptOut.y); pDC->TextOut(m_ptOut.x,m_ptOut.y,strPosition); }运行如下; 这时是默认的坐标映射模式MM_TEXT; 坐标映射模式的概念; 由逻辑窗口到物理视口的映射过程: 在窗口坐标系(一般是X轴向右递增,Y轴向上递增,即与笛卡尔坐标系一致,而坐标单位是用户自定义的)上绘图,然后要在视口坐标系(一般坐标原点在屏幕视图的左上角,X轴向右递增,Y轴向下为正方向)下显示,坐标映射方式则规定了窗口和视口的范围,各轴的相对方向、原点或缩放比例等; 八种映射方式: MM_TEXT(默认的坐标映射方式) MM_HIENGLISH(高精度英制坐标系) 1单位 = 0.001英寸 MM_LOENGLISH(低精度英制坐标系) 1单位 = 0.01英寸 MM_HIMETRIC(高精度公制坐标系) 1 单位 = 0.01毫米 MM_LOMETRIC(低精度公制坐标系) 1 单位 = 0.1毫米 MM_TWIPS(排版坐标系) 1 单位 = 1缇 = 1/1440英寸 MM_ISOTROPIC(各向同性坐标系,x与y单位相等) MM_ANISOTROPIC(各向异性坐标系,x与y单位不等) 想看一下改为其他映射方式的情况; MFC提供的SetMapMode函数是从pDC来调用; pDC->SetMapMode(MM_HIENGLISH); 如果在OnDraw()里加上这句,或者在OnMouseMove里也加上这句, this->GetDC()->SetMapMode(MM_HIENGLISH); 则运行如下,只能在很小的范围内显示数值;有时间继续;
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |