要想在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
数组中的顶点数目。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)