要想在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_StartPointx,m_StartPointy,NULL);
::LineTo(hdc,pointx,pointy);
::ReleaseDC(m_hWnd,hdc);/
第二种,用CDC类绘图,使用CPen类构造画笔
/CDC aDC;
CPen pen(PS_SOLID,1,m_Color); 建立一个画笔类物件,构造时设定画笔属性
aDCm_hDC=::GetDC(m_hWnd);
aDCSelectObject(&pen);
aDCMoveTo(m_StartPoint);
aDCLineTo(point);
::ReleaseDC(m_hWnd,aDCm_hDC);/
第三种,用CClient类绘图,使用CPen类构造画笔,跟第二种方法不同的是用CClientDC时不用手动去获取DC,和释放DC
CClientDC aDC(this); CClientDC的建构函式需要一个引数,这个引数是指向绘图视窗的指标,我们用this指标就可以了
CPen pen(PS_SOLID,1,m_Color); 建立一个画笔类物件,构造时设定画笔属性
aDCSelectObject(&pen);
aDCMoveTo(m_StartPoint);
aDCLineTo(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<stdioh>
#include<graphicsh>
#include<mathh>
#include<dosh>
#include<biosh>
#include<ctypeh>
#include<processh>
#include<conioh>
#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;
disx=200;
disy=200;
driver=DETECT;
mode=VGAHI;
registerbgidriver(EGAVGA_driver);
registerbgifont(TRIPLEX_FONT);
initgraph(&driver,&mode,"f:\\tc201\\BGI");
setbkcolor(BLUE);
cleardevice();
setcolor(YELLOW);
xhairs(disx,disy);
while(keyc[0]!='q')
{
menu();/显示选单/
keyi=bioskey(0);
xhairs(disx,disy);
if(!keyc[0])
arr_key(keyc[1]);
else
switch(tolower(keyc[0]))
{
case 'f':
xhairs(disx,disy);colour();break;
case 'd':x1=y1=0;xhairs(disx,disy);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(disx,disy);
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(disx,disy);
x1=do_that();
if(x1)
{xn=disx;yn=disy;
mv_cp(firstdotx,firstdoty,secdotx,secdoty,xn,yn,0);
}
fill(6,410,149,460);break;
case 'l':x1=y1=0;/画直线/
xhairs(disx,disy);
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(disx,disy);
outtextxy(10,22+(13)30,"e:end point");
outtextxy(10,22+(14)30,"g:five up");
y1=point();
setcolor(COLOR);
if(x1&&y1)
line(firstdotx,firstdoty,secdotx,secdoty);
fill(6,410,155,460);
break;
case 'o':/画圆形/
x1=y1=0;
xhairs(disx,disy);
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(disx,disy);
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((secdotx-firstdotx)(secdotx-firstdotx)+(secdoty-firstdoty)(secdoty-firstdoty)));
if(x1&&y1) circle(firstdotx,firstdoty,r);
fill(6,410,149,460);break;
case 'h':/画矩形/
x1=y1=0;
xhairs(disx,disy);
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(disx,disy);
outtextxy(10,22+(13)30,"e:right bottom");
outtextxy(10,22+(14)30,"g:give up");
y1=point();
if(x1&&y1)
{
setcolor(COLOR);
rectangle(firstdotx,firstdoty,secdotx,secdoty);
}
fill(6,410,155,460);break;
case 's':cleardevice();break;/清屏/
case 'w':save();break;
case 'r':load();break;
case 'm':x1=y1=0;/图形移动/
xhairs(disx,disy);
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(disx,disy);
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(disx,disy);
x1=do_that();
if(x1)
{
xn=disx;yn=disy;
mv_cp(firstdotx,firstdoty,secdotx,secdoty,xn,yn,1);
}
fill(6,410,149,460);break;
}
xhairs(disx,disy);
}
closegraph();
}
/--------------------------------显示游标函式--------------------------------/
void xhairs(int a,int b)
{
int i;
for(i=a-3;i<=a+3;i++)
putpixel(i,b,15^getpixel(i,b));
for(i=b-3;i<=b+3;i++)
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=0;i<12;i++)
outtextxy(STARTX,STARTY+(i+1)DISTANCE,menu_name[i]);
}
/---------------------------------储存函式---------------------------------/
void save(void)
{int i,j;
FILE fp;
if((fp=fopen("graphdat","w+"))==NULL)
{printf("cannot open this file!");
exit(0);
}
fill(260,473,400,480);
for(i=5;i<470;i++)
for(j=155;j<=635;j++)
fputc(getpixel(j,i),fp);
fclose(fp);
outtextxy(260,471,"save over!");
}
/-----------------------------------------开启函式------------------------/
void load(void)
{
int i,j;
FILE fp;
if((fp=fopen("graphdat","r+"))==NULL)
{
outtextxy(260,471,"cannot open this file!");
getch();
exit(0);
}
fill(260,471,400,480);
outtextxy(280,471,"loading");
for(i=5;i<=470;i++)
for(j=155;j<=635;j++)
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=startx;startx=endx;endx=i;}
if(starty>endy)
{i=starty;
starty=endy;endy=i;}
for(;startx<=endx;startx++,x++)
for(i=starty,j=y;i<=endy;i++,j++)
{c=getpixel(startx,i);
if(flag) putpixel(startx,i,BLUE);
putpixel(x,j,c);
}
}
/----------------------------返回点座标函式----------------------------------/
int point()
{int valid_p=0,g=1;
keyc[0]='';
while(keyc[0]!='p')
{keyi=bioskey(0);
xhairs(disx,disy);
if(!keyc[0])
arr_key(keyc[1]);
else
switch(tolower(keyc[0]))
{case 'b':putpixel(disx,disy,COLOR);
firstdotx=disx;
firstdoty=disy;
keyc[0]='p';
valid_p=1;
break;
case 'e':
putpixel(disx,disy,COLOR);
secdotx=disx;
secdoty=disy;
keyc[0]='p';
valid_p=2;break;
case 'g':
firstdotx=secdotx;
firstdoty=secdoty;
keyc[0]='p';
g=0;break;
}
xhairs(disx,disy);
if(valid_p==1||valid_p==2||g==0)
break;
}
xhairs(disx,disy);
return valid_p;
}
/------------------------------确认 *** 作------------------------/
int do_that()
{
int valid_p=0,g=1;
keyc[0]='';
while(keyc[0]!='p')
{keyi=bioskey(0);
xhairs(disx,disy);
if(!keyc[0])
arr_key(keyc[1]);
else
switch(tolower(keyc[0]))
{case 'y':
keyc[0]='p';
putpixel(disx,disy,COLOR);
valid_p=1;break;
case 'n':
keyc[0]='p';
firstdotx=secdotx;
firstdoty=secdoty;
g=0;break;}
xhairs(disx,disy);
if(valid_p==1||g==0)
break;
}
xhairs(disx,disy);
return valid_p;
}
/-----------------------------填充-------------------------------/
void fill(int startx,int starty,int endx,int endy)
{int i,j;
for(i=startx;i<=endx;i++)
for(j=starty;j<=endy;j++)
{putpixel(i,j,BLUE);
}
}
/-----------------------------------颜色定义--------------------------------/
void colour()
{
keyc[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(keyc[0]!='p')
{
keyi=bioskey(0);
xhairs(disx,disy);
if(!keyc[0])
arr_key(keyc[0]);
else
{switch(tolower(keyc[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;
}
keyc[0]='p';}
/-------------------------游标---------------------/
xhairs(disx,disy);
}
xhairs(disx,disy);
floodfill(disx,disy,WHITE);
fill(6,410,149,460);
}
/-----------------------------游标控制----------------------------/
void arr_key(char c)
{switch(c)
{case LEFT : disx-=inc;break;
case RIGHT : disx+=inc;break;
case UP : disy-=inc;break;
case DOWN : disy+=inc;break;
case F1 : inc=1;break;
case F2 : inc=5;break;
}
}
如何在桌面上建立word应用程式和画图程式的快捷方式开始——所有程式——micsoft office——micsoft office word(右键此项,选择传送到——桌面快捷方式)
开始——所有程式——附件——画图板(右键此项,选择传送到——桌面快捷方式)
c++应用程式
通常安装程式预设不在桌面放置图示
故选择“开始”→“程式”→Microsoft Visual Studio 60→Microsoft Visual C++ 60,
执行Visual C++ 60。
将程式的开启方式选择为执行Visual C++ 60即可。
建立visual basic 60应用程式Private Sub Form_Load()
MsgBox "程式初始化"
End Sub
c++应用程式下的的原始码怎么找cpp和h档案就是原始码。
h是标头档案。
如何建立winform应用程式appconfig档案:
<xml version="10" encoding="utf-8" >
<configuration>
<configSections>
</configSections>
<connectionStrings>
<add name=自定义连线名
connectionString="SQL连线资料库字串"
providerName="SystemDataSqlClient" />
</connectionStrings>
</configuration>
呼叫。
从appconfig读取连线字串。
String connStr = ConfigurationManagerConnectionStrings["自定义连线名"]ConnectionString;
c++建立栈类程式程式码呵呵,交作业吧。如下,用了模板,程式码较长,但是各种 *** 作都有,可读性也比较好,是俺自己写的。有两个,链式和顺序的,我把顺序的发给你好了。
这个是标头档案, *** 作都定义在里面了
/
Sequel Stack
/
#include <asserth>
#include <iomaniph>
#include <stdlibh>
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 = 0; i <= ; i++ )
{
cout << elements[i] << endl;
}
return;
}
/
以下为主函式所在档案的程式码
#include <iostreamh>
#include "sequel stackh"
int main()
{
Stack<int> ob1(4);
ob1Push(0);
ob1Push(-1);
ob1Push(3);
ob1Push(5);
ob1Traverse();
cout << ob1Pop() << endl;
ob1Traverse();
return 0;
}
这是五边形的~~四边形的调用一函数就行了
#include <graphicsh>
main()
{
int drive,mode,i,j,m,n;
drive=DETECT;
initgraph(&drive,&mode,"");
i=getmaxx();
j=getmaxy();
m=i/2;
n=j/2;
cleardevice();
line(m,n-385,m-40,n-9);
line(m,n-385,m+40,n-9);
line(m-40,n-9,m-25,n+385);
line(m+40,n-9,m+25,n+385);
line(m-25,n+385,m+25,n+385);
getch();
closegraph();
}
依次点击开始-运行,在运行对话框中输入“Regedit”打开注册表编辑器。展开注册表到[HKEY_CLASSES_ROOT\Directory\shell],用鼠标右键单击Shell,在其下新建一个主键,将其命名为即将添加的程序名称“mspaint”;再双击右边窗口中的默认,输入菜单中要显示的命令名称,我们还可以在“&”的后面输入任意一个字母,以此作为启动这个命令的快捷键,在这里我们输入“画图(&M)”;接下来右键单击“mspaint”分支,在其下新建一个名为“Command”的子键分支,并双击右侧窗口中的“默认”,在d出的对话框中输入画图程序的详细路径。标准的画图程序路径在“C:\ProgramFiles\Accessories\MSPAINTEXE”。修改完成以后,刷新一下注册表,然后关闭,再鼠标右键文档,就可以看到菜单中已经有了画图(&M),单击即可打开“画图”程序。
另外可能有时候需要重启一下电脑。
matalab是我所知比较好的数学关系处理软件(当然简单一些的用excel就绰绰有余了),C语言软件中turbo-c显得就力不从心了,而且要进行比较复杂的编程语言转换,这个对于初学者太抽象了(命令式,可以类比于dos了··),如果你还是想借助c语言类软件的话,推荐用图形界面的软件,VB适于初学者,在之后可以选择学习VC(其中VC就已经足够强大了),另外要开发用于手机上的程式,就要学习java了··
(其他工具软件autoCAD也行,立体建模使用3d max 或者玛雅··)
以上仅供参考,希望对您有所帮助
在codeblocks中,可以通过集成EGE库,来实现C语言图形程序的编写,具体方式如下:
一、安装:
1、下载ege安装包;
2、将安装包解压;
3、把压缩包里include目录下所有文件,复制到编译器安装目录下的include目录内,例如D:\MinGW\include\;
4、把lib目录下对应编译器名目录下的文件,复制到编译器安装目录下的lib目录内,例如D:\MinGW\lib\。
二、建立工程:
只要第1步做好以后,其实已经安装好ege了,剩下的只是配置build option
点击file-new-projects,选择Console application:
注意编程语言要选C++(不必担心写代码仍可以是C语言,只是库要求源代码文件要是CPP)
三、配置build option:
建立好工程以后,需要设置好链接选项
1、点击project-build option:
2、切换到linker setting选项卡,添加-lgraphics -lgdi32 -limm32 -lmsimg32 -lole32 -loleaut32 -lwinmm -luuid -mwindows,这些链接选项。
3、点击Add,找到第一步编译器路径下的lib文件夹,添加libgraphicsa,libgdi32a libimm32a libmsimg32a libole32a liboleaut32a libwinmma libuuida这8个文件(可以一次性全部添加,不必一次添加一个),
并在右边的other linker options写上 -mwindows。
添加完以后应该是(前面的路径取决于编译器安装目录):
四、 测试代码:
到此已经设置完毕。
将工程里的maincpp文件的代码换成:
#include "graphicsh"int main(){
initgraph(640, 480); // 初始化为640480大小的窗口,这里和TC 略有区别
circle(200, 200, 100); // 画圆,圆心(200, 200),半径100
getch(); // 等待用户按键,按任意键继续
closegraph(); // 关闭图形界面
return 0;
}
构建,并运行,运行结果如下:
以上就是关于C++应用程式中,画图程式 建立画笔的程式码 急~~全部的内容,包括:C++应用程式中,画图程式 建立画笔的程式码 急~~、请用C语言编写一个图形显示程序。能够在屏幕中央画正四边形或正五边形。、如何在右键菜单新建中添加画图程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)