www.pudn.com > cwin.rar > GETXYF.C
/*-----------------------------------------------------------
函数 getxyf : 编辑双精度浮点类型数据
-----------------------------------------------------------*/
#include
#include
#include
unsigned _Cdecl getxyf(col,line,width,value,dec,limit1,limit2)
int col; /* 编辑窗口左上角列坐标(以字节为单位) */
int line; /* 编辑窗口左上角行坐标(以象素为单位) */
int width; /* 编辑窗口宽度 */
double *value; /* 指向待编辑的双精度浮点数据的指针 */
int dec; /* 待编辑数据中小数点的位置 */
double limit1; /* 待编辑数据的上限 */
double limit2; /* 待编辑数据的下限 */
{
char s[21]; /* 编辑缓冲区 */
char p[21]; /* 格式缓冲区 */
unsigned h; /* 编辑键 */
/*-- 检验数据值上、下限的合法性 -------*/
if(limit1 >= limit2)
return KEY_ESC;
if(width>20)
width = 20;
if(dec>=width)
dec = width-1;
/*-- 构造格式缓冲区 -------------------*/
memset(p,'9',width);
*(p+width) = 0;
/*-- 对非法输入值循环 -----------------*/
while(1)
{
/*-- 如果数值溢出用星号表示 -------*/
if(*value==HUGE_VAL)
{
memset(s,'*',width);
s[width-dec] = '.';
s[width] = 0;
}
/*-- 数据转换为字符串 -------------*/
else
sprintf(s,"%*.*f",width,dec,*value);
/*-- 调用通用数据编辑函数 ---------*/
h = getxya(col,line,width,s,p);
/*-- 如果作废编辑或编辑内容不变 ---*/
if(h==KEY_ESC || h==RIGHT_BUTTON)
break;
/*-- 字符串转换回双精度型数据 -----*/
*value = atof(s);
if(*valuelimit2)
{
sound(900);
delay(100);
nosound();
}
/*-- 构造输出结果 ------------------*/
else
{
int havemouse = ismouselight();
sprintf(s,"%*.*f",width,dec,*value);
_TextCol = col;
if(havemouse)
delight_mouse();
putnstr(s,width);
if(havemouse)
light_mouse();
break;
}
}
/*-- 返回退出编辑状态的键盘码 ---------*/
return h;
}