www.pudn.com > cwin.rar > GETXYD.C


    /*----------------------------------------------------------- 
        函数 getxyd : 编辑日期型数据 
    -----------------------------------------------------------*/ 
    #include  
 
    unsigned _Cdecl getxyd(col,line,d) 
    int col;             /* 编辑窗口左上角列坐标(以字节为单位) */ 
    int line;            /* 编辑窗口左上角行坐标(以象素为单位) */ 
    struct date *d;      /* 指向待编辑的日期数据的指针         */ 
    { 
        struct date new_d = *d; 
        int   key  = KEY_Right; 
        int  i     = 0; 
        int  j     = new_d.da_year; 
        int  old_c = _TextColor; 
        int  old_b = _Background; 
        int  havemouse = ismouselight(); 
        int  modified  = NO; 
        int  limit1,limit2,curr_col,width; 
        char buff[11]; 
 
        /*-- 构造编辑缓冲区 -------------------*/ 
        sprintf(buff,"%04d.%02d.%02d",d->da_year,d->da_mon,d->da_day); 
        _TextCol    = col; 
        _TextLine   = line; 
        _TextColor  = _EditColor; 
        _Background = _EditBk; 
        if(havemouse) 
            delight_mouse(); 
        putnstr(buff,10); 
        if(havemouse) 
            light_mouse(); 
 
        /*-- 循环:编辑日期型数据的年、月和日 --*/ 
        do 
        { 
            switch(i) 
            { 
                case 0:          /* 编辑字段年 */ 
                    curr_col = col; 
                    width    = 4; 
                    limit1   = 1; 
                    limit2   = 2099; 
                    j        = new_d.da_year; 
                    break; 
                case 1:          /* 编辑字段月 */ 
                    curr_col = col+5*_Xtimes; 
                    width    = 2; 
                    limit1   = 1; 
                    limit2   = 12; 
                    j        = new_d.da_mon; 
                    break; 
                case 2:          /* 编辑字段日 */ 
                    curr_col = col+8*_Xtimes; 
                    width    = 2; 
                    limit1   = 1; 
                    limit2   = 31; 
                    j        = new_d.da_day; 
            } 
            key = getxyi(curr_col,line,width,&j,limit1,limit2); 
            if(key>1024) 
            { 
               key      -= 1024; 
               modified  = YES; 
            } 
            switch(i) 
            { 
                case 0: 
                    new_d.da_year = j; 
                    break; 
                case 1: 
                    new_d.da_mon  = j; 
                    break; 
                case 2: 
                    new_d.da_day  = j; 
            } 
            if(key==KEY_Left) 
                i--; 
            else if(key==KEY_Right || key==KEY_ENTER) 
                i++; 
        }while(i>=0 && i<=2 && (key==KEY_Left || key==KEY_Right || key==KEY_ENTER)); 
 
        /*-- 构造输出结果 ---------------------*/ 
        if(key!=KEY_ESC) 
            *d=new_d; 
 
        /*-- 以原正文和背景色显示被编辑的日期 -*/ 
        sprintf(buff,"%04d.%02d.%02d",d->da_year,d->da_mon,d->da_day); 
        _TextCol = col; 
        set_text_color(old_c); 
        set_background(old_b); 
        if(havemouse) 
            delight_mouse(); 
        putnstr(buff,10); 
        if(havemouse) 
            light_mouse(); 
 
        /*-- 返回退出编辑状态的键盘码 ---------*/ 
        if(modified) 
            key += 1024; 
        return key; 
    }