C++应用程式中,画图程式 建立画笔的程式码 急~~

C++应用程式中,画图程式 建立画笔的程式码 急~~,第1张

C++应用程式中,画图程式 建立画笔的程式码 急~~

要想在MFC中画出有颜色的线条,首先就要设定DC的画笔,我们可以按如下方法来设定画笔:

第一步:在View类中新增一个COLORREF型别的资料成员m_Color(用来储存画笔颜色值),在建构函式中对其初始化,

m_Color(RGB(255,0,0))

第二步:在WM_LBUTTONDOWN和WM_LBUTTONUP讯息的处理函式OnLButtonDown和OnLButtonUp中新增如下程式码:

void CdrView::OnLButtonDown(UINT nFlags, CPoint point)

{

TODO: Add your message handler code here and/or call default

m_StartPoint=point用来储存画线起始点的位置,即滑鼠左键第一次按下时的位置,型别为CPoint

CView::OnLButtonDown(nFlags, point)

}

void CdrView::OnLButtonUp(UINT nFlags, CPoint point)

{

TODO: Add your message handler code here and/or call default

第一种方法,用HDC绘图,使用API函式设定画笔颜色

/*HDC hdc

hdc=::GetDC(m_hWnd)

::SelectObject(hdc,CreatePen(PS_SOLID,1,m_Color))向装置上下文(装置描述表)中插入由CreatePen函式建立的画笔

::MoveToEx(hdc,m_StartPoint.x,m_StartPoint.y,NULL)

::LineTo(hdc,point.x,point.y)

::ReleaseDC(m_hWnd,hdc)*/

第二种,用CDC类绘图,使用CPen类构造画笔

/*CDC aDC

CPen pen(PS_SOLID,1,m_Color)建立一个画笔类物件,构造时设定画笔属性

aDC.m_hDC=::GetDC(m_hWnd)

aDC.SelectObject(&pen)

aDC.MoveTo(m_StartPoint)

aDC.LineTo(point)

::ReleaseDC(m_hWnd,aDC.m_hDC)*/

第三种,用CClient类绘图,使用CPen类构造画笔,跟第二种方法不同的是用CClientDC时不用手动去获取DC,和释放DC

CClientDC aDC(this)CClientDC的建构函式需要一个引数,这个引数是指向绘图视窗的指标,我们用this指标就可以了

CPen pen(PS_SOLID,1,m_Color)建立一个画笔类物件,构造时设定画笔属性

aDC.SelectObject(&pen)

aDC.MoveTo(m_StartPoint)

aDC.LineTo(point)

CView::OnLButtonUp(nFlags, point)

}

void CdrView::OnMouseMove(UINT nFlags, CPoint point)

{

TODO: Add your message handler code here and/or call default

CView::OnMouseMove(nFlags, point)

}

执行程式,就可以画出红色的线条来,如果想画其它颜色,只需要设定m_Color的值即可,例如,要设定成绿色,可以在View类的建构函式处把m_Color(RGB(255,0,0))改写成m_Color(RGB(0,255,0))。颜色的改变是通过设定RGB(0,255,0)中的三个引数来实现的。RGB中的三个引数分别对应三原色的红、绿、蓝,每一个引数的取值范围都是0~255,通过不同数值的组合,就可以画出各种各样的颜色来了。

visual c++ 2008 如何建立windows应用程式

用windowsAPI函式写WinMain函式,用RegisterClass注册类,CreateWindow建立视窗,或者用MFC

VS10中 windows应用程式 MFC应用程式 对话方块应用程式什么区别 在vs10中怎么用c++建立对话方块应用程式 求助

windows应用使用sdk类库 mfc用mfc类库

对话方块应用程式就是视窗的风格不同而已

新建专案 选择mfc应用程式 然后在专案属性中设定 基于对话方块

谁有C语言的画图应用程式

#include<stdio.h>

#include<graphics.h>

#include<math.h>

#include<dos.h>

#include<bios.h>

#include<ctype.h>

#include<process.h>

#include<conio.h>

#define COLOR WHITE

#define F1 59

#define F2 60

#define UP 72

#define DOWN 80

#define LEFT 75

#define RIGHT 77

#define HOME 71

#define END 79

#define PAGEUP 73

#define PAGEDOWN 81

int inc=1

typedef union /*返回键盘输入值*/

{char c[2]

int i

}KEY

KEY key

typedef struct /*定义点*/

{int x

int y

}DOT

DOT dis,firstdot,secdot,dot1

int point()

int do_that()

void mv_cp(int startx,int starty,int endx,int endy,int x,int y,int flag)/*移动函式*/

void fill(int startx,int starty,int endx,int endy)/*填充*/

void colour()/*颜色*/

void menu(void)/*主选单*/

void save(void)/*储存*/

void load(void)/*开启档案*/

void xhairs(int a,int b)/*显示游标*/

void arr_key(char c)

/*--------------------------------主函式---------------------------------------*/

void main()

{

int k,j,m,r,x1,y1,xn,yn

int driver,mode

dis.x=200

dis.y=200

driver=DETECT

mode=VGAHI

registerbgidriver(EGAVGA_driver)

registerbgifont(TRIPLEX_FONT)

initgraph(&driver,&mode,"f:\\tc2.01\\BGI")

setbkcolor(BLUE)

cleardevice()

setcolor(YELLOW)

xhairs(dis.x,dis.y)

while(key.c[0]!='q')

{

menu()/*显示选单*/

key.i=bioskey(0)

xhairs(dis.x,dis.y)

if(!key.c[0])

arr_key(key.c[1])

else

switch(tolower(key.c[0]))

{

case 'f':

xhairs(dis.x,dis.y)colour()break

case 'd':x1=y1=0xhairs(dis.x,dis.y)setcolor(LIGHTRED)

outtextxy(10,22+(13)*30,"b:begine point")

outtextxy(10,22+(14)*30,"g:give up")

x1=point()

fill(6,410,149,430)

xhairs(dis.x,dis.y)

outtextxy(10,22+(13)*30,"e:end point")

outtextxy(10,22+(14)*30,"g:give up")

y1=point()

fill(6,410,149,460)

setcolor(COLOR)

if(x1&&y1)

{outtextxy(10,22+(13)*30,"move the +")

outtextxy(10,22+(14)*30,"y:do n:no")

}

x1=0

xhairs(dis.x,dis.y)

x1=do_that()

if(x1)

{xn=dis.xyn=dis.y

mv_cp(firstdot.x,firstdot.y,secdot.x,secdot.y,xn,yn,0)

}

fill(6,410,149,460)break

case 'l':x1=y1=0/*画直线*/

xhairs(dis.x,dis.y)

setcolor(LIGHTRED)

outtextxy(10,22+(13)*30,"b:begin point")

outtextxy(10,22+(14)*30,"g:give up")

x1=point()

fill(6,410,149,430)

xhairs(dis.x,dis.y)

outtextxy(10,22+(13)*30,"e:end point")

outtextxy(10,22+(14)*30,"g:five up")

y1=point()

setcolor(COLOR)

if(x1&&y1)

line(firstdot.x,firstdot.y,secdot.x,secdot.y)

fill(6,410,155,460)

break

case 'o':/*画圆形*/

x1=y1=0

xhairs(dis.x,dis.y)

setcolor(LIGHTRED)

outtextxy(10,22+(13)*30,"b:radius")

outtextxy(10,22+(14)*30,"g:give up")

x1=point()

fill(6,410,149,430)

xhairs(dis.x,dis.y)

outtextxy(10,22+(13)*30,"e:radius")

outtextxy(10,22+(14)*30,"g:give up")

y1=point()

if(x1&&y1) setcolor(COLOR)

r=sqrt(fabs((secdot.x-firstdot.x)*(secdot.x-firstdot.x)+(secdot.y-firstdot.y)*(secdot.y-firstdot.y)))

if(x1&&y1) circle(firstdot.x,firstdot.y,r)

fill(6,410,149,460)break

case 'h':/*画矩形*/

x1=y1=0

xhairs(dis.x,dis.y)

setcolor(LIGHTRED)

outtextxy(10,22+(13)*30,"b:left ")

outtextxy(10,22+(14)*30,"g:give up")

x1=point()

fill(6,410,149,430)

xhairs(dis.x,dis.y)

outtextxy(10,22+(13)*30,"e:right bottom")

outtextxy(10,22+(14)*30,"g:give up")

y1=point()

if(x1&&y1)

{

setcolor(COLOR)

rectangle(firstdot.x,firstdot.y,secdot.x,secdot.y)

}

fill(6,410,155,460)break

case 's':cleardevice()break/*清屏*/

case 'w':save()break

case 'r':load()break

case 'm':x1=y1=0/*图形移动*/

xhairs(dis.x,dis.y)

setcolor(LIGHTRED)

outtextxy(10,22+(13)*30,"b:begin point")

outtextxy(10,22+(14)*30,"g:give up")

x1=point()

fill(6,410,149,430)

xhairs(dis.x,dis.y)

outtextxy(10,22+(13)*30,"e:end point")

outtextxy(10,22+(14)*30,"g:give up")

y1=point()

fill(6,410,149,460)

setcolor(COLOR)

if(x1&&y1)

{

outtextxy(10,22+(13)*30,"move the +")

outtextxy(10,22+(14)*30,"y:do n:no")

}

x1=0

xhairs(dis.x,dis.y)

x1=do_that()

if(x1)

{

xn=dis.xyn=dis.y

mv_cp(firstdot.x,firstdot.y,secdot.x,secdot.y,xn,yn,1)

}

fill(6,410,149,460)break

}

xhairs(dis.x,dis.y)

}

closegraph()

}

/*--------------------------------显示游标函式--------------------------------*/

void xhairs(int a,int b)

{

int i

for(i=a-3i<=a+3i++)

putpixel(i,b,15^getpixel(i,b))

for(i=b-3i<=b+3i++)

putpixel(a,i,15^getpixel(a,i))

}

/*------------------------------选单函式------------------------------*/

void menu(void)

{

#define STARTX 10

#define STARTY 22

#define DISTANCE 30

int i

char *menu_name[]={"F1:setp=1",

"F2:step=5",

"l:draw line",

"draw cirle",

"h:graw box",

"s:clear screen",

"m:move",

"d:copy",

"f:fill color",

"w:save",

"r:load",

"q:quit"}

setcolor(WHITE)

rectangle(5,5,150,470)

rectangle(5,403,150,470)

rectangle(155,5,635,470)

setcolor(LIGHTBLUE)

settextstyle(TRIPLEX_FONT,HORIZ_DIR,2)

outtextxy(36,STARTY,"menu")

settextstyle(DEFAULT_FONT,HORIZ_DIR,1)

for(i=0i<12i++)

outtextxy(STARTX,STARTY+(i+1)*DISTANCE,menu_name[i])

}

/*---------------------------------储存函式---------------------------------*/

void save(void)

{int i,j

FILE *fp

if((fp=fopen("graph.dat","w+"))==NULL)

{printf("cannot open this file!")

exit(0)

}

fill(260,473,400,480)

for(i=5i<470i++)

for(j=155j<=635j++)

fputc(getpixel(j,i),fp)

fclose(fp)

outtextxy(260,471,"save over!")

}

/*-----------------------------------------开启函式------------------------*/

void load(void)

{

int i,j

FILE *fp

if((fp=fopen("graph.dat","r+"))==NULL)

{

outtextxy(260,471,"cannot open this file!")

getch()

exit(0)

}

fill(260,471,400,480)

outtextxy(280,471,"loading......")

for(i=5i<=470i++)

for(j=155j<=635j++)

putpixel(j,i,fgetc(fp))

fill(260,471,400,480)

fclose(fp)

outtextxy(280,471,"loading over")

}

/*-----------------------------------------移动复制函式---------------------------*/

void mv_cp(int startx,int starty,int endx,int endy,int x,int y,int flag)

{

int i,j

unsigned char c

if(startx>endx)

{i=startxstartx=endxendx=i}

if(starty>endy)

{i=starty

starty=endyendy=i}

for(startx<=endxstartx++,x++)

for(i=starty,j=yi<=endyi++,j++)

{c=getpixel(startx,i)

if(flag) putpixel(startx,i,BLUE)

putpixel(x,j,c)

}

}

/*----------------------------返回点座标函式----------------------------------*/

int point()

{int valid_p=0,g=1

key.c[0]=''

while(key.c[0]!='p')

{key.i=bioskey(0)

xhairs(dis.x,dis.y)

if(!key.c[0])

arr_key(key.c[1])

else

switch(tolower(key.c[0]))

{case 'b':putpixel(dis.x,dis.y,COLOR)

firstdot.x=dis.x

firstdot.y=dis.y

key.c[0]='p'

valid_p=1

break

case 'e':

putpixel(dis.x,dis.y,COLOR)

secdot.x=dis.x

secdot.y=dis.y

key.c[0]='p'

valid_p=2break

case 'g':

firstdot.x=secdot.x

firstdot.y=secdot.y

key.c[0]='p'

g=0break

}

xhairs(dis.x,dis.y)

if(valid_p==1||valid_p==2||g==0)

break

}

xhairs(dis.x,dis.y)

return valid_p

}

/*------------------------------确认 *** 作------------------------*/

int do_that()

{

int valid_p=0,g=1

key.c[0]=''

while(key.c[0]!='p')

{key.i=bioskey(0)

xhairs(dis.x,dis.y)

if(!key.c[0])

arr_key(key.c[1])

else

switch(tolower(key.c[0]))

{case 'y':

key.c[0]='p'

putpixel(dis.x,dis.y,COLOR)

valid_p=1break

case 'n':

key.c[0]='p'

firstdot.x=secdot.x

firstdot.y=secdot.y

g=0break}

xhairs(dis.x,dis.y)

if(valid_p==1||g==0)

break

}

xhairs(dis.x,dis.y)

return valid_p

}

/*-----------------------------填充-------------------------------*/

void fill(int startx,int starty,int endx,int endy)

{int i,j

for(i=startxi<=endxi++)

for(j=startyj<=endyj++)

{putpixel(i,j,BLUE)

}

}

/*-----------------------------------颜色定义--------------------------------*/

void colour()

{

key.c[0]=''

setcolor(RED)

outtextxy(10,412,"R")

setcolor(GREEN)

outtextxy(40,412,"G")

setcolor(CYAN)

outtextxy(70,412,"C")

setcolor(LIGHTBLUE)

outtextxy(10,432,"L")

setcolor(MAGENTA)

outtextxy(40,432,"M")

setcolor(YELLOW)

outtextxy(70,432,"Y")

setcolor(WHITE)

outtextxy(10,452,"W")

setcolor(BROWN)

outtextxy(40,452,"N")

setcolor(LIGHTRED)

outtextxy(70,452,"D")

while(key.c[0]!='p')

{

key.i=bioskey(0)

xhairs(dis.x,dis.y)

if(!key.c[0])

arr_key(key.c[0])

else

{switch(tolower(key.c[0]))

{case 'y' : setfillstyle(SOLID_FILL,YELLOW)break

case 'r' : setfillstyle(SOLID_FILL,RED)break

case 'g' : setfillstyle(SOLID_FILL,GREEN)break

case 'c' : setfillstyle(SOLID_FILL,CYAN)break

case 'l' : setfillstyle(SOLID_FILL,LIGHTBLUE)break

case 'm' : setfillstyle(SOLID_FILL,MAGENTA)break

case 'w' : setfillstyle(SOLID_FILL,WHITE)break

case 'n' : setfillstyle(SOLID_FILL,BROWN)break

case 'd' : setfillstyle(SOLID_FILL,LIGHTRED)break

}

key.c[0]='p'}

/*-------------------------游标---------------------*/

xhairs(dis.x,dis.y)

}

xhairs(dis.x,dis.y)

floodfill(dis.x,dis.y,WHITE)

fill(6,410,149,460)

}

/*-----------------------------游标控制----------------------------*/

void arr_key(char c)

{switch(c)

{case LEFT : dis.x-=incbreak

case RIGHT : dis.x+=incbreak

case UP : dis.y-=incbreak

case DOWN : dis.y+=incbreak

case F1 : inc=1break

case F2 : inc=5break

}

}

如何在桌面上建立word应用程式和画图程式的快捷方式

开始——所有程式——micsoft office——micsoft office word(右键此项,选择传送到——桌面快捷方式)

开始——所有程式——附件——画图板(右键此项,选择传送到——桌面快捷方式)

c++应用程式

通常安装程式预设不在桌面放置图示.

故选择“开始”→“程式”→Microsoft Visual Studio 6.0→Microsoft Visual C++ 6.0,

执行Visual C++ 6.0。

将程式的开启方式选择为执行Visual C++ 6.0即可。

建立visual basic 6.0应用程式

Private Sub Form_Load()

MsgBox "程式初始化"

End Sub

c++应用程式下的的原始码怎么找

.cpp和.h档案就是原始码。

.h是标头档案。

如何建立winform应用程式

app.config档案:

<?xml version="1.0" encoding="utf-8" ?>

<configuration>

<configSections>

</configSections>

<connectionStrings>

<add name=【自定义连线名】

connectionString="【SQL连线资料库字串】"

providerName="System.Data.SqlClient" />

</connectionStrings>

</configuration>

呼叫。

从app.config读取连线字串。

String connStr = ConfigurationManager.ConnectionStrings["【自定义连线名】"].ConnectionString

c++建立栈类程式程式码

呵呵,交作业吧。如下,用了模板,程式码较长,但是各种 *** 作都有,可读性也比较好,是俺自己写的。有两个,链式和顺序的,我把顺序的发给你好了。

这个是标头档案, *** 作都定义在里面了

/

Sequel Stack

/

#include <assert.h>

#include <iomanip.h>

#include <stdlib.h>

template <class Type>class Stack

{

public:

Stack( int size = 10 )

~Stack() { delete []elements}

void Push( const Type &value )

Type Pop(void)

Type GetTop(void) const

void MakeEmpty(void) { = -1}

bool IsEmpty(void) const { return == -1}

bool IsFull(void) const { return == maxSize - 1}

void Traverse(void) const

public:

int

Type *elements

int maxSize

}

Implementation of member functions

template <class Type>Stack<Type>::Stack( int size )

{

if ( size <1 )

{

cerr <<"Illegal Stack Size" <<endl

exit(1)

}

maxSize = size

= -1

elements = new Type[maxSize]

assert( NULL != elements )

}

template <class Type>void Stack<Type>::Push( const Type &value )

{

assert( !IsFull() )

elements[++] = value

}

template <class Type>Type Stack<Type>::Pop(void)

{

assert( !IsEmpty() )

return elements[--]

}

template <class Type>Type Stack<Type>::GetTop(void) const

{

assert( !IsEmpty() )

return elements[]

}

template <class Type>void Stack<Type>::Traverse(void) const

{

assert( !IsEmpty() )

for ( int i = 0i <= i++ )

{

cout <<elements[i] <<endl

}

return

}

/

以下为主函式所在档案的程式码

#include <iostream.h>

#include "sequel stack.h"

int main()

{

Stack<int>ob1(4)

ob1.Push(0)

ob1.Push(-1)

ob1.Push(3)

ob1.Push(5)

ob1.Traverse()

cout <<ob1.Pop() <<endl

ob1.Traverse()

return 0

}

首先程序使用了m_nzValues这个数组来存储波形数据,把这个数组想象成从左向右依次排列的一串数(左端为m_nzValues[0]),这串数与画面上从左向右的波形依次对应。这种对应关系在DrawWave函数中可以看到

然后看OnTimer函数中,

m_nzValues[POINT_COUNT-1] = rand() % 80

新生成的波形数据是添加在了数组的末尾,即数组的“右侧”,也即图像的右侧,而其余数组则顺次“左移”( for (int i=0i<POINT_COUNT-1i++) {...})。在程序刚刚开始运行的时候,波形数据为空,而最先在末尾(“右侧”)出现数据,因此在DrawWave()函数里,虽然是从左往右画,但画的数据内容则是从右往左的。换句话说,绘图的方向 与 数据变化的方向是无关的,我也完全可以把绘图方向变成从右向左,效果完全不会变;而不论我绘图方向如何,如果我把数据变化方向改成从左向有(如在 m_nzValues[0]插入随机数,其余数据顺次右移),画出来的动画一定是从左向右的。

===

每次DrawWave,确实都会填充背景抹掉之前的绘图,接下来的for(...)则是把波形从头到尾地再画一遍——这个叫做”波形的一帧“,反复的DrawWave呈现的所有”帧“连贯起来就是你所看见的波形动画。

===

总之,DrawWave函数本身的功能仅仅是把m_nzValues数组的所有数值呈现在屏幕上,而使这波形图像动起来的,并不是DrawWave函数,而是OnTimer里不断对m_nzValues进行的有规律的 *** 作(不断插入数据并移动数据)

绘制连接lpPoints指定点的一组线段(无填充)

pDC->PolyLine(LPPOINT

lpPoints

,int

nCount)

lpPoints

用于连接的POINT结构或CPoint对象的指针。

nCount

数组中的点的数目。其值不小于2。

使用当前画笔绘制由直线连接的包含两个以上顶点的多边形。(有填充)

pDC->

Polygon(LPPOINT

lpPoints

,int

nCount)

参数:

lpPoints

多边形顶点数组的指针。可以为该参数传递POINT结构或CPoint对象。

nCount

数组中的顶点数目。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7850749.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-10
下一篇 2023-04-10

发表评论

登录后才能评论

评论列表(0条)

保存