⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 demotpdraw.c

📁 基于嵌入式图形库microwindows的简单示例程序10例
💻 C
字号:
/******************************************************************Microwindows 触摸屏画板演示程序 zhang kaohua 2003.12.3*************演示内容:构建一个按钮,触摸屏绘图.*****************************************************************/#define MWINCLUDECOLORS#include <stdio.h>#include <math.h>#include"nano-X.h"static GR_WINDOW_ID w;      //声明根窗口static GR_GC_ID gc;         //声明根窗口绘图上下文static GR_GC_ID gLine;     //static GR_GC_ID gRect;static GR_GC_ID gRound;static GR_GC_ID gid;	    //声明按钮的绘图上下文 static GR_GC_ID gb;     //cotext of the button when it had been putted.static GR_GC_ID t;	    //声明欢迎词绘图上下文static   GR_EVENT event;          //声明事件static   GR_WINDOW_ID btLine;      //声明按钮窗口static   GR_WINDOW_ID btRect;static   GR_WINDOW_ID btRound;static   GR_WINDOW_ID btClear;static   GR_WINDOW_ID bt;static   GR_WINDOW_ID we;//static   GR_FONT_ID font;         //void draw_main_win(GR_WINDOW_ID w,GR_GC_ID gc);void draw_Error_win(char *arg[]);void draw(GR_EVENT_BUTTON *bevent, GR_EVENT_MOUSE *mevent);void drawLine();void drawRect();void drawRound();static int i;  // point numstatic int r;  //radius of roundstatic int width, height; //width and height of rectanglestatic int flag;  //draw num#define DRAWLINE 1#define DRAWRECT 2#define DRAWROUND 3#define CLEAR 4//#define LINEQUENE(x,mod)  ((++(x)) & ((mod) - 1))typedef struct {  int x;  int y;}COOR;static COOR coor[2];int main(int ac,char **av){   i=0;   flag=0;   //done=1;    if (GrOpen()<0)    {     printf("Can't open graphics\n");     exit(1);    }    //GrGetNextEvent(&event);    w=GrNewWindow(GR_ROOT_WINDOW_ID,10,10,300,180,3,GREEN,BLUE);//    gc=GrNewGC();//    GrMapWindow(w);//        draw_main_win(w,gc);          GrClose();   return 0;}void draw_main_win(GR_WINDOW_ID w,GR_GC_ID gc){//draw main window      /*w=GrNewWindow(GR_ROOT_WINDOW_ID,10,10,300,180,3,GREEN,BLUE);//实例化根窗口   gc=GrNewGC();//实例化上下文   GrMapWindow(w);//显示窗口   GR_GC_ID gid; */   /*编译为Native版时变量可在函数内设,但交叉编译时要在程序声明段设*/   bt=GrNewWindow(GR_ROOT_WINDOW_ID,10,190,300,40,3,RED,BLUE);   btLine=GrNewWindow(bt,2,5,65,30,0,RED,BLUE);   btRect=GrNewWindow(bt,65,5,65,30,0,RED,BLUE);   btRound=GrNewWindow(bt,170,5,65,30,0,RED,BLUE);   btClear=GrNewWindow(bt,235,5,65,30,0,RED,BLUE);   we=GrNewWindow(bt,135,15,30,20,2,YELLOW,BLUE);            GrMapWindow(bt);   GrMapWindow(btLine);   GrMapWindow(btRect);   GrMapWindow(btRound);   GrMapWindow(btClear);   GrMapWindow(we);      //draw line button   gid=GrNewGC();   GrSetGCForeground(gid,GREEN);   GrSetGCBackground(gid,WHITE);   GrFillEllipse(btLine,gid,32,15,30,13);   //draw rectangle button   gid=GrNewGC();   GrSetGCForeground(gid,GREEN);   GrSetGCBackground(gid,WHITE);   GrFillEllipse(btRect,gid,32,15,30,13);   //draw round button   gid=GrNewGC();   GrSetGCForeground(gid,GREEN);   GrSetGCBackground(gid,WHITE);   GrFillEllipse(btRound,gid,32,15,30,13);   //draw clear button   gid=GrNewGC();   GrSetGCForeground(gid,GREEN);   GrSetGCBackground(gid,WHITE);   GrFillEllipse(btClear,gid,32,15,30,13);   //draw exit button   GrSetGCForeground(gc,RED);   GrSetGCBackground(gc,YELLOW);   GrText(we,gc,2,15,"EXIT",-1,GR_TFASCII);      //GR_GC_ID t;//为欢迎词选择字体颜色.   t=GrNewGC();   GrSetGCForeground(t,RED);   GrSetGCBackground(t,GREEN);   /*font=GrCreateFont("times.ttf",30,NULL);//为欢迎词设置字体   GrSetGCFont(t,font);   //GrText(w,t,75,35,"                               ",-1,GR_TFASCII);   //GrText(w,t,60,35,"WELCOME TO BEIJING CHINA",-1,GR_TFASCII);   */   GrSetGCForeground(t,YELLOW);   GrSetGCBackground(t,GREEN);   GrText(btLine,t,23,20,"LINE",-1,GR_TFASCII);   GrSetGCForeground(t,YELLOW);   GrSetGCBackground(t,GREEN);   GrText(btRect,t,18,20,"RECT",-1,GR_TFASCII);   GrSetGCForeground(t,YELLOW);   GrSetGCBackground(t,GREEN);   GrText(btRound,t,15,20,"ROUND",-1,GR_TFASCII);   GrSetGCForeground(t,YELLOW);   GrSetGCBackground(t,GREEN);   GrText(btClear,t,15,20,"CLEAR",-1,GR_TFASCII);   //为个窗口(按钮)选择事件   GrSelectEvents(btRect,GR_EVENT_MASK_EXPOSURE | GR_EVENT_MASK_BUTTON_DOWN | GR_EVENT_MASK_BUTTON_UP);   GrSelectEvents(btRound,GR_EVENT_MASK_EXPOSURE | GR_EVENT_MASK_BUTTON_DOWN | GR_EVENT_MASK_BUTTON_UP);   GrSelectEvents(btLine,GR_EVENT_MASK_EXPOSURE | GR_EVENT_MASK_BUTTON_DOWN | GR_EVENT_MASK_BUTTON_UP);   GrSelectEvents(btClear,GR_EVENT_MASK_EXPOSURE | GR_EVENT_MASK_BUTTON_DOWN | GR_EVENT_MASK_BUTTON_UP);   GrSelectEvents(w,GR_EVENT_MASK_BUTTON_UP |     GR_EVENT_MASK_BUTTON_DOWN |     GR_EVENT_MASK_MOUSE_ENTER |		 GR_EVENT_MASK_MOUSE_EXIT |		 GR_EVENT_MASK_MOUSE_MOTION |		 GR_EVENT_MASK_CLOSE_REQ);   GrSelectEvents(we,GR_EVENT_MASK_EXPOSURE | GR_EVENT_MASK_BUTTON_UP);while(1){  GrGetNextEvent(&event);  switch(event.type)  {    case GR_EVENT_TYPE_BUTTON_DOWN:    if(event.button.wid==btLine)    {    printf("drawline\n");    flag=DRAWLINE;    gLine=GrNewGC();    GrSetGCForeground(gLine,RED);    gb=GrNewGC();    GrSetGCForeground(gb,GRAY);    GrFillEllipse(btLine,gb,32,15,30,13);    GrSetGCForeground(gb,GREEN);    GrSetGCBackground(gb,GRAY);    GrText(btLine,gb,23,20,"LINE",-1,GR_TFASCII);    coor[0].x=coor[1].x=0;    coor[0].y=coor[1].y=0;    i=0;    }    //printf("drawline\n");    if(event.button.wid==btRect)    {    printf("drawRectangle\n");    flag=DRAWRECT;    gRect=GrNewGC();    GrSetGCForeground(gRect,YELLOW);    gb=GrNewGC();    GrSetGCForeground(gb,GRAY);    GrFillEllipse(btRect,gb,32,15,30,13);    GrSetGCForeground(gb,GREEN);    GrSetGCBackground(gb,GRAY);    GrText(btRect,gb,18,20,"RECT",-1,GR_TFASCII);    coor[0].x=coor[1].x=0;    coor[0].y=coor[1].y=0;    i=0;    //GrFillEllipse(btLamp,gLamp,25,25,22,22);    //return;    }    if(event.button.wid==btRound)    {    printf("drawRound\n");    flag=DRAWROUND;    gRound=GrNewGC();    GrSetGCForeground(gRound,BLUE);    gb=GrNewGC();    GrSetGCForeground(gb,GRAY);    GrFillEllipse(btRound,gb,32,15,30,13);    GrSetGCForeground(gb,GREEN);    GrSetGCBackground(gb,GRAY);    GrText(btRound,gb,15,20,"ROUND",-1,GR_TFASCII);    coor[0].x=coor[1].x=0;    coor[0].y=coor[1].y=0;    i=0;    }    if(event.button.wid==btClear)    {    printf("drawClear\n");    flag=CLEAR;    gb=GrNewGC();    GrSetGCForeground(gb,GRAY);    GrFillEllipse(btClear,gb,32,15,30,13);    GrSetGCForeground(gb,GREEN);    GrSetGCBackground(gb,GRAY);    GrText(btClear,gb,15,20,"CLEAR",-1,GR_TFASCII);    GrFillRect(w,gb, 0, 0, 300, 180);    coor[0].x=coor[1].x=0;    coor[0].y=coor[1].y=0;    i=0;    //break;    }    if(event.button.wid==w)    {     printf("draw...\n");     draw(&event.button, &event.mouse);    }    break;        case GR_EVENT_TYPE_BUTTON_UP:    if(event.button.wid==btLine)    {    //draw line button again    gb=GrNewGC();    GrSetGCForeground(gb,GREEN);    GrFillEllipse(btLine,gb,32,15,30,13);    t=GrNewGC();    GrSetGCForeground(t,YELLOW);    GrSetGCBackground(t,GREEN);    GrText(btLine,t,23,20,"LINE",-1,GR_TFASCII);    }    //printf("drawline\n");    if(event.button.wid==btRect)    {    //draw rectangle button again    gb=GrNewGC();    GrSetGCForeground(gb,GREEN);    GrFillEllipse(btRect,gb,32,15,30,13);    t=GrNewGC();    GrSetGCForeground(t,YELLOW);    GrSetGCBackground(t,GREEN);    GrText(btRect,t,18,20,"RECT",-1,GR_TFASCII);    }    if(event.button.wid==btRound)    {    //draw round button again    gb=GrNewGC();    GrSetGCForeground(gb,GREEN);    GrFillEllipse(btRound,gb,32,15,30,13);    t=GrNewGC();    GrSetGCForeground(t,YELLOW);    GrSetGCBackground(t,GREEN);    GrText(btRound,t,15,20,"ROUND",-1,GR_TFASCII);    }    if(event.button.wid==btClear)    {    printf("drawClear\n");    flag=0;    gb=GrNewGC();    GrSetGCForeground(gb,GREEN);    GrFillEllipse(btClear,gb,32,15,30,13);    t=GrNewGC();    GrSetGCForeground(t,YELLOW);    GrSetGCBackground(t,GREEN);    GrText(btClear,t,15,20,"CLEAR",-1,GR_TFASCII);    coor[0].x=coor[1].x=0;    coor[0].y=coor[1].y=0;    i=0;    }    if (event.button.wid==we)      {		    GrClose();		    exit(0);      }    break;      } }  //return redo;        }void draw(GR_EVENT_BUTTON *bevent, GR_EVENT_MOUSE *mevent){   if(i<2)    {     //GrText(w,t,60,35,"                           ",-1,GR_TFASCII);     if(mevent->buttons==GR_BUTTON_L)      {         coor[i].x=bevent->x;        coor[i].y=bevent->y;        printf("draw...inw x%d=%d,y%d=%d\n,flag=%d\n",i,coor[i].x,i,coor[i].y,flag);        i++;      }    if(event.mouse.buttons==GR_BUTTON_R)      {        coor[0].x=coor[1].x=0;        coor[0].y=coor[1].y=0;        printf("draw...inw x=%d,y=%d\n,flag=%d\n",coor[i].x,coor[i].y,flag);        i=0;                     }    switch(flag)       {         case DRAWLINE: drawLine(); break;         case DRAWRECT: drawRect(); break;         case DRAWROUND: drawRound(); break;       }    }    else    {      t=GrNewGC();      GrSetGCForeground(t,RED);      GrSetGCBackground(t,GREEN);      //GrText(w,t,60,35,"                               ",-1,GR_TFASCII);      //GrText(w,t,60,35,"Please select one type to draw!",-1,GR_TFASCII);    }    return;}void drawLine(){  if(i>1)//(coor[0].x!=0)&&(coor[0].y!=0)&&(coor[1].x!=0)&&(coor[1].y!=0))    {      GrLine(w,gLine,coor[0].x, coor[0].y, coor[i-1].x, coor[i-1].y);      coor[0].x=coor[i-1].x; coor[0].y=coor[i-1].y;      i--;      printf("drawline...\n");    }  }void drawRect(){  if(i>1)  {    i=0;    width=coor[1].x-coor[0].x; height=coor[1].y-coor[0].y;    GrRect(w,gRect ,coor[0].x, coor[0].y, width, height);    printf("drawRect:x1=%d,y1=%d,x2=%d,y2=%d\n",coor[0].x,coor[0].y,coor[1].x,coor[1].y);  }}void drawRound(){	int x=coor[1].x-coor[0].x;	int y=coor[1].y-coor[0].y;	    	if(i>1)  	{    	i=0;    	r=sqrt(x*x+y*y);    	GrEllipse(w,gRound,coor[0].x, coor[0].y, r, r);    	printf("drawRound: x=%d,y=%d,r=%d\n",coor[0].x,coor[0].y,r);  	}}void draw_Error_win(char *arg[]){  GR_WINDOW_ID winError;  winError=GrNewWindow(w,20,100,400,300,1,WHITE,BLUE);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -