📄 sample6.c
字号:
#include <cvirte.h>
#include <userint.h>
#include "sample6.h"
#include "menuutil.h"
// 定义REGISTRY_NAME为修改注册表目录名,
#define REGISTRY_NAME "Sample"
static int color=0,panelHandle;
//定义IniText、menuList类型变量,分别用来储存INI文本数据指针
//和菜单列表数据指针,两种变量类型声明包含在menuutil.h文件中
static IniText sIniTextHandle = 0;
static menuList sFileMenuListHandle = 0;
//自定义函数声明
static int GetOptionsForUIR(void);
static void CVICALLBACK FILEMenuListCallbackFunc (menuList list,
int menuIndex, int event, void *callbackData);
static int SaveOptionsForUIR(void) ;
int main (int argc, char *argv[])
{
if (InitCVIRTE (0, argv, 0) == 0)
return -1;
if ((panelHandle = LoadPanel (0, "sample6.uir", PANEL)) < 0)
return -1;
//调用GetOptionsForUIR函数,从注册表中读取文件列表并添加到菜单中
GetOptionsForUIR();
DisplayPanel (panelHandle);
RunUserInterface ();
//调用SaveOptionsForUIR函数,将文件列表储存到注册表中
SaveOptionsForUIR();
return 0;
}
int CVICALLBACK PanelCallback (int panel, int event, void *callbackData,
int eventData1, int eventData2)
{
int key;
switch (event)
{
case EVENT_CLOSE:
QuitUserInterface (0);
break;
//右键单击事件
case EVENT_RIGHT_CLICK:
//获取键盘按键状态
GetGlobalMouseState (NULL, NULL, NULL, NULL, NULL, &key);
if((VAL_MENUKEY_MODIFIER & key))
{
//设置菜单项CHECKED属性
SetMenuBarAttribute (GetPanelMenuBar(panel), MENU_STYLE_FRAMECOLOR,
ATTR_CHECKED, 1);
SetMenuBarAttribute (GetPanelMenuBar(panel), MENU_STYLE_TEXTCOLOR,
ATTR_CHECKED, 0);
}
else
{
//设置菜单项CHECKED属性
SetMenuBarAttribute (GetPanelMenuBar(panel), MENU_STYLE_FRAMECOLOR,
ATTR_CHECKED, 0);
SetMenuBarAttribute (GetPanelMenuBar(panel), MENU_STYLE_TEXTCOLOR,
ATTR_CHECKED, 1);
}
//调用RunPopupMenu函数显示快捷菜单
RunPopupMenu (GetPanelMenuBar(panel), MENU_COLOR, panel, eventData1,
eventData2, 0, 0, 0, 0);
break;
}
return 0;
}
void CVICALLBACK ColorSetting (int menuBar, int menuItem, void *callbackData,
int panel)
{
int i;
//设置各菜单项Checked属性为0
SetMenuBarAttribute (menuBar, MENU_COLOR_BLACK, ATTR_CHECKED, 0);
SetMenuBarAttribute (menuBar, MENU_COLOR_BLUE, ATTR_CHECKED, 0);
SetMenuBarAttribute (menuBar, MENU_COLOR_GREEN, ATTR_CHECKED, 0);
SetMenuBarAttribute (menuBar, MENU_COLOR_CYAN, ATTR_CHECKED, 0);
SetMenuBarAttribute (menuBar, MENU_COLOR_RED, ATTR_CHECKED, 0);
SetMenuBarAttribute (menuBar, MENU_COLOR_MAGENTA, ATTR_CHECKED, 0);
SetMenuBarAttribute (menuBar, MENU_COLOR_YELLOW, ATTR_CHECKED, 0);
SetMenuBarAttribute (menuBar, MENU_COLOR_WHITE, ATTR_CHECKED, 0);
//设置选中菜单项Checked属性为1
SetMenuBarAttribute (menuBar, menuItem, ATTR_CHECKED, 1);
//根据选中的菜单项给全局变量color赋值
switch (menuItem)
{
case MENU_COLOR_BLACK:
color=VAL_BLACK;
break;
case MENU_COLOR_BLUE:
color=VAL_BLUE;
break;
case MENU_COLOR_GREEN:
color=VAL_GREEN;
break;
case MENU_COLOR_CYAN:
color=VAL_CYAN;
break;
case MENU_COLOR_RED:
color=VAL_RED;
break;
case MENU_COLOR_MAGENTA:
color=VAL_MAGENTA;
break;
case MENU_COLOR_YELLOW:
color=VAL_YELLOW;
break;
case MENU_COLOR_WHITE:
color=VAL_WHITE;
break;
}
//设置COLORNUM控件值
SetCtrlVal (panelHandle, PANEL_COLORNUM, color);
//获取菜单项MENU_STYLE_FRAMECOLOR的CHECKED属性
GetMenuBarAttribute (menuBar, MENU_STYLE_FRAMECOLOR, ATTR_CHECKED, &i);
if(i)
//设置STRING控件边框颜色
SetCtrlAttribute (panelHandle, PANEL_STRING, ATTR_FRAME_COLOR, color);
else
//设置STRING控件字体颜色
SetCtrlAttribute (panelHandle, PANEL_STRING, ATTR_TEXT_COLOR, color);
}
void CVICALLBACK Shutdown (int menuBar, int menuItem, void *callbackData,
int panel)
{
PanelCallback ( panel, EVENT_CLOSE, 0, 0, 0);
}
void CVICALLBACK Content (int menuBar, int menuItem, void *callbackData,
int panel)
{
}
void CVICALLBACK About (int menuBar, int menuItem, void *callbackData,
int panel)
{
}
void CVICALLBACK LoadFile (int menuBar, int menuItem, void *callbackData,
int panel)
{
int status;
char filename[MAX_PATHNAME_LEN];
//打开文件选择框
status = FileSelectPopup ("", "*.*", "", "Open File", VAL_LOAD_BUTTON,
0, 0, 1, 0, filename);
if (status <=0) return;
//显示文件名
SetCtrlVal (panelHandle, PANEL_STRING, filename);
if ((sFileMenuListHandle) && (filename) && (filename[0] != '\0') )
{
//更新最新文件列表
// MU_AddItemToMenuList函数的四个参数分别表示文件列表句柄、
//新添文件位置、菜单项标题和回调数据
MU_AddItemToMenuList (sFileMenuListHandle, FRONT_OF_LIST,
MU_MakeShortFileName(NULL, filename, 32),
StrDup(filename));
}
return ;
}
void CVICALLBACK SaveFile (int menuBar, int menuItem, void *callbackData,
int panel)
{
int status;
char filename[MAX_PATHNAME_LEN];
char message[MAX_PATHNAME_LEN+30];
//打开文件选择框
status = FileSelectPopup ("", "*.*", "", "Save File",
VAL_SAVE_BUTTON, 0, 0, 1, 0, filename);
if (status <=0) return;
strcpy (message, "The saved file is");
strcat (message, filename) ;
strcat (message, ".") ;
//显示存盘文件名
MessagePopup ("Save File", message);
if ((sFileMenuListHandle) && (filename) && (filename[0] != '\0') )
{
//更新最新文件列表
MU_AddItemToMenuList (sFileMenuListHandle, FRONT_OF_LIST,
MU_MakeShortFileName(NULL, filename, 32),
StrDup(filename));
}
return ;
}
void CVICALLBACK NewFile (int menuBar, int menuItem, void *callbackData,
int panel)
{
}
static int GetOptionsForUIR(void)
{
int success = 1;
//如果sIniTextHandle为空指针,
//应用Ini_New函数创建一新INIFile句柄
if (!sIniTextHandle)
sIniTextHandle = Ini_New (0);
//判断sIniTextHandle是否还为空指针,为空指针则退出
if (sIniTextHandle)
{
//从注册表指定位置读取数据
MU_ReadRegistryInfo (sIniTextHandle, REGISTRY_NAME);
//如果sFileMenuListHandle为空指针,
//应用MU_CreateMenuList函数创建一新菜单列表
//MU_CreateMenuList函数的四个参数含义分别为,
//创建文件列表菜单的菜单栏句柄、位置、最大数目以及回调函数名;
if (!sFileMenuListHandle)
sFileMenuListHandle = MU_CreateMenuList (GetPanelMenuBar(panelHandle),
MENU_FILE,
MENU_FILE_ABOVEEXITLINE, 5,
FILEMenuListCallbackFunc);
//判断sIniTextHandle是否还为空指针,为空指针则退出
if (sFileMenuListHandle) {
//更新菜单列表属性:文件列表菜单项具有快捷键
MU_SetMenuListAttribute (sFileMenuListHandle, 0,
ATTR_MENULIST_APPEND_SHORTCUT, 1);
//更新菜单列表属性:文件列表菜单项中不包含重复项目
MU_SetMenuListAttribute (sFileMenuListHandle, 0,
ATTR_MENULIST_ALLOW_DUPLICATE_ITEMS, 0);
//从sIniTextHandle读取数据更新文件列表
MU_GetFileListFromIniFile (sFileMenuListHandle, sIniTextHandle,
"FILE MenuList", "Filename", 1);
}
}
else success = 0;
return success;
}
static int SaveOptionsForUIR(void)
{
int success = 1;
//判断sIniTextHandle是否还为空指针,为空指针则退出
if (sIniTextHandle)
{
//判断sFileMenuListHandle是否还为空指针
if (sFileMenuListHandle)
//从文件列表读取数据更新INI文本数据
MU_PutFileListInIniFile(sFileMenuListHandle, sIniTextHandle,
"FILE MenuList", "Filename", TRUE);
//删除sFileMenuListHandle文件列表
if (sFileMenuListHandle)
MU_DeleteMenuList(sFileMenuListHandle);
//存储INI文本数据至注册表
if (!MU_WriteRegistryInfo(sIniTextHandle, REGISTRY_NAME))
success = 0;
}
else success = 0;
//删除INI文件数据
if (sIniTextHandle)
Ini_Dispose (sIniTextHandle);
return success;
}
static void CVICALLBACK FILEMenuListCallbackFunc (menuList list,
int menuIndex, int event, void *callbackData)
{
//回调数据callbackData表示发生点击事件的文件列表项对应的文件名
char *fileName = (char *) callbackData;
//显示文件名
if (fileName)
SetCtrlVal (panelHandle, PANEL_STRING, fileName);
return;
};
void CVICALLBACK ColorStyle (int menuBar, int menuItem, void *callbackData,
int panel)
{
if(menuItem==MENU_STYLE_FRAMECOLOR)
{
SetMenuBarAttribute (menuBar, MENU_STYLE_FRAMECOLOR, ATTR_CHECKED, 1);
SetMenuBarAttribute (menuBar, MENU_STYLE_TEXTCOLOR, ATTR_CHECKED, 0);
}
if(menuItem==MENU_STYLE_TEXTCOLOR)
{
SetMenuBarAttribute (menuBar, MENU_STYLE_FRAMECOLOR, ATTR_CHECKED, 0);
SetMenuBarAttribute (menuBar, MENU_STYLE_TEXTCOLOR, ATTR_CHECKED, 1);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -