工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 6199|回复: 9

怎样在VC++中,picture control 画坐标系>?

[复制链接]
发表于 2006-8-24 19:41 | 显示全部楼层 |阅读模式
rt
  欢迎指教啊....
发表于 2006-8-27 13:47 | 显示全部楼层
才发现我的机器没有装VC

于是装了个6.0的.

很久没接触VC了,

大概应该可以这样实现:

添加一个button,双击产生一个onButton1()的函数.

我现在要实现的是点击button就可以画一个红色的坐标.


  1. void CTestDlg::OnButton1()
  2. {
  3.         // TODO: Add your control notification handler code here
  4.         //LineTo
  5.         CWnd *pWnd = NULL;
  6.         CDC *pDC = NULL;
  7.         CPen PenRed;
  8.         PenRed.CreatePen(PS_SOLID,1,RGB(255,0,0));//创建一支红色的画笔.
  9.         pWnd = GetDlgItem(IDC_STATIC); //IDC_STATIC是picture control的ID.这句是得到picture的句柄.
  10.         pDC = pWnd->GetDC();//然后得到设备环境.
  11.         RECT rect;//声明一个rect
  12.         pWnd->GetClientRect(&rect);//并把picture控件的坐标用rect接收.
  13.         pDC->SelectObject(PenRed);//选中画笔.
  14.         pDC->MoveTo(0,rect.bottom/2);//与下面的lineto实现画x
  15.         pDC->LineTo(rect.right,rect.bottom/2);
  16.         pDC->MoveTo(rect.right/2,0);//与下面的lineto实现画y
  17.         pDC->LineTo(rect.right/2,rect.bottom);
  18.         ReleaseDC(pDC);//释放设备.
  19. }
复制代码
回复

使用道具 举报

发表于 2006-8-27 13:59 | 显示全部楼层
查了下资料,

发现漏了一点.

就是用完画笔后要select回原来的画笔.

可以在 CPen PenRed;后面加一句:CGdiObject *o = NULL;

在ReleaseDC(pDC);前加一句:pDC->SelectObject(o);
回复

使用道具 举报

 楼主| 发表于 2006-8-27 23:09 | 显示全部楼层
谢谢楼上的详细回复,如果我想把原点放到中心,有什么办法?
谢谢!!

[ 本帖最后由 yuyooo 于 2006-8-27 23:11 编辑 ]
回复

使用道具 举报

发表于 2006-8-28 00:01 | 显示全部楼层
自己重定义一下就可以了.
回复

使用道具 举报

 楼主| 发表于 2006-8-28 01:07 | 显示全部楼层
原帖由 hjack 于 2006-8-28 00:01 发表
自己重定义一下就可以了.

这个不明白
我看过一些资料说WINDOWS提供了几种映射方式,或称坐标系,也不明白,特讨教讨教

[ 本帖最后由 yuyooo 于 2006-8-28 01:09 编辑 ]
回复

使用道具 举报

发表于 2006-8-28 02:05 | 显示全部楼层
有一种是ClientToScreen(&rect); 把客户端坐标转化为屏幕坐标.这个应该不是你要的那个吧.

其它方法我不是很清楚.楼上要是知道可以分享一下.

还有一种比较笨的方法就是自己redefine一下.比如:

  1.         CPoint myCenter;
  2.         myCenter.x = rect.right/2;
  3.         myCenter.y = rect.bottom/2;
复制代码
回复

使用道具 举报

 楼主| 发表于 2006-8-28 19:17 | 显示全部楼层
原帖由 hjack 于 2006-8-28 02:05 发表
有一种是ClientToScreen(&rect); 把客户端坐标转化为屏幕坐标.这个应该不是你要的那个吧.

其它方法我不是很清楚.楼上要是知道可以分享一下.

还有一种比较笨的方法就是自己redefine一下.比如:

        CPoin ...

如果这样定义,坐标的走向仍然是向右和向下,没有改变
         这样来
          pDC->SetViewportExt(rect.right,rect.bottom);
          pDC->SetViewportOrg(rect.right/2, rect.bottom/2);
定义也一样,还没有找到方法来定义x向右,y向上的坐标系的方法
回复

使用道具 举报

 楼主| 发表于 2006-8-29 16:05 | 显示全部楼层
pDC->SetMapMode(MM_LOMETRIC);可以实现坐标要求
但是新的问题:
  如何控制画的线不跑到picture control 外呢??
同时我的坐标系是不随picture control 而改变的呢。

[ 本帖最后由 yuyooo 于 2006-8-29 16:08 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2006-8-30 11:42 | 显示全部楼层
怎么以picture 的大小为坐标极限
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

QQ|Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2025-5-15 06:58

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表