struct _frame_coordinates
{
int X_Origins;//原点X坐标,原点在对话框中的位置
int Y_Origins;//原点Y坐标,原点在对话框中的位置
int X_W;// X宽度 ,坐标宽
int Y_W;// Y宽度 ,坐标宽
int X_Min;//X_Min转化坐标后原点坐标,一般情况下都为0
int Y_Min;//Y_Min转化坐标后原点坐标,一般情况下都为0
int X_Max;// X_Max 转化坐标后X轴要画的点数,光谱仪中为2048
int Y_Max;// Y_Max 转化坐标后Y轴最高点的坐标,光谱仪中为6000
};
struct _frame_coordinates myCoordinates;
void ShowLine(HDC neicun_hdc,struct _frame_coordinates c_Line, unsigned short yPix[])
{
int i,j,X0,Y0,X1,Y1;
char str[10],strShow[20];
char str1[10],strShow1[20];
double xPerPix,yPerPix;
LOGFONT* mg_font,*mg_font1;
sprintf(str,"%d",c_Line.Y_Max/3);
sprintf(str1,"%d",c_Line.Y_Max*2/3);
mg_font = CreateLogFont (NULL, "song", "GB2312",
FONT_WEIGHT_REGULAR, FONT_SLANT_ROMAN, FONT_FLIP_NIL,
FONT_OTHER_NIL, FONT_UNDERLINE_NONE, FONT_STRUCKOUT_NONE,
12, 0);
SelectFont(neicun_hdc, mg_font);
SetBkColor (neicun_hdc, COLOR_black);
SetTextColor(neicun_hdc,RGB2Pixel(neicun_hdc, 255, 255, 255));
SetBrushColor(neicun_hdc, RGB2Pixel(neicun_hdc, 0x0, 0x0, 0x0));//, 0x80));
SetPenColor(neicun_hdc, RGB2Pixel(neicun_hdc, 0xff, 0xff, 0xff));//, 0xff));
FillBox (neicun_hdc, 3, 51, 314, 169);
LineEx (neicun_hdc, c_Line.X_Origins-10,c_Line.Y_Origins, 320, c_Line.Y_Origins); //X坐标
LineEx (neicun_hdc, c_Line.X_Origins, c_Line.Y_Origins-c_Line.Y_W, c_Line.X_Origins, c_Line.Y_Origins);//y坐标
//分割线
SetPenType (neicun_hdc, PT_ON_OFF_DASH);
SetPenDashes (neicun_hdc, 0, "\1\1", 2);
TextOut(neicun_hdc, c_Line.X_Origins,c_Line.Y_Origins-c_Line.Y_W/3-15, str);
LineEx (neicun_hdc, c_Line.X_Origins,c_Line.Y_Origins-c_Line.Y_W/3, 320, c_Line.Y_Origins-c_Line.Y_W/3);
TextOut(neicun_hdc, c_Line.X_Origins,c_Line.Y_Origins-c_Line.Y_W*2/3-15, str1);
LineEx (neicun_hdc, c_Line.X_Origins,c_Line.Y_Origins-c_Line.Y_W*2/3, 320, c_Line.Y_Origins-c_Line.Y_W*2/3);
LineEx (neicun_hdc, c_Line.X_Origins+c_Line.X_W/4, c_Line.Y_Origins-c_Line.Y_W, c_Line.X_Origins+c_Line.X_W/4, c_Line.Y_Origins);
LineEx (neicun_hdc, c_Line.X_Origins+c_Line.X_W*2/4, c_Line.Y_Origins-c_Line.Y_W, c_Line.X_Origins+c_Line.X_W*2/4, c_Line.Y_Origins);
LineEx (neicun_hdc, c_Line.X_Origins+c_Line.X_W*3/4, c_Line.Y_Origins-c_Line.Y_W, c_Line.X_Origins+c_Line.X_W*3/4, c_Line.Y_Origins);
X0=c_Line.X_Origins;
Y0=c_Line.Y_Origins+(c_Line.Y_W/c_Line.Y_Max)*yPix[0];//初如化第一个点的坐标
xPerPix=(double)c_Line.X_W/(double)c_Line.X_Max;
yPerPix=(double)c_Line.Y_W/(double)c_Line.Y_Max;
for(i=1;i<c_Line.X_Max;i++)
{
X1=c_Line.X_Origins+xPerPix*i;//变换坐标
Y1=c_Line.Y_Origins-yPerPix*yPix[i];//变换坐标
LineEx (neicun_hdc, X0, Y0, X1, Y1);
X0=X1;
Y0=Y1;
}
}
{
int X_Origins;//原点X坐标,原点在对话框中的位置
int Y_Origins;//原点Y坐标,原点在对话框中的位置
int X_W;// X宽度 ,坐标宽
int Y_W;// Y宽度 ,坐标宽
int X_Min;//X_Min转化坐标后原点坐标,一般情况下都为0
int Y_Min;//Y_Min转化坐标后原点坐标,一般情况下都为0
int X_Max;// X_Max 转化坐标后X轴要画的点数,光谱仪中为2048
int Y_Max;// Y_Max 转化坐标后Y轴最高点的坐标,光谱仪中为6000
};
struct _frame_coordinates myCoordinates;
void ShowLine(HDC neicun_hdc,struct _frame_coordinates c_Line, unsigned short yPix[])
{
int i,j,X0,Y0,X1,Y1;
char str[10],strShow[20];
char str1[10],strShow1[20];
double xPerPix,yPerPix;
LOGFONT* mg_font,*mg_font1;
sprintf(str,"%d",c_Line.Y_Max/3);
sprintf(str1,"%d",c_Line.Y_Max*2/3);
mg_font = CreateLogFont (NULL, "song", "GB2312",
FONT_WEIGHT_REGULAR, FONT_SLANT_ROMAN, FONT_FLIP_NIL,
FONT_OTHER_NIL, FONT_UNDERLINE_NONE, FONT_STRUCKOUT_NONE,
12, 0);
SelectFont(neicun_hdc, mg_font);
SetBkColor (neicun_hdc, COLOR_black);
SetTextColor(neicun_hdc,RGB2Pixel(neicun_hdc, 255, 255, 255));
SetBrushColor(neicun_hdc, RGB2Pixel(neicun_hdc, 0x0, 0x0, 0x0));//, 0x80));
SetPenColor(neicun_hdc, RGB2Pixel(neicun_hdc, 0xff, 0xff, 0xff));//, 0xff));
FillBox (neicun_hdc, 3, 51, 314, 169);
LineEx (neicun_hdc, c_Line.X_Origins-10,c_Line.Y_Origins, 320, c_Line.Y_Origins); //X坐标
LineEx (neicun_hdc, c_Line.X_Origins, c_Line.Y_Origins-c_Line.Y_W, c_Line.X_Origins, c_Line.Y_Origins);//y坐标
//分割线
SetPenType (neicun_hdc, PT_ON_OFF_DASH);
SetPenDashes (neicun_hdc, 0, "\1\1", 2);
TextOut(neicun_hdc, c_Line.X_Origins,c_Line.Y_Origins-c_Line.Y_W/3-15, str);
LineEx (neicun_hdc, c_Line.X_Origins,c_Line.Y_Origins-c_Line.Y_W/3, 320, c_Line.Y_Origins-c_Line.Y_W/3);
TextOut(neicun_hdc, c_Line.X_Origins,c_Line.Y_Origins-c_Line.Y_W*2/3-15, str1);
LineEx (neicun_hdc, c_Line.X_Origins,c_Line.Y_Origins-c_Line.Y_W*2/3, 320, c_Line.Y_Origins-c_Line.Y_W*2/3);
LineEx (neicun_hdc, c_Line.X_Origins+c_Line.X_W/4, c_Line.Y_Origins-c_Line.Y_W, c_Line.X_Origins+c_Line.X_W/4, c_Line.Y_Origins);
LineEx (neicun_hdc, c_Line.X_Origins+c_Line.X_W*2/4, c_Line.Y_Origins-c_Line.Y_W, c_Line.X_Origins+c_Line.X_W*2/4, c_Line.Y_Origins);
LineEx (neicun_hdc, c_Line.X_Origins+c_Line.X_W*3/4, c_Line.Y_Origins-c_Line.Y_W, c_Line.X_Origins+c_Line.X_W*3/4, c_Line.Y_Origins);
X0=c_Line.X_Origins;
Y0=c_Line.Y_Origins+(c_Line.Y_W/c_Line.Y_Max)*yPix[0];//初如化第一个点的坐标
xPerPix=(double)c_Line.X_W/(double)c_Line.X_Max;
yPerPix=(double)c_Line.Y_W/(double)c_Line.Y_Max;
for(i=1;i<c_Line.X_Max;i++)
{
X1=c_Line.X_Origins+xPerPix*i;//变换坐标
Y1=c_Line.Y_Origins-yPerPix*yPix[i];//变换坐标
LineEx (neicun_hdc, X0, Y0, X1, Y1);
X0=X1;
Y0=Y1;
}
}
使用如下:
myCoordinates.X_Origins=1;
myCoordinates.Y_Origins=218;
myCoordinates.X_W=315;
myCoordinates.Y_W=165;
myCoordinates.X_Max=2048;
myCoordinates.Y_Max=6000;
myCoordinates.Y_Origins=218;
myCoordinates.X_W=315;
myCoordinates.Y_W=165;
myCoordinates.X_Max=2048;
myCoordinates.Y_Max=6000;