📄 sample4_3.c
字号:
#include <cvirte.h> /* needed if linking executable in external compiler; harmless otherwise */#include <userint.h>#include "sample4_3.h"#include <ansi_c.h> static int hPanel;static int nWidth, nHeight, nLeftDown;static int nYPos, nXPos, prevCursor;int Pen_Color;unsigned short Tool_width;int pen=1,eraser=0,bucket=0;void SetTools(int *tool,int control);int IsClickCtrl (int panel, int control, int x, int y) ;int main (int argc, char *argv[]){ if (InitCVIRTE (0, argv, 0) == 0) /* Needed if linking in external compiler; harmless otherwise */ return -1; /* out of memory */ if ((hPanel = LoadPanel (0, "sample4_3.uir", PANEL)) < 0) return -1; /* Get default values from the UIR */ GetCtrlAttribute (hPanel, PANEL_CANVAS, ATTR_WIDTH, &nWidth); GetCtrlAttribute (hPanel, PANEL_CANVAS, ATTR_HEIGHT, &nHeight); //// GetCtrlVal (hPanel, PANEL_COLORNUM, &Pen_Color); SetCtrlAttribute (hPanel, PANEL_CANVAS, ATTR_PEN_COLOR, Pen_Color); GetCtrlVal (hPanel, PANEL_NUMERIC, &Tool_width); SetCtrlAttribute (hPanel, PANEL_CANVAS, ATTR_PEN_WIDTH, Tool_width); DisplayPanel (hPanel); RunUserInterface (); return 0;}//timer callback ,do drawing int CVICALLBACK TimerDraw (int panel, int control, int event, void *callbackData, int eventData1, int eventData2){ switch (event) { case EVENT_TIMER_TICK: GetRelativeMouseState (hPanel, PANEL_CANVAS, &nXPos, &nYPos, &nLeftDown, 0, 0); if (!nLeftDown) SetCtrlAttribute (hPanel, PANEL_TIMER1, ATTR_ENABLED, 0); else { if(pen==1||eraser==1) CanvasDrawLineTo (hPanel, PANEL_CANVAS, MakePoint(nXPos, nYPos)); } break; } return 0;}//canvas callback ,set draw tool and start point int CVICALLBACK Canvas (int panel, int control, int event, void *callbackData, int eventData1, int eventData2){ switch (event) { case EVENT_LEFT_CLICK: SetCtrlAttribute (hPanel, PANEL_TIMER1, ATTR_ENABLED, 1); GetRelativeMouseState (hPanel, PANEL_CANVAS, &nXPos, &nYPos, 0, 0, 0); if(pen==1) { SetCtrlAttribute (hPanel, PANEL_CANVAS, ATTR_PEN_COLOR, Pen_Color); SetCtrlAttribute (hPanel, PANEL_CANVAS, ATTR_PEN_WIDTH, Tool_width); CanvasSetPenPosition (hPanel, PANEL_CANVAS,MakePoint(nXPos, nYPos)); } if(eraser==1) { SetCtrlAttribute (hPanel, PANEL_CANVAS, ATTR_PEN_COLOR, 0xffffff); SetCtrlAttribute (hPanel, PANEL_CANVAS, ATTR_PEN_WIDTH, Tool_width+5); CanvasSetPenPosition (hPanel, PANEL_CANVAS,MakePoint(nXPos, nYPos)); } if(bucket==1) { SetCtrlAttribute (hPanel, PANEL_CANVAS, ATTR_PEN_FILL_COLOR, Pen_Color); CanvasDimRect (hPanel,PANEL_CANVAS ,MakeRect(0,0,nHeight,nWidth )); } break; } return 0;}//get colorint CVICALLBACK Color (int panel, int control, int event, void *callbackData, int eventData1, int eventData2){ switch (event) { case EVENT_COMMIT: GetCtrlVal (hPanel, PANEL_COLORNUM, &Pen_Color); SetCtrlAttribute (hPanel, PANEL_CANVAS, ATTR_PEN_COLOR, Pen_Color); break; } return 0;}// get Widthint CVICALLBACK width (int panel, int control, int event, void *callbackData, int eventData1, int eventData2){ switch (event) { case EVENT_COMMIT: GetCtrlVal (hPanel, PANEL_NUMERIC, &Tool_width); SetCtrlAttribute (hPanel, PANEL_CANVAS, ATTR_PEN_WIDTH, Tool_width); break; } return 0;}//exit proint CVICALLBACK Quit (int panel, int control, int event, void *callbackData, int eventData1, int eventData2){ switch (event) { case EVENT_COMMIT: QuitUserInterface (0); break; } return 0;}//toggle eraser buttonint CVICALLBACK Eraser (int panel, int control, int event, void *callbackData, int eventData1, int eventData2){ switch (event) { case EVENT_COMMIT: SetTools(&eraser,control); break; } return 0;}//toggle pen button int CVICALLBACK Pen (int panel, int control, int event, void *callbackData, int eventData1, int eventData2){ switch (event) { case EVENT_COMMIT: SetTools(&pen,control); break; } return 0;}//toggle bucket button int CVICALLBACK Bucket (int panel, int control, int event, void *callbackData, int eventData1, int eventData2){ switch (event) { case EVENT_COMMIT: SetTools(&bucket,control); break; } return 0;}//timer callback ,set cursor according to mouse position and tool styleint CVICALLBACK TimerCursor (int panel, int control, int event, void *callbackData, int eventData1, int eventData2){ int nX,nY; switch (event) { case EVENT_TIMER_TICK: GetRelativeMouseState (hPanel, PANEL_CANVAS, &nX, &nY, &nLeftDown, 0, 0); if (IsClickCtrl (panel, PANEL_CANVAS, nX, nY)) { if(pen==1) SetMouseCursor (VAL_POINTING_FINGER_CURSOR); if(eraser==1) SetMouseCursor (VAL_BOX_CURSOR); if(bucket==1) SetMouseCursor (VAL_HOUR_GLASS_CURSOR); } else SetMouseCursor (VAL_DEFAULT_CURSOR ); break; } return 0;}//toggle tool button funvoid SetTools(int *tool,int control){ SetCtrlVal (hPanel,control, 1); if(pen==1&&control!=PANEL_PEN){ SetCtrlVal (hPanel, PANEL_PEN, 0); pen=0; } if(eraser==1&&control!=PANEL_ERASER){ SetCtrlVal (hPanel, PANEL_ERASER, 0); eraser=0; } if(bucket==1&&control!=PANEL_BUCKET){ SetCtrlVal (hPanel, PANEL_BUCKET, 0); bucket=0; } *tool=1; }//determine whether the mouse is on controlint IsClickCtrl (int panel, int control, int x, int y){ int height, width; if ((x < 0) || (y < 0)) return 0; if (control == 0) { GetPanelAttribute (panel, ATTR_HEIGHT, &height); GetPanelAttribute (panel, ATTR_WIDTH, &width); } else { GetCtrlAttribute (panel, control, ATTR_HEIGHT, &height); GetCtrlAttribute (panel, control, ATTR_WIDTH, &width); } if ((y < height) && (x < width)) return 1; else return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -