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

📄 sample4_3.c

📁 经典LabWindows CVI方面的教材《LabWindows CVI开发入门和进阶》一书例题1-4章中的源码
💻 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 + -