资源简介

使用C/C++编写的简易画图程序 功能:①绘制线,矩形,椭圆,文本 ②保存图元到文件,并能够从文件加载图像 ③能够通过鼠标点击选中图形,并进行属性的修改,修改的内容可包括: 修改图元的大小,位置,画笔画刷属性,文本的字体和内容,删除图形 【使用了动态缓冲绘图方法,能够通过鼠标右键精确选中图形,纯WinSDK,不是MFC!!!】 【实验五,山大威海】

资源截图

代码片段和文件信息

/*******************************************************************
程序:实验五
文件:func.cpp
功能:绘图
时间:2016.05.11
********************************************************************/
#include
#include “resource.h“
#include“func.h“
#include 
#include 
void DrawMyLine(HDC hdc PMYPIC pLine) // 绘制一条线
{
HPEN hPen = CreatePenIndirect(&(pLine->logpen));
HPEN hPenOld = (HPEN)Selectobject(hdc hPen);
MoveToEx(hdc pLine->ptS.x pLine->ptS.y NULL);
LineTo(hdc pLine->ptE.x pLine->ptE.y);
Selectobject(hdc hPenOld);
Deleteobject(hPen);
}
void DrawMyRect(HDC hdc PMYPIC pRect) // 绘制一个矩形
{
HPEN hPen = CreatePenIndirect(&(pRect->logpen));
HPEN hPenOld = (HPEN)Selectobject(hdc hPen);
HBRUSH hNewBrush = CreateBrushIndirect (&(pRect->logbrush));
HBRUSH hOldBrush = (HBRUSH)Selectobject (hdc hNewBrush);
Rectangle(hdcpRect->ptS.xpRect->ptS.ypRect->ptE.xpRect->ptE.y);
Selectobject(hdc hPenOld);
Deleteobject(hPen);
Selectobject(hdchOldBrush);
Deleteobject(hNewBrush);
}
void DrawMyEll(HDC hdc PMYPIC pRect) // 绘制一个椭圆
{
HPEN hPen = CreatePenIndirect(&(pRect->logpen));
HPEN hPenOld = (HPEN)Selectobject(hdc hPen);
HBRUSH hNewBrush = CreateBrushIndirect (&(pRect->logbrush));
HBRUSH hOldBrush = (HBRUSH)Selectobject (hdc hNewBrush);
Ellipse(hdcpRect->ptS.xpRect->ptS.ypRect->ptE.xpRect->ptE.y);
Selectobject(hdc hPenOld);
Deleteobject(hPen);
Selectobject(hdchOldBrush);
Deleteobject(hNewBrush);
}
void DrawMyText(HDC hdcPMYPIC pText) //画文字
{
HFONT hFont=CreateFontIndirect(&(pText->logfont));
HFONT hFontOld = (HFONT)Selectobject (hdc hFont);
SetTextColor(hdcpText->textColor);
TextOut(hdc(pText->ptS.x+pText->ptE.x)/2(pText->ptS.y+pText->ptE.y)/2pText->szTextlstrlen(pText->szText));
GetTextExtentPoint32 (hdcpText->szText lstrlen (pText->szText) &pText->size);
Selectobject(hdchFontOld);
Deleteobject (hFont);
}
int Sum_Pics(PMYPIC pPicint len)//返回现有图片总数
{
for (int i=0;i {
if (pPic[i].order==0)
return i;
}
return 0;//保留
}
void DrawAll(HDC hdc PMYPIC pPicint count)//画所有图像,包括线,矩形,椭圆
{
for (int i=0;i {
if(pPic[i].DrawObj==0)break;
switch (pPic[i].DrawObj)
{
case ID_PIC_LINE:DrawMyLine(hdc&(pPic[i]));break;
case ID_PIC_RECT:DrawMyRect(hdc&(pPic[i]));break;
case ID_PIC_ELL: DrawMyEll(hdc&(pPic[i]));break;
case ID_PIC_TEXT:DrawMyText(hdc&(pPic[i]));break;//
default: break;
}
}
}
void SaveData(PMYPIC pPicint len)//保存图像到文件
{
FILE* fp;
errno_t err;
if((err=fopen_s(&fp“data.bin““wb+“))==0)
{
fwrite(pPicsizeof(*pPic)lenfp);
fclose(fp);
MessageBox(NULL L“保存成功!“L“提示“MB_ICONEXCLAMATION|MB_OK);
}
else MessageBox(NULL L“保存失败!“L“Error!“MB_ICONEXCLAMATION|MB_OK);;
}
void ClearArg(PMYPIC pPicint len)//清空储存图像的数组
{
for(int i=0;i {
pPic[i].ptS.x=0;
pPic[i].ptS.y=0;
pPic[i].ptE.x=0;
pPic[i].ptE.y=0;
pPic[i].logpen.lopnColor

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2016-05-29 17:47  Debug\
     文件       57344  2016-05-29 17:46  Debug\实验五.exe
     目录           0  2016-05-29 17:47  实验五\
     文件         894  2016-05-29 17:45  实验五.sln
     文件       23552  2016-05-29 17:47  实验五.v11.suo
     文件        6202  2016-05-26 13:06  实验五\func.cpp
     文件        1279  2016-05-15 12:56  实验五\func.h
     文件        1886  2016-05-12 12:59  实验五\ICON1.ico
     文件         766  2016-05-26 12:38  实验五\lmove.cur
     文件       16594  2016-05-29 17:44  实验五\main.cpp
     文件         326  2016-05-12 13:20  实验五\POINTER.cur
     文件        4396  2016-05-29 17:46  实验五\resource.h
     文件       13678  2016-05-13 21:14  实验五\实验五.rc
     文件        4466  2016-05-29 17:46  实验五\实验五.vcxproj
     文件        1687  2016-05-29 17:46  实验五\实验五.vcxproj.filters

评论

共有 条评论