www.pudn.com > microwindows.example10.rar > demoevent.c


/****************************************************************
**Microwindows 事件驱动演示程序 zhang kaohua 2003.12.3***********
**演示内容:鼠标事件,键盘事件.
*****************************************************************/
#define MWINCLUDECOLORS
#include
#include"nano-X.h"

static GR_WINDOW_ID w;      //声明根窗口
static GR_GC_ID gc;         //声明根窗口绘图上下文
static GR_GC_ID gLamp;      //声明灯的绘图上下文
static GR_GC_ID gid;	    //声明按钮的绘图上下文 
static GR_GC_ID t;	    //声明欢迎词绘图上下文
   GR_EVENT event;          //声明事件
   GR_WINDOW_ID btRed;      //声明按钮窗口
   GR_WINDOW_ID btGreen;
   GR_WINDOW_ID btBlue;
   GR_WINDOW_ID btLamp;     //声明灯窗口
   GR_WINDOW_ID we;
   GR_FONT_ID font;         //设置字体号
void draw_main_win(GR_WINDOW_ID w,GR_GC_ID gc);
void draw_Error_win(char *arg[]);
void do_btdown(GR_EVENT_BUTTON  *event);

int main(int ac,char **av)
  {
    
   if (GrOpen()<0)
    {
     printf("Can't open graphics\n");
     exit(1);
    }
 
  //w=GrNewWindow(GR_ROOT_WINDOW_ID,70,30,500,400,3,GREEN,BLUE);//实例化根窗口
  gc=GrNewGC();//实例化上下文
  // GrMapWindow(w);//显示窗口
  
   draw_main_win(w,gc);
   //for(;;){GrGetNextEvent(&event);}
   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,200,3,GREEN,BLUE);//实例化根窗口
   //gc=GrNewGC();//实例化上下文
   GrMapWindow(w);//显示窗口
   //GR_GC_ID gid;
   /*编译为Native版时变量可在函数内设,但交叉编译时要在程序声明段设*/

   btLamp=GrNewWindow(w,125,25,50,50,0,GREEN,0);
   btRed=GrNewWindow(w,55,150,50,20,1,WHITE,BLUE);
   btGreen=GrNewWindow(w,125,150,50,20,1,WHITE,BLUE);
   btBlue=GrNewWindow(w,195,150,50,20,1,WHITE,BLUE);

   GrMapWindow(btLamp);
   GrMapWindow(btRed);
   GrMapWindow(btGreen);
   GrMapWindow(btBlue);

   //画灯
   gLamp=GrNewGC();
   GrSetGCForeground(gLamp,GRAY);
   GrSetGCBackground(gLamp,GREEN);
   GrFillEllipse(btLamp,gLamp,25,25,25,25);
   
   //画红按钮
   gid=GrNewGC();
   GrSetGCForeground(gid,RED);
   GrSetGCBackground(gid,WHITE);
   GrFillEllipse(btRed,gid,25,10,23,8);

   
   //画绿按钮
   gid=GrNewGC();
   GrSetGCForeground(gid,GREEN);
   GrSetGCBackground(gid,WHITE);
   GrFillEllipse(btGreen,gid,25,10,23,8);

   //画蓝按钮
   gid=GrNewGC();
   GrSetGCForeground(gid,BLUE);
   GrSetGCBackground(gid,WHITE);
   GrFillEllipse(btBlue,gid,25,10,23,8);
   
   //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,115,"WELCOME TO BEIJING CHINA",-1,GR_TFASCII);

   GrSetGCForeground(t,YELLOW);
   GrSetGCBackground(t,RED);
   GrText(btRed,t,16,14,"RED",-1,GR_TFASCII);

   GrSetGCForeground(t,YELLOW);
   GrSetGCBackground(t,GREEN);
   GrText(btGreen,t,8,14,"GREEN",-1,GR_TFASCII);

   GrSetGCForeground(t,YELLOW);
   GrSetGCBackground(t,BLUE);
   GrText(btBlue,t,14,14,"BLUE",-1,GR_TFASCII);

   we=GrNewWindow(w,260,10,30,20,2,YELLOW,BLUE);
   GrMapWindow(we);
   GrSetGCForeground(gc,RED);
   GrSetGCBackground(gc,YELLOW);
   GrText(we,gc,2,15,"EXIT",-1,GR_TFASCII);

   //为个窗口(按钮)选择事件
   GrSelectEvents(btRed,GR_EVENT_MASK_EXPOSURE | GR_EVENT_MASK_BUTTON_DOWN);
   GrSelectEvents(btGreen,GR_EVENT_MASK_EXPOSURE | GR_EVENT_MASK_BUTTON_DOWN);
   GrSelectEvents(btBlue,GR_EVENT_MASK_EXPOSURE | GR_EVENT_MASK_BUTTON_DOWN);
   GrSelectEvents(btLamp,GR_EVENT_MASK_EXPOSURE | GR_EVENT_MASK_BUTTON_DOWN);
   GrSelectEvents(we,GR_EVENT_MASK_EXPOSURE | GR_EVENT_MASK_BUTTON_UP);

while(1)
{
  GrGetNextEvent(&event);
  //printf("by threewater test\n"); 
  switch(event.type)
  {
   case GR_EVENT_TYPE_BUTTON_DOWN:
        do_btdown(&event.button);
        break;
   case GR_EVENT_TYPE_BUTTON_UP:
				    if (event.button.wid == we)
              {
		            GrClose();
		            exit(0);
              }
				 break;
   //case GR_EVENT_TYPE_KEY_DOWN:
   //	do_keydown(&event.key);
   //	break;
  }

}
}

void draw_Error_win(char *arg[])
{
  GR_WINDOW_ID winError;
  winError=GrNewWindow(w,20,100,400,300,1,WHITE,BLUE);
}

void do_btdown(GR_EVENT_BUTTON *event)
{//调用鼠标事件
 
 if(event->wid==btRed)
   {
    gLamp=GrNewGC();
    GrSetGCForeground(gLamp,RED);
    GrSetGCBackground(gLamp,GREEN);
    GrFillEllipse(btLamp,gLamp,25,25,22,22);
    return;
   }
 if(event->wid==btGreen)
   {
    gLamp=GrNewGC();
    GrSetGCForeground(gLamp,GREEN);
    GrFillEllipse(btLamp,gLamp,25,25,22,22);
    return;
   }
 if(event->wid==btBlue)
   {
    gLamp=GrNewGC();
    GrSetGCForeground(gLamp,BLUE);
    GrFillEllipse(btLamp,gLamp,25,25,22,22);
    return;
   }
 /*if (event->wid == we)
   {
		GrClose();
		exit(0);
   }*/
}

/*void do_keydown(GR_EVENT_KEY_DOWN *event)
{

}*/