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

📄 keys.c

📁 用GTK+做用户界面 股票每日分时行情用数据库管理——MYSQL 软件应用方式客户端/服务器模式 基于TCP/IP的C/S通信模式 实现STOCK
💻 C
字号:
/*
 * Auth: Eric Harlow
 * File: keys.c
 * Linux GUI Application development
 */

#include <gdk/gdkkeysyms.h>
#include <ctype.h>#include "jszb.h"#include "gmclient.h"
#include "stockclient.h"
#include "stocksql.h"
/* 
 * Movement 
 */
int keyLeft = 0;     
int keyRight = 0;
int keyUp = 0;
int keyDown = 0;

/*
 * Firing
 */
int keyFire = TRUE;

/*
 * AddKey
 *
 * Add the key to the keys that are being kept 
 * track of.  We only keep track of a few of the keys 
 * and we ignore the rest.
 */
void AddKey (GdkEventKey *event)
{

    switch (event->keyval) {

        /* --- Left arrow --- */
        case GDK_Left:
            keyLeft = TRUE;
            break;

        /* --- Right arrow --- */
        case GDK_Right:
            keyRight = TRUE;
            break;

        /* --- Up arrow --- */
        case GDK_Up:
            keyUp = TRUE;
            break;

        /* --- Down arrow --- */
        case GDK_Down:
            keyDown = TRUE;
            break;
 
        /* --- Space --- */
        case ' ':
            keyFire = TRUE;
            break;

        /* --- Ignore the rest --- */
        default:
            break;
    }
}


/*
 * RemoveKey
 *
 * If we're keeping track of a key and the key 
 * goes up, we flag it as not being pressed.
 */
void RemoveKey (GdkEventKey *event)
{
/*    switch (event->keyval) {

        case GDK_Left:
            keyLeft = FALSE;
            break;

        case GDK_Right:
            keyRight = FALSE;
            break;

        case GDK_Up:
            keyUp = FALSE;
            break;

        case GDK_Down:
            keyDown = FALSE;
            break;
 
        case ' ':
            keyFire = FALSE;
            break;

        default:
            break;
    }
*/}


/*
 * HandleKeysPressed
 *
 * When it comes time to move everyone, this 
 * routine is called to move/fire based on the
 * keys that are currently pressed.
 */
void HandleKeysPressed ()
{

    /* 
     * Try and move in each direction
     */
    if (keyLeft) {
        if(areastart<=80){           areastart=1;        }        else{           areastart-=80;        }     }

    if (keyRight) {
        if(areastart<stocksum-80){
             areastart+=80;         }    }

    if (keyUp) {
        if(klinewidth<21)            klinewidth+=4;
    }

    if (keyDown) {
        if(klinewidth>1)            klinewidth-=4;
    }

}
/*
 * AddKey
 *
 * Add the key to the keys that are being kept 
 * track of.  We only keep track of a few of the keys 
 * and we ignore the rest.
 */
void whatKey (GdkEventKey *event)
{
    char code[7];    int paintflag=1;        switch (event->keyval) {

        /* --- Left arrow --- */
        case GDK_Left:             if(areastart <=1){                  paintflag = 0;                  break;             }
             if(areastart<=50){                areastart=1;             }             else{                areastart-=40;             } 
            break;         /* --- Right arrow --- */
        case GDK_Right:
             if(areastart<stocksum-50){
                areastart+=40;              }             else{                paintflag=0;             }              break;

        /* --- Up arrow --- */
        case GDK_Up:
            if(klinewidth<21){                klinewidth+=4;
            }            else{              paintflag = 0;            }
            break;

        /* --- Down arrow --- */
        case GDK_Down:
            if(klinewidth>1){               klinewidth-=4;            }            else{              paintflag = 0;            }
            break;
 
      case GDK_Page_Up:             if(strlen(stockcode) == SHCODELEN)               strcpy(code,findPreStock(SHBZ));            else               strcpy(code,findPreStock(SZBZ));         if(strlen(code) != SZCODELEN && strlen(code) != SHCODELEN){                   paintflag = 0;                   break;               }               frechStock(code);               break; 
      case GDK_Page_Down:             if(strlen(stockcode) == SHCODELEN)               strcpy(code,findNextStock(SHBZ));            else               strcpy(code,findNextStock(SZBZ));         if(strlen(code) != SZCODELEN && strlen(code) != SHCODELEN){                   paintflag = 0;                   break;               }               frechStock(code);               break;
    
      case GDK_Home:               findPreJszb();               break;  
      case GDK_End:               if(!fsflag){                 findNextJszb();               }               else{                 if(!fszbflag){                     fszbflag = 1;                 }                 else{                     fszbflag = 0;                 }               }                 break;         case GDK_KP_Enter:        case GDK_Return:         strcpy(code,gtk_entry_get_text(GTK_ENTRY(stockentry)));         strcpy(code,allTrimStr(code));         gtk_entry_set_text(GTK_ENTRY(stockentry),"");         gtk_entry_set_position(GTK_ENTRY(stockentry),1);         if(isdigit(code[0])){          if(strlen(code) == 2){               if(!strcmp(code,"02"))                     goto F2_LABEL;               if(!strcmp(code,"03"))                     goto F3_LABEL;               if(!strcmp(code,"04"))                     goto F4_LABEL;               if(!strcmp(code,"05"))                     goto F5_LABEL;               if(!strcmp(code,"10"))                     goto F10_LABEL;               if(!strcmp(code,"61")){                 if(stocksql->getSqlGpmxListData(SHBZ,1,200))                  fsflag=GPMXLISTFLAG;                  break;               }               if(!strcmp(code,"63")){                 if(stocksql->getSqlGpmxListData(SZBZ,1,200))                  fsflag=GPMXLISTFLAG;                  break;               }          }          else{           if(strlen(code)!=SZCODELEN && strlen(code)!=SHCODELEN){               paintflag = 0;           }           else{                 if(frechStock(code)==FAIL){                    paintflag = 0;                 }                 else{                   if(fsflag>FSFLAG)  fsflag = FSFLAG;                   stkcli->dealFsline(code);                 }           }          }         }         else{             if(!fsflag){              if(findJszb(code) == FAIL)                   paintflag = 0;             }         }            break;        case GDK_F5:F5_LABEL:               if(fsflag){//                  if(frechStock(stockcode)==FAIL) paintflag = 0;                  fsflag = 0;               }               else{//                  if(frechFsData(stockcode)==FAIL) paintflag = 0;                  fsflag = 1;               }               break;        case GDK_F3:F3_LABEL:               if(frechStock("1A0001")==FAIL) paintflag = 0;                  fsflag = ZSFSFLAG;               break;        case GDK_F4:F4_LABEL:               if(frechStock("2A01")==FAIL) paintflag = 0;                  fsflag = ZSFSFLAG;               break;        case GDK_F10:F10_LABEL:               showF10Info();               paintflag=0;               break;
        case GDK_F2:F2_LABEL:               showPrice();               paintflag=0;               break;
           /* --- Ignore the rest --- */
        default:
            gtk_widget_grab_focus(stockentry);            paintflag=0;            break;
    }
        if(paintflag){       Repaint();    }}
/*
 * motion_notify
 *
 * Called when the user moves the mouse on the screen
 */
gint motion_notify (GtkWidget *widget, GdkEventMotion *event)
{
    int x, y;
    int paintflag =0;        GdkModifierType state;
        /* --- If it's a hint... (combining several events) --- */
    if (event->is_hint) {

        /* --- Get new position --- */
        gdk_window_get_pointer (event->window, &x, &y, &state);
    } else {

        /* --- Get new position --- */
        x = (int)event->x;
        y = (int)event->y;
      state = (GdkModifierType)event->state;
    }
           if (state & GDK_BUTTON1_MASK) {
       if(areatotalstartflag && areatotalstartflag){         if(areatotalendadr >= areatotalstartadr)            drawTotalRectangle(areatotalstartadr,areatotalendadr);         else            drawTotalRectangle(areatotalendadr,areatotalstartadr);         if(x>klineareax && x<klineareax+klineareawidth &&            y>klineareay && y<klineareay+klineareaheight){          areatotalendadr=areastart+(x-klineareax)/(klinewidth+1);          if(areatotalendadr >= areatotalstartadr){           drawTotalRectangle(areatotalstartadr,areatotalendadr);           showAreaTotalWin(areatotalstartadr,areatotalendadr);           }          else{           drawTotalRectangle(areatotalendadr,areatotalstartadr);           showAreaTotalWin(areatotalendadr,areatotalstartadr);           }         }         else{          areatotalstartflag = 0;         }       }     } 

  if(cursormouseflag){       drawXcur(mouselinex,mouseliney);      
       if(x>klineareax && x<klineareax+klineareawidth &&            y>klineareay && y<klineareay+klineareaheight){            mouselinex=areastart+(x-klineareax)/(klinewidth+1);            mouseliney=y;            mouselineflag = 1;            paintflag =1;            showHqWin();        }        else{            if(mouselineflag == 1){              paintflag = 1;               mouselineflag = 0;            }        }       if(paintflag){        drawJsRecord(mouselinex);          drawXcur(mouselinex,mouseliney);      }   }      return TRUE;
}gint button_notify (GtkWidget *widget, GdkEventButton *event)
{
    int x, y;
    GdkModifierType state;

     /* --- Get new position --- */
    gdk_window_get_pointer (event->window, &x, &y, &state);
     if( event->button == 1 ) {        if(cursormouseflag){            if(!hqwinflag) openHqWin();           else           closeHqWin();         }        if(areatotalflag){          if(x>klineareax && x<klineareax+klineareawidth &&             y>klineareay && y<klineareay+klineareaheight){            areatotalstartflag = 1;            areatotalstartadr=areastart+                 (x-klineareax)/(klinewidth+1);            areatotalendadr=areatotalstartadr;            drawTotalRectangle(areatotalstartadr,areatotalendadr);            showAreaTotalWin(areatotalstartadr,areatotalendadr);            }        }        return TRUE;     }                 if( event->button == 3 ) {       		gtk_menu_popup(GTK_MENU(popmenu), NULL, NULL, NULL,			NULL, event->button, event->time );		return TRUE;      }        return FALSE;
}

gint releasebutton_notify (GtkWidget *widget, GdkEventButton *event)
{
     if( event->button == 1 ) {       if(areatotalflag){          if(areatotalstartflag){           if(areatotalendadr>=areatotalstartadr)              drawTotalRectangle(areatotalstartadr,areatotalendadr);           else              drawTotalRectangle(areatotalendadr,areatotalstartadr);           areatotalstartflag = 0;         }       }     }               return FALSE;
}
void printstr(char *str){   int i;      for(i=0;i<(int)strlen(str);i++){      printf("%d ",str[i]);   }   printf("%d\n",strlen(str));}gchar *ltrimStr(char *str){  int i;  char *tmp;    if(str == NULL) return NULL;  tmp=str;   for(i=0;i<(int)strlen(tmp);i++){     if(*tmp !=' ' && *tmp !='\r') break;     if(*tmp ==' ' || *tmp =='\r') tmp++;  }//  printstr(tmp);   return tmp;      }gchar * rtrimStr(char *str){   int i;   char *tmp;      if(str == NULL) return NULL;   tmp=str;   for(i=strlen(tmp)-1;i>=0;i--){       if(tmp[i]!=' ' && tmp[i]!='\r') break;       if(tmp[i]==' ' || tmp[i]=='\r') tmp[i]='\0';   }   return tmp;    }gchar * allTrimStr(char *str){   char *tmp;   if(str == NULL) return NULL;   tmp=str;   strcpy(tmp,ltrimStr(tmp));   strcpy(tmp,rtrimStr(tmp));   return tmp;}

⌨️ 快捷键说明

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