📄 sample3.c
字号:
#include <formatio.h>
#include <ansi_c.h>
#include <cvirte.h>
#include <userint.h>
#include <toolbox.h>
#include "sample3.h"
#ifndef FALSE
#define FALSE 0
#define TRUE !FALSE
#endif
static int ClickIsOnCtrl (int panel, int control, int x, int y);
void UpdateTextBox (char* event_gen);
static int panelHandle;
void UpdateTextBox (char* event_gen)
//参数event_gen为指向字符串的指针
{
char display_str[100];
// Fmt函数位于格式化和I/O函数库中,用来改变变量的形式
Fmt(display_str, "%s<%s\n", event_gen);
//显示所发生事件消息
SetCtrlVal (panelHandle, PANEL_TEXTBOX, display_str);
}
static int ClickIsOnCtrl (int panel, int control, int x, int y)
{
int height, width;
//如果X坐标或者Y坐标小于0,退出
if ((x < 0) || (y < 0))
return FALSE;
//如果control为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);
}
//检测X坐标和Y坐标是否分别小于面板或控件的宽度和高度
if ((y < height) && (x < width))
return TRUE;
else
return FALSE;
}
int main (int argc, char *argv[])
{
if (InitCVIRTE (0, argv, 0) == 0)
return -1;
if ((panelHandle = LoadPanel (0, "sample3.uir", PANEL)) < 0)
return -1;
//添加的代码,设置控件TEXTBOX可使用扩展鼠标事件
EnableExtendedMouseEvents (panelHandle, PANEL_TEXTBOX, 2);
DisplayPanel (panelHandle);
RunUserInterface ();
//添加的代码,结束使用扩展鼠标事件
DisableExtendedMouseEvents (panelHandle, PANEL_TEXTBOX);
return 0;
}
int CVICALLBACK TimerCallback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
int x, y, left, right, keys, panelX, panelY, ctrlX, ctrlY,iPanel;
char coords[15];
switch (event)
{
//定时器触发事件
case EVENT_TIMER_TICK:
//获取鼠标绝对坐标和按键状态
GetGlobalMouseState (&iPanel, &x, &y, &left, &right, &keys);
//显示鼠标按键状态
SetCtrlVal (panel, PANEL_LEFT, left);
SetCtrlVal (panel, PANEL_RIGHT, right);
//显示鼠标绝对坐标
sprintf (coords, "(%ld, %ld)", x, y);
SetCtrlVal (panel, PANEL_COORGLOBE, coords);
//显示键盘按键状态
SetCtrlVal (panel, PANEL_SHIFT, keys & VAL_SHIFT_MODIFIER);
SetCtrlVal (panel, PANEL_CTRL, keys & VAL_MENUKEY_MODIFIER);
//获取鼠标相对于面板的坐标
GetRelativeMouseState (panel, 0, &panelX, &panelY, NULL,
NULL, NULL);
//显示鼠标相对于面板的坐标
sprintf (coords, "(%ld, %ld)", panelX, panelY);
SetCtrlVal (panel, PANEL_COORPANEL, coords);
//获取鼠标相对于文本框控件的坐标
GetRelativeMouseState (panel, PANEL_TEXTBOX, &ctrlX, &ctrlY, NULL,
NULL, NULL);
//显示鼠标相对于文本框控件的坐标
sprintf (coords, "(%ld, %ld)", ctrlX, ctrlY);
SetCtrlVal (panel, PANEL_COORCTRL, coords);
//判断面板是否处于激活状态
if (GetActivePanel() == panel)
{
//判断鼠标是否处于面板上
if (ClickIsOnCtrl (panel, 0, panelX, panelY))
{
int i;
//判断鼠标位置是否在文本框控件上
i=ClickIsOnCtrl (panel, PANEL_TEXTBOX, ctrlX, ctrlY);
if (i)
//设置光标显示方式为十字形
SetMouseCursor (VAL_HIDDEN_CURSOR);
else
//设置光标显示方式为手指形
SetMouseCursor (VAL_POINTING_FINGER_CURSOR);
}
else
//设置光标显示方式为默认形
SetMouseCursor (VAL_DEFAULT_CURSOR);
}
else
//设置光标显示方式为默认形
SetMouseCursor (VAL_DEFAULT_CURSOR);
break;
}
return 0;
}
int CVICALLBACK SlideCallback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
double t;
//判断事件类型
switch (event)
{
//获取焦点事件
case EVENT_GOT_FOCUS :
UpdateTextBox("Got Focus Slide Control");
break;
//失去焦点事件
case EVENT_LOST_FOCUS :
UpdateTextBox("Lost Focus Slide Control");
break;
//控件值改变事件
case EVENT_VAL_CHANGED :
UpdateTextBox("Value Changed Slide Control");
break;
//点击事件
case EVENT_COMMIT :
UpdateTextBox("Control Committed Slide Control");
GetCtrlVal (panel, control, &t);
SetCtrlAttribute (panel, PANEL_TIMER, ATTR_INTERVAL, t);
break;
}
return 0;
}
int CVICALLBACK PanelCallback (int panel, int event, void *callbackData,
int eventData1, int eventData2)
{
int i,j;
char keypushed[100];
//判断事件类型
switch (event)
{
//鼠标左键单击事件
case EVENT_LEFT_CLICK :
UpdateTextBox("Left Click Panel ");
break;
//鼠标右键单击事件
case EVENT_RIGHT_CLICK :
UpdateTextBox("Right Click Panel ");
break;
//鼠标左键双击事件
case EVENT_LEFT_DOUBLE_CLICK :
UpdateTextBox("Left Double Click Panel ");
break;
//鼠标右键双击事件
case EVENT_RIGHT_DOUBLE_CLICK :
UpdateTextBox("Right Double Click Panel ");
break;
//键盘按键事件
case EVENT_KEYPRESS :
//参数 eventData1表示按键值及其状态,
//具体说明参见本章提高部分
if ((eventData1 & VAL_ASCII_KEY_MASK) != 0)
{
sprintf (keypushed, "Keypress detected %c was pressed \n",
eventData1);
SetCtrlVal (panel, PANEL_TEXTBOX, keypushed);
}
break;
//面板缩放事件
case EVENT_PANEL_SIZE :
UpdateTextBox("Panel Resize Panel");
break;
//面板移动事件
case EVENT_PANEL_MOVE :
UpdateTextBox("PanZel Moved Panel");
break;
//面板关闭事件
case EVENT_CLOSE :
UpdateTextBox("Panel Close Event Panel");
QuitUserInterface (0);
break;
}
return 0;
}
int CVICALLBACK ToggleCallback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
int i;
//判断事件类型
switch (event)
{
//控件被点击,包括鼠标左键单击和键盘回车输入
case EVENT_COMMIT:
//设置定时器Enable属性
GetCtrlVal(panel,control,&i);
SetCtrlAttribute (panel, PANEL_TIMER, ATTR_ENABLED, i);
UpdateTextBox("Control Commit ToggleButton");
break;
//控件值改变事件
case EVENT_VAL_CHANGED:
UpdateTextBox("Value Changed ToggleButton");
break;
//鼠标左键单击事件
case EVENT_LEFT_CLICK:
UpdateTextBox("Left Click ToggleButton");
break;
//鼠标左键双击事件
case EVENT_LEFT_DOUBLE_CLICK:
UpdateTextBox("Left Double Click ToggleButton");
break;
//鼠标右键单击事件
case EVENT_RIGHT_CLICK:
UpdateTextBox("Right Click ToggleButton");
break;
//鼠标右键双击事件
case EVENT_RIGHT_DOUBLE_CLICK:
UpdateTextBox("Right Double Click ToggleButton");
break;
//获得焦点事件
case EVENT_GOT_FOCUS:
UpdateTextBox("Got Focus ToggleButton");
break;
//失去焦点事件
case EVENT_LOST_FOCUS:
UpdateTextBox("Lost Focus ToggleButton");
break;
}
return 0;
}
int CVICALLBACK QuitCallback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
QuitUserInterface (0);
break;
}
return 0;
}
int CVICALLBACK TextBoxCallback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
//鼠标移动事件
case EVENT_MOUSE_MOVE:
UpdateTextBox("Mouse Move TextBox Control");
break;
//鼠标左键弹起
case EVENT_LEFT_MOUSE_UP:
UpdateTextBox("Left Mouse Up TextBox Control");
break;
//鼠标右键弹起
case EVENT_RIGHT_MOUSE_UP:
UpdateTextBox("Right Mouse Up TextBox Control");
break;
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -