yuyooo 发表于 2006-8-24 19:41

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

rt
欢迎指教啊....

hjack 发表于 2006-8-27 13:47

才发现我的机器没有装VC

于是装了个6.0的.

很久没接触VC了,

大概应该可以这样实现:

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

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


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

hjack 发表于 2006-8-27 13:59

查了下资料,

发现漏了一点.

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

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

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

yuyooo 发表于 2006-8-27 23:09

谢谢楼上的详细回复,如果我想把原点放到中心,有什么办法?
谢谢!!

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

hjack 发表于 2006-8-28 00:01

自己重定义一下就可以了.

yuyooo 发表于 2006-8-28 01:07

原帖由 hjack 于 2006-8-28 00:01 发表
自己重定义一下就可以了.
这个不明白
我看过一些资料说WINDOWS提供了几种映射方式,或称坐标系,也不明白,特讨教讨教

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

hjack 发表于 2006-8-28 02:05

有一种是ClientToScreen(&rect); 把客户端坐标转化为屏幕坐标.这个应该不是你要的那个吧.

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

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

        CPoint myCenter;
        myCenter.x = rect.right/2;
        myCenter.y = rect.bottom/2;

yuyooo 发表于 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向上的坐标系的方法

yuyooo 发表于 2006-8-29 16:05

pDC->SetMapMode(MM_LOMETRIC);可以实现坐标要求
但是新的问题:
如何控制画的线不跑到picture control 外呢??
同时我的坐标系是不随picture control 而改变的呢。

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

yuyooo 发表于 2006-8-30 11:42

怎么以picture 的大小为坐标极限
页: [1]
查看完整版本: 怎样在VC++中,picture control 画坐标系>?