几种画直线的方法-孙鑫C++笔记

// HDC画直线
CPoint m_ptOrigin ;
void CDrawView::OnLButtonDown(UINT nFlags, CPoint point)
{
  m_ptOrigin = point;
  CView::OnLButtonDown(nFlags, point);
}
void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
  HDC hdc;
  hdc = ::GetDC(m_hWnd);
  MoveToEx(hdc, m_ptOrigin.x, m_ptOrigin.y, NULL);
  LineTo(hdc, point.x, point.y);
  ::ReleaseDC(m_hWnd, hdc);

  CView::OnLButtonUp(nFlags, point);
}

// CDC画直线
void CDrawView::OnLButtonDown(UINT nFlags, CPoint point)
{
  m_ptOrigin = point;
  CView::OnLButtonDown(nFlags, point);
}
void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
  CDC *pDC = GetDC();
  pDC->MoveTo(m_ptOrigin);
  pDC->LineTo(point);
  ReleaseDC(pDC);

  CView::OnLButtonUp(nFlags, point);
}

// CClientDC、CWindowDC画直线
void CDrawView::OnLButtonDown(UINT nFlags, CPoint point)
{
  m_ptOrigin = point;
  CView::OnLButtonDown(nFlags, point);
}
void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
  CClientDC dc(this);          //画到客户区
  CClientDC dc(GetParent());      //画到客户区+工具栏
  CWindowDC dc(this);          //画到客户区
  CWindowDC dc(GetParent());  //画到客户区+工具栏+菜单栏+标题栏
  CWindowDC dc(GetDesktopWindow());  //画到整个屏幕窗口
  dc.MoveTo(m_ptOrigin);
  dc.LineTo(point);

  CView::OnLButtonUp(nFlags, point);
}

//带颜色的直线
void CDrawView::OnLButtonDown(UINT nFlags, CPoint point)
{
  m_ptOrigin = point;
  CView::OnLButtonDown(nFlags, point);
}
void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
  CPen pen(PS_SOLID, 1, RGB(255, 0, 0));
  CClientDC dc(this);
  CPen *pOldPen = dc.SelectObject(&pen);
  dc.MoveTo(m_ptOrigin);
  dc.LineTo(point);
  dc.SelectObject(pOldPen);

  CView::OnLButtonUp(nFlags, point);
}

//画刷
void CDrawView::OnLButtonDown(UINT nFlags, CPoint point)
{
  m_ptOrigin = point;
  CView::OnLButtonDown(nFlags, point);
}
void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
  CBrush brush(RGB(255, 0, 0));
  CClientDC dc(this);
  dc.FillRect(CRect(m_ptOrigin, point), &brush);

  CView::OnLButtonUp(nFlags, point);
}
//位图画刷
void CDrawView::OnLButtonDown(UINT nFlags, CPoint point)
{
  m_ptOrigin = point;
  CView::OnLButtonDown(nFlags, point);
}
void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
  CBitmap bitmap;
  bitmap.LoadBitmap(IDB_BITMAP1);
  CBrush brush(&bitmap);
  CClientDC dc(this);
  dc.FillRect(CRect(m_ptOrigin, point), &brush);

  CView::OnLButtonUp(nFlags, point);
}
//透明画刷
void CDrawView::OnLButtonDown(UINT nFlags, CPoint point)
{
  m_ptOrigin = point;
  CView::OnLButtonDown(nFlags, point);
}
void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
  CClientDC dc(this);
  // dc.Rectangle(CRect(m_ptOrigin, point)); //不透明
  CBrush *pBrush = CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
  CBrush *pOldBrush = dc.SelectObject(pBrush);
  dc.Rectangle(CRect(m_ptOrigin, point));
  dc.SelectObject(pOldBrush);    //透明

  CView::OnLButtonUp(nFlags, point);
}
//用画笔写字
void CDrawView::OnLButtonDown(UINT nFlags, CPoint point)
{
  m_ptOrigin = point;
  m_bDraw = TRUE;
  CView::OnLButtonDown(nFlags, point);
}
void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
  m_bDraw = FALSE;
  CView::OnLButtonUp(nFlags, point);
}
void CDrawView::OnMouseMove(UINT nFlags, CPoint point)
{
  CClientDC dc(this);
  CPen pen(PS_SOLID, 1, RGB(255, 0, 0));
  CPen *pOldPen = dc.SelectObject(&pen);
  if(m_bDraw == TRUE)  {
    dc.MoveTo(m_ptOrigin);
    dc.LineTo(point);
    m_ptOrigin = point;
  }
  dc.SelectObject(pOldPen);

  CView::OnMouseMove(nFlags, point);
}

//画扇形
CPoint m_ptOld;
void CDrawView::OnLButtonDown(UINT nFlags, CPoint point)
{
  m_ptOrigin = m_ptOld = point;
  m_bDraw = TRUE;
  CView::OnLButtonDown(nFlags, point);
}
void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
  m_bDraw = FALSE;
  CView::OnLButtonUp(nFlags, point);
}
void CDrawView::OnMouseMove(UINT nFlags, CPoint point)
{
  CClientDC dc(this);
  CPen pen(PS_SOLID, 1, RGB(255, 0, 0));
  CPen *pOldPen = dc.SelectObject(&pen);
  if(m_bDraw == TRUE)  {
    dc.MoveTo(m_ptOrigin);
    dc.LineTo(m_ptOld);
    // dc.MoveTo(m_ptOrigin); // 不带边线
    dc.MoveTo(m_ptOld);    // 带边线
    dc.LineTo(point);
    m_ptOld = point;
  }
  dc.SelectObject(pOldPen);

  CView::OnMouseMove(nFlags, point);
}
时间: 2024-10-09 21:37:18

几种画直线的方法-孙鑫C++笔记的相关文章

SDL系列之 - 用画直线的方法来画正弦曲线

线段长度无限短后就成为点,所以,现在让我们用画直线的方法来画正弦曲线吧 1 #include <SDL.h> 2 #include <stdlib.h> 3 #include <string.h> 4 #include <math.h> 5 #include "SDL_draw.h" //包含SDL_draw库的头文件 6 int main() 7 { 8 int i; 9 double t; 10 double x,y; 11 doub

鼠绘(3)[一种画树的方法]

最近研究出来用鼠标画树的方法,分享给大家 软件 Photoshop 工具 画笔 画笔属性 硬边的圆形画笔,画笔大小从4-20,如下图: 不透明度调整为80%,如下图: 主要颜色 树干颜色色板如下: 树叶颜色色板如下: 具体步骤 首先,当然是画树干,先新建一个图层(新建图层的方法用PS的人都知道,我就不说了),然后用树干色板中的第一个颜色把树干的轮廓画出来 PS:不是一般的丑,哈哈 然后配合使用树干色板中的三个颜色画出树的明暗关系,画的过程中可以将画布放大以方便画细节(快捷键"Ctrl"

孙鑫vc笔记——多线程编程

1.进程是一个正在运行程序的实例,它从不执行任何东西,只是线程的容器.若要使进程完成某项操作,它必须拥有一个在它的环境中运行的线程,此线程负责执行包含在进程地址空间中的代码. 2.当创建一个进程时,操作系统会自动创建这个进程的第一个线程,即主线程,即执行main函数或winMain函数的线程,main函数或winMain函数是主线程的进入点函数,此后,该线程可以创建其他的线程. 3.系统赋予每个进程独立的虚拟地址空间,对于32位进程来说,这个地址空间2的32次幂即4GB. 4.每个进程有它的私有

【同步】孙鑫VC++笔记-事件对象同步

事件对象同步 //CreateEvent设置自定的,并且初始有信号#include<windows.h> #include<iostream.h> DWORD WINAPI ThreadProc1( LPVOID lpParameter ); DWORD WINAPI ThreadProc2( LPVOID lpParameter ); int tickes=100; HANDLE g_hEvent; int main() { HANDLE hThread1=CreateThrea

[转]html5 Canvas画图教程(2)—画直线与设置线条的样式如颜色/端点/交汇点

在学画画的时候,线条是最基本的了,而线条的连接可以组成任何图形.在Canvas中也是如此. 在开始之前我们先拿出画布和画笔: 代码如下: var cvs = document.getElementById('cvs'); //画布 var ctx = cvs.getContext('2d'); // 画笔 我们画画的时候,落笔点是不固定的,随时都会变.canvas虽然不是通过手来决定落笔点,但也有一个方法,就是moveTo.moveTo的作用相当于把笔尖提离画布,然后移动到指定的点(即坐标).

孙鑫视频改变窗口过程函数中出现error C2440错误的解决方法

在Visual Studio 2010中,即使代码是完完全全按照孙鑫视频中的敲,也会在出现error C2440,这是因为开发平台由VC6.0升级至VS2010,需要将原有的项目迁移.VS2010对消息的检查更为严格,以前在VC6.0下完全正常运行的消息映射在VS2010下编译不通过. 百度了解决方法如下(亲测可用): 例如:TestDlg.cpp中ON_REGISTERED_MESSAGE(WM_INITDIALOG, &CTestDlg::OnInitDialog):第一:把原来的消息函数返

孙鑫视频VC++深入详解学习笔记

Lesson1: Windows程序运行原理及程序编写流程 Lesson2: 掌握C++基本语法 Lesson3: MFC框架程序剖析 Lesson4: 简单绘图 Lesson5: 文本编程 Lesson6: 菜单编程 Lesson7: 对话框编程 Lesson9: 定制应用程序的外观 Lesson10: 绘图控制 Lesson11 图形的保存和重绘 Lesson12 文件操作 Lesson 13: 文档串行化 Lesson14 网络编程 Lesson 15 多线程 Lesson 16 线程同步

孙鑫视频VC++深入详解学习笔记(全)

Lesson1: Windows程序运行原理及程序编写流程 窗口产生过程,句柄原理,消息队列,回调函数,窗口关闭与应用程序退出的工作关系,使用VC++的若干小技巧,stdcall与Lessonecl调用规范的比较,初学者常犯错误及注意事项. 1.       Windows API与Win32 SDK 操作系统提供了各种方便开发Windows应用程序的编程接口,所的函数都在Windows.h头文件中声明.Win32 SDK(Software Development Kit): 即Windows

孙鑫VC学习笔记:多线程编程

SkySeraph Dec 11st 2010  HQU Email:[email protected]    QQ:452728574 Latest Modified Date:Dec.11st 2010 HQU ================================================================================= 程序&进程&线程 ================================================