如何在窗口中绘制图形? 我想在一个窗体,比如说对话框中,我想在其上的某一个确定的位置上绘制一个图形(比如一个矩形),我应该怎么做呢?我听一位高人指点说最后的办法是在对话框上放置一个Picture控件,取消其Visible属性,然后取得其大小就可以绘制了。但我应该这么确定其所在的窗口位置呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你再开始用Create创建这个控键的时候,就可以确定它的位置了。 把你的绘图代码放在OnPaint()里就行了 在我的电脑/……/MYPROJECT/打开你的工程文件夹,用记事本方式打开其中的…….rc文件,你会看到关于你创建的窗口、资源的好多信息,确定位置不成问题。 直接画就可以如下列代码:// 在OnPaint()最下面的加上下面的代码CClientDC dc(this);dc.Rectangle(10,10,100,100);不就可以了吗? CDC *pDC = GetDC();用pDC画就可以了! TO badboy_qiu: 没错,右下角是有显示的,但你不知道它们的单位不是像素吗? ~~~TO wanglei888: 代码当然是应该放在OnPaint()代码中的!总之,可能是我描述的问题不清楚的缘故吧,各位朋友的理解与我要问的有相当的距离! 我的意思是说:比如在一个对话框中有一些控件,比如说OK按钮,cancel按钮等等,此时我想在上面绘制图形,但总不能让图形把按钮覆盖住吧。因此我在上面先放置一个Picture控件,设置好大小和位置,但应该怎么在程序中查询以确定其位置和大小呢?只有得到这些信息后才能进行绘图呀? ~~~~~~~~~ CRect rect;m_Picture->GetClientRect(&rect);//rect就是PICTURE控件的位置 我想把刚才与 nanjianhui 老兄的谈话才重复一下,或许能够把问题说的更明白些:我想用一个对话框,然后想在对话框中绘制一些形状,比如矩形,椭圆等,但我想事先设定一个位置;但我不想直接通过试验决定位置,而是想由一个事先设定好的控件来决定其在对话框中的位置和大小,这样如果我在对话框编辑器中改变其大小和位置就可以间接的改变了它的位置和大小,我应该这么办呢?关键是怎么得到这个控件在对话框中的位置和大小?大小是可以通过GetClientRect()得到,但位置怎么办呢?看来可能是问题有一定的难度吧?!等到今天还是没有结果,我决定再加50分,希望各位高手高手高高手们帮忙。分数不够可以再加! GetDlgItem(IDC_STATIC_PICTURE)->GetWindowDC(rect); //get the positionrect.PtInRect(point); //判断鼠标位置OnPaint(){////////////dc.Rectangle(point1.x,point1.y,point2.x,point2.y);//point1 为 lbuttondown()中的mouse point; point2 为onmousemove()中的mouse point; } 太容易了,你不就想知道该控件在对话框中的相对位置嘛,比如你有一个button你先用MyDlg.GetWindowRect(&rect1), 再用MyButt.GetWindowRect(&rect2)button在对话框中的作标:point.x = rect2.left - rect1.left point.y = rect2.top - rect1.top To WEIWEI2002: GetWindowRect()我也想到过了,但这个函数得到rect是相当于窗口的,而不是相当于当前对话框的,我了解没有错误吧!? 得到他的窗口句柄是很简单的——GetDlgItem()就OK了!但能够得到窗口rect的函数我知道只有:GetWindowRect()——相当于桌面窗口的;GetClientRect()——相当于它它自己的;但好像它们都不能没有这里的要求!即它们只能得到控件的大小(width,height),而不能得到控件相当于对话框的实际位置,而这里需要得到相当于对话框的位置后才能绘制图形呀? the first is get the picture device handle which is called hdc 和在VIEW中的绘制是一个方法啊,关键是坐标的计算 。这个要对 CRECT CPOINT CSIZE一些要非常熟练才行 就是在控件上绘图,重载控件的drawItem To ymbymb: 老兄,我又仔细看了看你的回复,抱歉,一开始没有仔细看,原来你是又在原来的基础上作了一次减法,我想构思应该可以成功,我先试试!但顺便再问一下,难得这么常用的功能,在windows中居然没有直接的API函数吗?不是有高手保留了吧?欢迎各路高手提供宝贵的回答!!! MS是不会为了一个减法而浪费可贵的api资源的 宝贵的api资源?~~真的吗? API有的,好像是offset(xxx)不过那个函数也是二次封装的,不算SDK的API“但顺便再问一下,难得这么常用的功能,在windows中居然没有直接的API函数吗?不是有高手保留了吧?”我倒觉得你这句话很高笑~~~ 我想你说的是指CRect类的成员函数吧!? 已经结贴!最终看来还是 ymbymb 的方法正确!谢谢各位的参与,来者皆为客,每位也多少分一点了! 提示框的问题 struct 指针的问题 欢迎加入VC技术群:4670365! 应该用怎么样的代码实现以下问题??(请高手急救) 各位高手:不同的网络之间怎么实现点对点通信:Adsl拨号上网 与 普通拨号上网 求教文件结构问题。 GetDlgItem()在主線程序和非主線程內使用時的不同! 分析一个url得到网址和端口号,怎么写才能最好,且比较高效 windows 2000/NT 中如何取得user、group信息? 请问:如何实现计算CString中表达式的值? 关于HTTP通讯,如何下载虚拟主机上的文件? 关于it业的薪资问题
…….rc文件,你会看到关于你创建的窗口、资源的好多信息,确定位置不成问题。
如下列代码:
// 在OnPaint()最下面的加上下面的代码
CClientDC dc(this);
dc.Rectangle(10,10,100,100);
不就可以了吗?
没错,右下角是有显示的,但你不知道它们的单位不是像素吗?
~~~TO wanglei888:
代码当然是应该放在OnPaint()代码中的!总之,可能是我描述的问题不清楚的缘故吧,各位朋友的理解与我要问的有相当的距离!
比如在一个对话框中有一些控件,比如说OK按钮,cancel按钮等等,此时我想在上面绘制图形,但总不能让图形把按钮覆盖住吧。
因此我在上面先放置一个Picture控件,设置好大小和位置,但应该怎么在程序中查询以确定其位置和大小呢?只有得到这些信息后才能进行绘图呀?
~~~~~~~~~
m_Picture->GetClientRect(&rect);//rect就是PICTURE控件的位置
关键是怎么得到这个控件在对话框中的位置和大小?
大小是可以通过GetClientRect()得到,但位置怎么办呢?看来可能是问题有一定的难度吧?!等到今天还是没有结果,我决定再加50分,希望各位高手高手高高手们帮忙。
分数不够可以再加!
rect.PtInRect(point); //判断鼠标位置
OnPaint()
{
////////////
dc.Rectangle(point1.x,point1.y,point2.x,point2.y);//point1 为 lbuttondown()中的mouse point; point2 为onmousemove()中的mouse point;
}
你先用MyDlg.GetWindowRect(&rect1), 再用MyButt.GetWindowRect(&rect2)
button在对话框中的作标:point.x = rect2.left - rect1.left
point.y = rect2.top - rect1.top
GetWindowRect()我也想到过了,但这个函数得到rect是相当于窗口的,而不是相当于当前对话框的,我了解没有错误吧!?
GetWindowRect()——相当于桌面窗口的;
GetClientRect()——相当于它它自己的;
但好像它们都不能没有这里的要求!即它们只能得到控件的大小(width,height),而不能得到控件相当于对话框的实际位置,而这里需要得到相当于对话框的位置后才能绘制图形呀?
老兄,我又仔细看了看你的回复,抱歉,一开始没有仔细看,原来你是又在原来的基础上作了一次减法,我想构思应该可以成功,我先试试!但顺便再问一下,难得这么常用的功能,在windows中居然没有直接的API函数吗?
不是有高手保留了吧?欢迎各路高手提供宝贵的回答!!!
~~
真的吗?
不是有高手保留了吧?”我倒觉得你这句话很高笑~~~
最终看来还是 ymbymb 的方法正确!谢谢各位的参与,来者皆为客,每位也多少分一点了!