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

📄 odbuttons.cpp

📁 Linux/windows 环境下跨平台开发程序
💻 CPP
📖 第 1 页 / 共 4 页
字号:
			break;
		case 502:
			pts[0].x = ix-5;	pts[1].x = pts[2].x = ix;	pts[3].x = ix +5;
			pts[0].y = pts[1].y = rec->bottom-8;	pts[2].y = pts[3].y = rec->top+8;
			o->oPolyline(pts, 4);
			break;
		case 503:
			pts[0].x = ix+5;	pts[1].x = pts[2].x = ix;	pts[3].x = ix -5;
			pts[0].y = pts[1].y = rec->bottom-8;	pts[2].y = pts[3].y = rec->top+8;
			o->oPolyline(pts, 4);
			break;
			}
		o->UpdateRect(rec, false);
		break;
		}
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Execute polar plot templates as owner drawn buttons
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void OD_PolarTempl(int cmd, void *par, RECT *rec, anyOutput *o,
		void *data, int id)
{
	LineDEF Line = {.0f, 1.0f, 0x0L, 0x0L};
	FillDEF Fill = {FILL_NONE, 0x00ffffffL, 1.0, 0L};
	FillDEF FillR = {FILL_NONE, 0x000000ffL, 1.0, 0L};
	FillDEF FillG = {FILL_NONE, 0x0000ff00L, 1.0, 0L};
	FillDEF FillB = {FILL_NONE, 0x00ff0000L, 1.0, 0L};
	FillDEF FillY = {FILL_NONE, 0x0000ffffL, 1.0, 0L};
	TextDEF td, otd;
	POINT pts[12];
	int ix, iy;

	switch(cmd) {
	case OD_DRAWNORMAL:
	case OD_DRAWSELECTED:
		Line.color = cmd == OD_DRAWSELECTED ? 0x00000000L : 0x00e8e8e8L;
		Fill.color = cmd == OD_DRAWSELECTED ? 0x00ffffffL : 0x00e8e8e8L;
		ix = (rec->left + rec->right)/2;
		iy = (rec->top +rec->bottom)/2;
		o->SetLine(&Line);
		pts[0].x = pts[3].x = pts[4].x = rec->left;
		pts[0].y = pts[1].y = pts[4].y = rec->top;
		pts[1].x = pts[2].x = rec->right-1;
		pts[2].y = pts[3].y = rec->bottom-1;
		o->oPolyline(pts, 5);
		Line.color = 0x00000000L;
		o->SetLine(&Line);
		o->SetFill(&Fill);
		o->oCircle(rec->left+3, rec->top+3, rec->right-3, rec->bottom-3);
		switch(id) {
		case 200:
		case 201:
		case 202:
			if(id == 201 || id == 202) {
				pts[0].x = rec->left+13;	pts[0].y = rec->top+10;
				pts[1].x = rec->left+15;	pts[1].y = rec->top+25;
				pts[2].x = rec->right-19;	pts[2].y = rec->top+33;
				pts[3].x = rec->right-11;	pts[3].y = rec->top+13;
				o->oPolyline(pts, 4);
				o->SetFill(&FillG);
				}
			else o->SetFill(&FillR);
			if(id == 200 || id == 201) {
				o->oCircle(rec->left+10, rec->top+7, rec->left+16, rec->top+13);
				o->oCircle(rec->left+12, rec->top+22, rec->left+18, rec->top+28);
				o->oCircle(rec->right-22, rec->top+30, rec->right-16, rec->top+36);
				o->oCircle(rec->right-14, rec->top+10, rec->right-8, rec->top+16);
				}
			break;
		case 203:
			pts[0].x = rec->left+7;		pts[0].y = rec->top+13;
			pts[1].x = rec->left+10;	pts[1].y = rec->top+30;
			pts[2].x = rec->right-19;	pts[2].y = rec->top+33;
			pts[3].x = rec->right-9;	pts[3].y = rec->top+11;
			pts[4].x = ix-4;			pts[4].y =iy +3;
			o->SetFill(&FillY);
			o->oPolygon(pts, 5);
			break;
		case 204:
			if(cmd == OD_DRAWNORMAL) FillG.color = 0x00e8e8e8L;
			o->SetFill(&FillG);
			o->oCircle(ix-6, rec->top+5, ix+6, iy+6);
			memcpy(&td, &o->TxtSet, sizeof(TextDEF));
			memcpy(&otd, &o->TxtSet, sizeof(TextDEF));
			td.Align = TXA_HCENTER | TXA_VTOP;
			td.Style = TXS_NORMAL;
			td.Mode = TXM_TRANSPARENT;
			td.fSize *= 0.8;	td.iSize = 0;
			td.ColTxt = 0x00ff0000L;
			o->SetTextSpec(&td);
			o->oTextOut(ix, iy+3, "y=f(x)", 0);
			o->SetTextSpec(&otd);
			}
		o->UpdateRect(rec, false);
		break;
		}
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Execute templates for pie-charts as owner drawn buttons
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void OD_PieTempl(int cmd, void *par, RECT *rec, anyOutput *o,
		void *data, int id)
{
	LineDEF Line = {.0, 1.0, 0x0L, 0x0L};
	FillDEF Fill = {FILL_NONE, 0x00ffffffL, 1.0, 0L};
	FillDEF FillR = {FILL_NONE, 0x000000ffL, 1.0, 0L};
	FillDEF FillG = {FILL_NONE, 0x0000ff00L, 1.0, 0L};
	FillDEF FillB = {FILL_NONE, 0x00ff0000L, 1.0, 0L};
	double angels1[]={90.0, 45.0, -45.0, 90.0};
	double angels2[]={180, 157.5, 112.5, 0.0};
	POINT pts[12];
	int ix, iy;
	double r, *ang = angels1;
	segment *seg = 0L;
	lfPOINT fc;

	switch(cmd) {
	case OD_DRAWNORMAL:
	case OD_DRAWSELECTED:
		Line.color = cmd == OD_DRAWSELECTED ? 0x00000000L : 0x00e8e8e8L;
		Fill.color = cmd == OD_DRAWSELECTED ? 0x00ffffffL : 0x00e8e8e8L;
		ix = (rec->left + rec->right)/2;
		iy = (rec->top +rec->bottom)/2;
		o->SetLine(&Line);
		pts[0].x = pts[3].x = pts[4].x = rec->left;
		pts[0].y = pts[1].y = pts[4].y = rec->top;
		pts[1].x = pts[2].x = rec->right-1;
		pts[2].y = pts[3].y = rec->bottom-1;
		o->oPolyline(pts, 5);
		Line.color = 0x00000000L;
		o->SetLine(&Line);
		o->SetFill(&Fill);
		o->oRectangle(rec->left+3, rec->top+3, rec->right-3, rec->bottom-3);
		switch(id) {
		case 401:		case 411:
			ang = angels2;
		case 400:		case 410:
			fc.fx = o->fix2un((double)ix-1);		fc.fy = o->fiy2un((double)iy);
			r = o->fix2un((double)(rec->right -rec->left))/3;
			seg = new segment(0L, 0L, &fc, 0.0, r, ang[0], ang[1]);
			if(seg) {
				if(id == 410 || id == 411) seg->SetSize(SIZE_RADIUS1, r*.7);
				seg->Command(CMD_SEG_LINE, &Line, 0L);
				seg->Command(CMD_SEG_FILL, &FillR, 0L);
				seg->DoPlot(o);
				seg->SetSize(SIZE_ANGLE1, ang[1]);
				seg->SetSize(SIZE_ANGLE2, ang[2]);
				seg->Command(CMD_SEG_FILL, &FillG, 0L);
				seg->DoPlot(o);
				seg->SetSize(SIZE_ANGLE1, ang[2]);
				seg->SetSize(SIZE_ANGLE2, ang[3]);
				seg->Command(CMD_SEG_FILL, &FillB, 0L);
				seg->DoPlot(o);
				delete seg;
				}
			break;
			}
		o->UpdateRect(rec, false);
		break;
		}
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Show a simple graph how 3D axes are organized as owner drawn button
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void OD_AxisDesc3D(int cmd, void *par, RECT *rec, anyOutput *o,
		void *data, int id)
{
	POINT pts[5];

	switch(cmd) {
	case OD_DRAWNORMAL:
	case OD_DRAWSELECTED:
		pts[0].x = ((rec->left + rec->right)>>1)-15;
		pts[0].y = ((rec->bottom + rec->top)>>1)+10;
		pts[1].x = rec->left + 15;	pts[1].y = rec->bottom-20;
		o->oSolidLine(pts);
		pts[2].x = pts[1].x +2;		pts[2].y = pts[1].y -7;
		o->oSolidLine(pts + 1);
		pts[2].x = pts[1].x +6;		pts[2].y = pts[1].y -2;
		o->oSolidLine(pts + 1);
		o->oTextOut(pts[1].x -2, pts[1].y -5, "z", 1);
		pts[1].x = pts[0].x;		pts[1].y = rec->top+20;
		o->oSolidLine(pts);
		pts[2].x = pts[1].x -4;		pts[2].y = pts[1].y +6;
		o->oSolidLine(pts + 1);
		pts[2].x = pts[1].x +4;
		o->oSolidLine(pts + 1);
		o->oTextOut(pts[1].x + 4, pts[1].y - 18, "y", 1);
		pts[1].x = rec->right-15;	pts[1].y = rec->bottom -22;
		o->oSolidLine(pts);
		pts[2].x = pts[1].x -6;		pts[2].y = pts[1].y +2;
		o->oSolidLine(pts + 1);
		pts[2].x = pts[1].x -4;		pts[2].y = pts[1].y -5;
		o->oSolidLine(pts + 1);
		o->oTextOut(pts[1].x +9, pts[1].y -4, "x", 1);
		o->UpdateRect(rec, false);
		break;
		}
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Execute axis breaks symbols as owner drawn button
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void OD_BreakTempl(int cmd, void *par, RECT *rec, anyOutput *o,
		void *data, int id)
{
	LineDEF Line = {.1f, 1.0f, 0x0L, 0x0L};
	FillDEF Fill = {FILL_NONE, 0x00ffffffL, 1.0, 0L};
	POINT pts[15];
	int i, ix, iy;

	switch(cmd) {
	case OD_DRAWNORMAL:
	case OD_DRAWSELECTED:
		Line.color = cmd == OD_DRAWSELECTED ? 0x00000000L : 0x00e8e8e8L;
		Fill.color = cmd == OD_DRAWSELECTED ? 0x00ffffffL : 0x00e8e8e8L;
		ix = (rec->left + rec->right)>>1;
		iy = (rec->top +rec->bottom)>>1;
		o->SetLine(&Line);
		pts[0].x = pts[3].x = pts[4].x = rec->left;
		pts[0].y = pts[1].y = pts[4].y = rec->top;
		pts[1].x = pts[2].x = rec->right-1;
		pts[2].y = pts[3].y = rec->bottom-1;
		o->oPolyline(pts, 5);
		Line.color = 0x00000000L;
		o->SetLine(&Line);
		o->SetFill(&Fill);
		o->oRectangle(rec->left+3, rec->top+3, rec->right-3, rec->bottom-3);
		pts[0].x = pts[1].x = ix;
		pts[0].y = rec->top +5;		pts[1].y = iy-3;
		o->oSolidLine(pts);
		pts[0].y = rec->bottom -7;		pts[1].y = iy+3;
		o->oSolidLine(pts);
		switch(id) {
		case 402:
			pts[0].x = ix-7;		pts[1].x = ix+7;
			pts[0].y = iy;			pts[1].y = iy-6;
			o->oSolidLine(pts);
			pts[0].y += 6;			pts[1].y += 6;
			o->oSolidLine(pts);
			break;
		case 403:
			pts[0].x = ix-7;		pts[1].x = ix+7;
			pts[0].y = iy-3;		pts[1].y = iy-3;
			o->oSolidLine(pts);
			pts[1].y += 6;			o->oSolidLine(pts);
			pts[0].y += 6;			o->oSolidLine(pts);
			break;
		case 404:
			for(i = 0; i < 15; i++) {
				pts[i].x = ix +i -7;
				pts[i].y = iy - 3 + (int)(sin((double)i*0.41887902)*2.5);
				}
			o->oPolyline(pts, 15);
			for(i = 0; i < 15; i++) pts[i].y += 6;
			o->oPolyline(pts, 15);
			break;
			}
		o->UpdateRect(rec, false);
		break;
		}
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Execute plot selection templates as owner drawn button
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void UtilBarDraw(POINT *pts, int x, int y1, int y2, anyOutput *o)
{
	pts[1].x = pts[0].x = pts[4].x = x;
	pts[0].y = y1;				pts[1].y = y2;
	pts[2].y = pts[1].y-1;		pts[2].x = pts[3].x = pts[0].x-3;	
	pts[3].y = pts[0].y-1;		pts[4].y = pts[0].y;
	o->oPolygon(pts, 5);
	pts[2].x += 5;				pts[3].x += 5;
	o->oPolygon(pts, 5);
	pts[1].x -= 3;				pts[1].y = pts[0].y-1;
	pts[2].x = pts[0].x-2;		pts[2].y = pts[0].y-2;
	o->oPolygon(pts, 5);
}

void OD_PlotTempl(int cmd, void *par, RECT *rec, anyOutput *o,
		void *data, int id)
{
	LineDEF Line = {.0, 1.0, 0x0L, 0x0L};
	LineDEF rLine = {.0, 1.0, 0x00000080L, 0x0L};
	LineDEF bLine = {.0, 1.0, 0x00e00000L, 0x0L};
	LineDEF gLine = {.0, 1.0, 0x0000e000L, 0x0L};
	FillDEF Fill = {FILL_NONE, 0x00ffffffL, 1.0, 0L};
	FillDEF FillR = {FILL_NONE, 0x000000ffL, 1.0, 0L};
	FillDEF FillG = {FILL_NONE, 0x0000ff00L, 1.0, 0L};
	FillDEF FillB = {FILL_NONE, 0x00ff0000L, 1.0, 0L};
	FillDEF FillY = {FILL_NONE, 0x0000ffffL, 1.0, 0L};
	TextDEF td, otd;
	POINT pts[12];
	int i, j, ix, iy;
	double r;
	segment *seg = 0L;
	lfPOINT fc;

	switch(cmd) {
	case OD_DRAWNORMAL:
	case OD_DRAWSELECTED:
		ix = (rec->left + rec->right)>>1;
		iy = (rec->top +rec->bottom)>>1;
		switch(id) {
		case 560:	case 561:	case 562:	case 563:	case 564:		//3D axes
		case 565:
			OD_AxisTempl3D(cmd, par, rec, o, data, 410+AxisTempl3D);
			break;
		default:
			Line.color = cmd == OD_DRAWSELECTED ? 0x00000000L : 0x00e8e8e8L;
			Fill.color = cmd == OD_DRAWSELECTED ? 0x00ffffffL : 0x00e8e8e8L;
			o->SetLine(&Line);
			pts[0].x = pts[3].x = pts[4].x = rec->left;
			pts[0].y = pts[1].y = pts[4].y = rec->top;
			pts[1].x = pts[2].x = rec->right-1;
			pts[2].y = pts[3].y = rec->bottom-1;
			o->oPolyline(pts, 5);
			Line.color = 0x00000000L;
			o->SetLine(&Line);
			o->SetFill(&Fill);
			o->oRectangle(rec->left+3, rec->top+3, rec->right-3, rec->bottom-3);
			break;
			}
		switch(id) {
		case 500:
		case 501:
			fc.fx = o->fix2un((double)ix-1);		fc.fy = o->fiy2un((double)iy);
			r = o->fix2un((double)(rec->right -rec->left))/3;
			seg = new segment(0L, 0L, &fc, 0.0, r, 90.0, 45.0);
			if(seg) {
				if(id == 501) seg->SetSize(SIZE_RADIUS1, r*.7f);
				seg->Command(CMD_SEG_LINE, &Line, 0L);
				seg->Command(CMD_SEG_FILL, &FillR, 0L);
				seg->DoPlot(o);
				seg->SetSize(SIZE_ANGLE1, 45.0f);
				seg->SetSize(SIZE_ANGLE2, -45.0f);
				seg->Command(CMD_SEG_FILL, &FillG, 0L);
				seg->DoPlot(o);
				seg->SetSize(SIZE_ANGLE1, -45.0f);

⌨️ 快捷键说明

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