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;
}