VC中利用MFC设计绘图程序初步

首先我们说下通过鼠标的移动来绘制直线。

这里要捕获到鼠标的两个消息: WM_LBUTTONDOWN, WM_LBUTTONUP。响应WM_LBUTTONDOWN消息记录直线的起始点,响应 WM_LBUTTONUP消息记录直线的终点并绘制直线。

好了,我们看看怎么响应。

void CDrawView::OnLButtonDown(UINT nFlags, CPoint point)
{
  //MessageBox("Left Button Clicks DrawView");
 m_ptOrigin = point ; //这里先定义了一个内部变量保存直线的起始点
 CView::OnLButtonDown(nFlags, point);
}

下面看看响应WM_LBUTTONUP消息记录直线的终点并绘制直线。

//方法一
void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
 HDC hdc;
 hdc = ::GetDC(m_hWnd); //调用全局函数
 MoveToEx (hdc,m_ptOrigin.x,m_ptOrigin.y,0);
 LineTo(hdc,point.x,point.y);
 ::ReleaseDC(m_hWnd,hdc);
 CView::OnLButtonUp(nFlags, point);
}
//方法二
void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
 CDC *pDC = GetDC();
 pDC->MoveTo(m_ptOrigin);
 pDC->LineTo (point);
 ReleaseDC(pDC);
}
//方法三
void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
 CClientDC dc (this) ; //CClientDC对象构造的时候就调用了GetDC,析构的时候调用
 ReleaseDC ,只能访问客户区
 CClientDC dc(GetParent());
 dc.MoveTo (m_ptOrigin);
 dc.LineTo(point);
}
//方法四
void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
 CWindowDC dc (this) ; //CWindowDC可以访问客户区和非客户区
 dc.MoveTo(m_ptOrigin);
 dc.LineTo(point);
}
void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
 CWindowDC dc(GetDesktopWindow()) ; //现在可以访问桌面
 dc.MoveTo(m_ptOrigin);
 dc.LineTo(point);
}

时间: 2024-09-29 22:36:19

VC中利用MFC设计绘图程序初步的相关文章

在vs2010中利用mfc写一个连连看游戏时各种资源窗口啥的等都报“未声明的标识符”问题

问题描述 在vs2010中利用mfc写一个连连看游戏时各种资源窗口啥的等都报"未声明的标识符"问题 10C 写这个连连看游戏刚开始导入各种资源文件改好ID后运行正常,但通过进一步的编程后不知道为什么开始报各种"未声明的标识符"bug(可能中途改了一些什么设置.....)现项目最近运行的log文件如下: 生成启动时间为 2016/5/26 17:37:08. 1>项目"C:UsersAliezdocumentsvisual studio 2010Pro

vc++-用VC++6.0 MFC 写扫雷程序步骤

问题描述 用VC++6.0 MFC 写扫雷程序步骤 有没有具体的程序设计实验报告之类的网上的步骤有的地方看不懂谢谢 解决方案 有的地方看不懂,你也要具体的说出来,否则别人怎么知道你是哪里看懂了.哪里没有看懂. 最好当然是将你没有看懂的.具体的提问题出来.

VC++中利用MSXML解析XML文档

c++|xml 四.程序实现 下面通过一个具体的实例来说明在VC++中如何利用MSXML解析XML文档. (1)源XML文档(xmlfile.xml)如下: <?xml version="1.0" encoding="GB2312"?> <Device id="10041" name="设备1"> <Type>13</Type> <TypeName>保护</Ty

VC中使用GetModuleFileName获取应用程序路径

  .\\与API函数GetModuleFileName获取应用程序目录有何不一样? 采用.\\也能获得应用程序目录,采用GetModuleFileName也能获得,二者有何不同? 一样!一个是相对路径,一个是绝对路径 .\\是的到应用程序的当前目录,但当前目录不一定等于应用程序执行文件的所在目录,一个应用程序被启动时,当前目录是可以被任意设置的.GetModuleFileName()得到模块的完整路径名,例如,你载入c:\windows\system32\a.dll,得到模块句柄h,则你可以用

VC中利用FLASH制作图声并茂的动画程序

前言: FLASH是一种功能强大的矢量动画,可以制作出各种华丽的电影效果,应用非常广泛!这也给予我们一个启迪:如果在VC程序中能够播放FLASH动画,将为程序增色不少,而且许多原本不易实现的功能,现在都可以轻松实现! 像金山词霸的安装程序主控界面就利用了FLASH,效果相当好.本文中笔者将制作一个完整的多媒体软件,将一些关键性技术介绍给大家,并提供全部代码供大家参考. 本文使用到的关键性技术: (1)利用VB制作MS AGENT播放模块. (2)将该播放模块.FLASH动画文件SWF与其它必要资

VC中利用多线程技术实现线程之间的通信

文章来源:[url]http://www.programfan.com/article/showarticle.asp?id=2951[/url] 当前流行的Windows操作系统能同时运行几个程序(独立运行的程序又称之为进程),对于同一个程序,它又可以分成若干个独立的执行流,我们称之为线程,线程提供了多任务处理的能力.用进程和线程的观点来研究软件是当今普遍采用的方法,进程和线程的概念的出现,对提高软件的并行性有着重要的意义.现在的大型应用软件无一不是多线程多任务处理,单线程的软件是不可想象的.

在VC中实现全屏窗口程序

全屏显示是一些应用软件程序必不可少的功能.比如在用VC++编辑工程源文件或编辑对话框等资源时,选择菜单"ViewFull Screen",即可进入全屏显示状态,按"Esc"键后会退出全屏显示状态. 在VC++6.0中我们用AppWizard按默认方式生成单文档界面的应用程序框架.下面将先讨论点击菜单项"ViewFull Screen"实现全屏显示的方法,再讲述按"Esc"键后如何退出全屏显示状态. 1) 在CMainFrame

VC++中利用/GS开关防止缓冲区溢出

缓冲区溢出通常表现为一个最为常见的漏洞而存在于今天的各种软件之中,黑客可以用恶意的输入,从而更改程序的执行流程,由此入侵相应的进程.电脑.或整个域.如果进程运行于一个高度受信的账户之下,如管理员或本地系统账户,那么黑客带来的破坏将是极其严重,并有潜在广泛传播的危险.近几年来爆发的一些"知名"病毒,如红色代码.冲击波.震荡波等等,都源于C/C++代码缓冲区溢出的结果. 从程序的角度来看,缓冲区溢出只是一个再简单不过的编程错误--都是关于复制一个内存区域的内容到另一个内存区域,而目标内存区

在VC中调用默认的电子邮件程序发送邮件

程序|发送邮件 很多时候大家需要在程序中发送邮件,自己编又太麻烦,怎么办,呵呵,有现成的! 1.想省事儿的,用ShellExecute函数: ShellExecute(NULL,NULL,"mailto:email@263.net",NULL,NULL,SW_SHOW); 2.如果想自己多处理一些东西的话,比如加上默认的帐号.密码.附件等,就可以调用系统的Mapi函数.具体的用法大家可以去查MSDN都是以MAPI开头的,如MAPILogon.MAPISendMail等.下面这段代码演示