C++ MFC如何在对话框上画动态图 画图

作者&投稿:荡炭 (若有异议请与网页底部的电邮联系)
c++ mfc 对话框上绘制图形?~

首先,打开IDE,本人用的是VS2005(英文版),然后点file,new一个project,选Visual
C++目录下面的MFC,然后选中旁边Templates里的MFC
Application,再在下面的name栏里给你的工程取个名字,比如叫Test,最后点OK。
进入下一界面后会有一些关于当前工程的设置,在Application type中选dialog based,直接finish.
这样一个基于对话框的MFC简单工程就建成了。
然后再TestDlg.cpp里找到void CtestDlg::OnPaint(),在else里的CDialog::OnPaint();后面写
CClientDC dc(this);//选定当前画图环境
CPen pen(PS_SOLID,1,#ff0000);//做一支红色粗细为1的笔
dc.SelectObject(&pen);//将pen放到dc上
dc.Rectangle(100,100,200,200);//画一个矩形
完成!

FillRect 才是填充矩形。。。 你屌错函数了,而且该函数是API函数,并不是MFC框架的写法。。。MFC应该用。
CDC.FillRect 这样的形式才是标准的MFC方式,即使用CDC对象来画图。。。 如果你用了API就不能用 C开头的对象,
因为API不是MFC框架内容,它是GDI的函数,必须用句柄做参数。。。 这个一定要搞清楚。。。
还有 MFC基于的图形库GDI已经是个老掉牙过时的图形框架,用不着深究, MFC是可以用GDI+。。。。效果强出GDI 应该有10倍吧,你只需要添加
#include
using namespace Gdiplus;
并在初始化程序时调用 GdiplusStartup函数初始化GDI+即可轻松使用。。
使用GDI+之后你就完全不用理会什么CBrush 这些老套的东西了,你唯一要做的是把绘图用的 HDC句柄用于创建GDI+所用的Graphics对象就行(用途相当于CDC),之后就不用理会CDC中使用的绘图对象了。。。
当然虽然GDI+也是做界面中过时的东西了,但效果还是很强的,绝对和GDI有明显不一样的感觉,各种比较闪亮的画刷,比如各种渐近色画刷,图片按一定角度旋转,双缓冲功能(更新时画面防闪屏用),曲线斜线是抗锯齿的(更逼真),和其他新增绘图对象,用起来方便,效果强。。。。。
当然GDI+其实也是被微软淘汰的,但起码比GDI相比高出好几个档次,其他还有OpenGL ,DirectX等,就超级炫酷了,现在的比较炫酷的界面都是用这些,因为他们实际是3D图形引擎,原本是用来开发游戏的,但由于现在显卡越来越屌,没必要用GDI这种主要靠CPU完成绘图的图形库了,既影响速度又不美观。。。
常规APP开发,其实GDI+就够用了,而且可以轻松上手,和GDI很相似,但功能更强,更好用,而其他的就是另一个世界了,想会用需要下写功夫了。。。

void CMFCApplication2Dlg::OnPaint()
{
if (IsIconic())
{
//...
else
{
CPaintDC dc(this); // device context for painting

CPoint Pt[7];
Pt[0] = CPoint(20+m_incr, 50);
Pt[1] = CPoint(180+m_incr, 50);
Pt[2] = CPoint(180+m_incr, 20);
Pt[3] = CPoint(230+m_incr, 70);
Pt[4] = CPoint(180+m_incr, 120);
Pt[5] = CPoint(180+m_incr, 90);
Pt[6] = CPoint(20+m_incr, 90);
dc.Polygon( Pt, 7);

CDialogEx::OnPaint();
}
}
void CMFCApplication2Dlg::OnBnClickedButton1()//Move Arrow button
{
if ( m_nTimer )
{
KillTimer( m_nTimer );
m_nTimer = NULL;
}
else
m_nTimer = SetTimer(1, 20, 0);
}
void CMFCApplication2Dlg::OnTimer(UINT_PTR nIDEvent)
{
m_incr += 3;
Invalidate();
CDialogEx::OnTimer(nIDEvent);
}



http://blog.csdn.net/morewindows/article/details/8696730
请到上面这个链接上面看看吧,有关窗口画动画图片的“Windows界面编程第十一篇 位图显示特效 随机积木效果”。

使用GDI函数定时画图即可.

你可以在这个图片控件中画图,就看你画什么图,普通的几何图形还是图片


运城市14747615920: MFC按钮弹出对话框并在对话框动态显示一些文字的编程实现
楚符异烟: <p>自己新建一个对话框,然后在上面放一下static控件,把对话框标题清空,如图:</p> <p></p> <p> </p> <p>给对话框新建一个类,比如叫CMsgDlg,然后给static控件关联一个控件变量,比如叫m_lbMsg,</p> <p>然后添加两个成员变量:</p...

运城市14747615920: 请问在MFC中如何动态绘图? -
楚符异烟: 可以这样,两种方法: 一、可以在鼠标拖动点时,先擦除背景,然后再重绘所有的线(被拖动点的位置不断的在更新,其他点的位置不变). 二、鼠标拖动点时先用背景色画线覆盖掉这个点和其他两个点的以前的连线,然后再绘制新位置时的连线 可以使用Invalidate更新显示

运城市14747615920: MFC写程序怎么实现在对话框区域可以用鼠标随意画 -
楚符异烟: 你可以在 C*****Dlg 类中添加 对 WM_LBUTTONUP WM_LBUTTONDOWN WM__MOUSEMOVE的消息响应.其中,WM_LBUTTONDOWN消息响应中,记录绘图开始点,并建立画刷 WM__MOUSEMOVE消息响应中,画线 WM_LBUTTONUP 停止画线,删除画刷.OK了

运城市14747615920: c++ mfc 对话框上绘制图形? -
楚符异烟: 首先,打开IDE,本人用的是VS2005(英文版),然后点file,new一个project,选Visual C++目录下面的MFC,然后选中旁边Templates里的MFC Application,再在下面的name栏里给你的工程取个名字,比如叫Test,最后点OK.进入下一界面...

运城市14747615920: MFC动态画图 -
楚符异烟: CWnd *pWnd = GetDlgItem(IDC_DIAMETER);是获取控件IDC_DIAMETER的窗口对象指针,之后的画图是在控件IDC_DIAMETER的窗口里面画的,之后调用 pWnd->Invalidate();是使得控件IDC_DIAMETER窗口客户区域无效引起重绘.如...

运城市14747615920: 基于mfc怎么在对话框上动态创建一个列表框,里面是问题,旁边有个编辑框,用来输出问题的答案? -
楚符异烟: 你到底是要动态创建列表框还是编辑框?步骤 在对话框初始化中做以下几件事1先把TXT读入到内存结构中存储2给列表框填入问题 然后添加列表框的内容切换响应事件 在这个事件函数中 把对应的答案填到编辑框中

运城市14747615920: MFC对话框如何加载GIF动画 -
楚符异烟: 用GDI+的 Image类加载,要播放GIF的话,好想要按帧播放,看一下GDI+的介绍,应该就可以显示出来了

运城市14747615920: 在VC中MFC,新建对话框该如何建立控件啊?(比如static text , edit box等等) -
楚符异烟: 可以在工具箱中点击对应的图标.然后在对话框上画出即可,如动态创建,如cedit,CEdit* pEdit = new CEdit; pEdit->Create(ES_MULTILINE | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER, CRect(10, 10, 100, 100), this, 1);

运城市14747615920: 如何在MFC中添加gif动画 -
楚符异烟: 1.下载PictureEx2.拷贝PictureEx.h和PictureEx.cpp到工程目录3.在XXXDlg.h中,引入PictureEx.h (#include "PictureEx.h")4.在对话框拖放一个picture control控件5.对picture control控件添加控件变量:m_pic6.在XXXDlg.h中,找到刚添加的控件变量定义行,改为:CPictureEx m_pic;7.需要显示时:m_pic.Load(_T("D:\\1.gif")); m_pic.Draw();

运城市14747615920: VC++基于对话框的画图程序:怎么在对话框窗口中绘图?? -
楚符异烟: 我是青岛双硕程序员培训学校VC++老师,很乐业为您解答:1、右上部分您可以用任何控件,譬如:CButton,假设其ID号:ID_BUTTON1;2、CWnd *pi=GetDlgItem(ID_BUTT...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网