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

📄 sample6.c

📁 机械工业出版社 Lab Windows/CVI逐步深入与开发实例源代码
💻 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 + -