怎样在VC++中,picture control 画坐标系>?
rt欢迎指教啊.... 才发现我的机器没有装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);//释放设备.
}
查了下资料,
发现漏了一点.
就是用完画笔后要select回原来的画笔.
可以在 CPen PenRed;后面加一句:CGdiObject *o = NULL;
在ReleaseDC(pDC);前加一句:pDC->SelectObject(o); 谢谢楼上的详细回复,如果我想把原点放到中心,有什么办法?
谢谢!!
[ 本帖最后由 yuyooo 于 2006-8-27 23:11 编辑 ] 自己重定义一下就可以了. 原帖由 hjack 于 2006-8-28 00:01 发表
自己重定义一下就可以了.
这个不明白
我看过一些资料说WINDOWS提供了几种映射方式,或称坐标系,也不明白,特讨教讨教
[ 本帖最后由 yuyooo 于 2006-8-28 01:09 编辑 ] 有一种是ClientToScreen(&rect); 把客户端坐标转化为屏幕坐标.这个应该不是你要的那个吧.
其它方法我不是很清楚.楼上要是知道可以分享一下.
还有一种比较笨的方法就是自己redefine一下.比如:
CPoint myCenter;
myCenter.x = rect.right/2;
myCenter.y = rect.bottom/2;
原帖由 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向上的坐标系的方法 pDC->SetMapMode(MM_LOMETRIC);可以实现坐标要求
但是新的问题:
如何控制画的线不跑到picture control 外呢??
同时我的坐标系是不随picture control 而改变的呢。
[ 本帖最后由 yuyooo 于 2006-8-29 16:08 编辑 ] 怎么以picture 的大小为坐标极限
页:
[1]