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

📄 sample4.c

📁 机械工业出版社 Lab Windows/CVI逐步深入与开发实例源代码
💻 C
字号:
#include <analysis.h>
#include <ansi_c.h>
#include <cvirte.h>		
#include <userint.h>
#include "sample4.h"

static int panelHandle;


int main (int argc, char *argv[])
{
	if (InitCVIRTE (0, argv, 0) == 0)	
		return -1;	
		
	if ((panelHandle = LoadPanel (0, "sample4.uir", PANEL)) < 0)
		return -1;
		
	DisplayPanel (panelHandle);
	
	RunUserInterface ();
	return 0;
}

int CVICALLBACK PanelCallback (int panel, int event, void *callbackData,
		int eventData1, int eventData2)
{
	switch (event)
		{
		case EVENT_CLOSE:
		
			QuitUserInterface (0);
			
			break;
		}
	return 0;
}

int CVICALLBACK RunPopup (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
int i,k,status,filenumber,popuppanel;
char title[10],message[20],result[MAX_PATHNAME_LEN],**multifileresult,*multifilename;
double xarray[100],yarray[100];
int bold, underline,strikeout, italic, justification, textcolor,fontsize;

switch (event)
		{
		case EVENT_COMMIT:
		
		//得到POPUPTYPE、TITLE、MESSAGE控件中的值
		GetCtrlVal (panel, PANEL_POPUPTYPE, &i);
		GetCtrlVal (panel, PANEL_TITLE, title);
		GetCtrlVal (panel, PANEL_MESSAGE, message);
		
        //判断POPUPTYPE控件的值,运行不同的对话框
        switch (i)
	      	{
	      	
		    case 0:
                 //消息对话框
                 status=MessagePopup (title, message);
			     break;
			     
		    case 1:
                 //确认对话框
                 status=ConfirmPopup(title, message); 
			     break;
			     
		    case 2:
				 //提示对话框
				 status = PromptPopup (title, message, result, 250);
                 //将输入的字符串显示到文本框控件
			     ResetTextBox (panel, PANEL_RESULT, result);
			     break;
			     
		    case 3:
                 //通用消息框
				 status = GenericMessagePopup (title, message, "Enter", "Active",
											   "Escape", result, 200, 0,
											   VAL_GENERIC_POPUP_BTN1,
											   VAL_GENERIC_POPUP_BTN2,
											   VAL_GENERIC_POPUP_BTN3);
 			     //将输入的字符串显示到文本框控件
			     ResetTextBox (panel, PANEL_RESULT, result);
			     break;
			     
		    case 4:
				 //文件选择框,设置默认目录为D:\cvi,选择文件类型为txt文件
                 //或者doc文件,默认文件类型为txt文件,注意参数输入格式
				 status = FileSelectPopup ("d:\\cvi", "*.txt", "*.txt;*.doc", title, VAL_OK_BUTTON, 0, 0,
										   1, 0, result);
				 //如果终止文件选择,退出
				 if(status<=0)  break;
				 
			     //将得到的文件名显示到文本框控件
			     ResetTextBox (panel, PANEL_RESULT, result);
			     
			     break;
			     
		    case 5:
				 //多文件选择框
				 status = MultiFileSelectPopup ("", "*.*", "", title, 0, 0, 1,
												&filenumber, &multifileresult);
            
                 //得到的结果filenumber表示所选择文件数,
                 //multifileresult为指向filenumber个字符串的指针,
                 //由函数MultiFileSelectPopup自动分配内存
				 if(status<=0)  break;
				 
			     //处理字符串	
			     multifilename=(char*)malloc (sizeof(char)*MAX_PATHNAME_LEN*filenumber);
				 
				 strcpy (multifilename, "");
				 
				 for(k=0;k<filenumber;k++)
				 {
				    if(multifileresult[k]==NULL) break;
					strcat (multifilename, multifileresult[k]);
				    strcat (multifilename, "\n");
				 }
				 
			     //将所得到的结果处理后显示到文本框控件
			     ResetTextBox (panel, PANEL_RESULT, multifilename);
			     
                 //释放内存
                 free(multifilename);
                 free(multifileresult);
                 
			     break;
			     
		    case 6:
				 //路径选择框
				 status = DirSelectPopup ("", title, 1, 1, result);
				 if(status<=0)  break;
				 
			     //将路径显示到文本枯哪个控件
			     ResetTextBox (panel, PANEL_RESULT, result);
			     
			     break;
			     
		    case 7:
				 //生成一正弦信号,存放在xarray数组中
				 SinePattern (100, 1.0, 0.0, 3, xarray);
				 
				 //显示X轴向的图表对话框
				 status = XGraphPopup (title, xarray, 100, VAL_DOUBLE);
				 
			     break;
			     
		    case 8:
				 //生成一正弦信号,存放在yarray数组中
				 SinePattern (100, 1.0, 0.0, 3, yarray);
				 
			     //显示Y轴向的图表对话框
			     status = YGraphPopup (title, yarray, 100, VAL_DOUBLE);
			     
			     break;
			     
		    case 9:
				 //生成两个正弦信号,分别存放在xarray,yarray数组中
				 SinePattern (100, 1.0, 90, 2, xarray);
				 SinePattern (100, 1.0, 0.0, 3, yarray);
				 
			     // 显示XY双轴向的图表对话框
			     status = XYGraphPopup (title, xarray, yarray, 100, VAL_DOUBLE,
										  VAL_DOUBLE);
										  
			     break;
			     
		    case 10:
			     //显示生成一正弦信号,存放在yarray数组中 
			     SinePattern (100, 1.0, 0.0, 3, yarray);
				 
                 //波形图表对话框
                 status = WaveformGraphPopup (title, yarray, 100, VAL_DOUBLE, 1.0, 0.0,
											  0.0, 1.0);
											  
			     break;
			     
		    case 11:
           		 //给字体选择框设置初始值
                 bold=0;                      //粗体
				 underline=0;                 //下划线 
				 strikeout=0;                 //中划线  
				 italic=0;                    //斜体 
				 justification=0;             //对齐方式     
				 textcolor=0;                 //颜色  
				 fontsize=16;                 //大小
				 strcpy(result,"Impact");     //字体
	
				 //显示字体选择对话框 
				 status = FontSelectPopup (title, message, 0, result, &bold,
										   &underline, &strikeout, &italic,
										   &justification, &textcolor, &fontsize, 12,
										   48, 1, 1);
										   
                 //显示字体名称
                 ResetTextBox (panel, PANEL_RESULT, result);
 		        
 		         //显示返回值
                 SetCtrlVal (panel, PANEL_STATUS, status);
			     
			     break;
			     
		    case 12:
		    
				 //加载面板
				 popuppanel = LoadPanel (0, "sample4.uir", PANEL_2);
				 //安装对话框
				 InstallPopup (popuppanel);
				 
				 //获取系统对话框属性,并设置控件的属性
				 GetSystemPopupsAttribute (ATTR_MOVABLE, &i);
			     SetCtrlVal (popuppanel, PANEL_2_CHECKBOX, i);
			     
			     break;
            }
            
	       //显示返回值
	       SetCtrlVal (panel, PANEL_STATUS, status);
 		   
           break;
		}
	return 0;
}


int CVICALLBACK QuitCallback (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	
	int i;
	
	switch (event)
		{
		case EVENT_COMMIT:
		
			//判断发生事件的面板
			if(panel!=panelHandle)
			{
			   
			    //如果面板句柄不是主面板句柄,则为对话框发生事件
			    GetCtrlVal (panel, PANEL_2_CHECKBOX, &i);
			    SetSystemPopupsAttribute (ATTR_MOVABLE, i);
			    
			    //移除对话框
			    RemovePopup (0);
			}
			else
			{
			    QuitUserInterface (0);
			}
			break;
		}
	return 0;
}


int CVICALLBACK CopyText (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	
	char *text;
	int length;
	
	switch (event)
		{
		case EVENT_COMMIT:
		
			//得到TEXTTOCOPY控件中字符串的长度
			GetCtrlAttribute (panel, PANEL_TEXTTOCOPY, ATTR_STRING_TEXT_LENGTH,
							  &length);
            length = length + 1; 
            
            //分配内存
            text = (char *)malloc(length);
            
			if(text!=NULL)
			{
			   //获取TEXTTOCOPY控件的值
			   GetCtrlVal (panel, PANEL_TEXTTOCOPY, text);
			   
			   //向粘贴板拷贝文本格式数据
			   ClipboardPutText (text);
			   
			   free(text);
			}
			break;
		}
	return 0;
}

int CVICALLBACK CopyBitmap (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	
	int status,bitmap;
	
	switch (event)
		{
																		   GetPanelDisplayBitmap (panel, VAL_FULL_PANEL, VAL_ENTIRE_OBJECT,
																								  &bitmap);
		case EVENT_COMMIT:
		
			//获取控件的显示部分并转换成位图
			status = ConfirmPopup ("Confirm", "Include title?");
			
			//向粘贴板拷贝位图格式数据
			GetCtrlDisplayBitmap (panel, PANEL_TEXTTOCOPY, status, &bitmap);

			//删除位图 
			ClipboardPutBitmap (bitmap);
			
			break;
		}
	return 0;
}

int CVICALLBACK Paste (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	
	char *text;
	int i,bitmap;
	
	switch (event)
		{
		case EVENT_COMMIT:
		
			//以文本格式取出粘贴板的数据
			ClipboardGetText (&text, &i);
			
			if(i)
			    //如果数据是文本格式,就显示到PASTEDTEXT控件
			    ResetTextBox (panel, PANEL_PASTEDTEXT, text);
    
			//以位图格式取出粘贴板的数据
			ClipboardGetBitmap (&bitmap, &i);
			
			if(i)
			{
                //如果数据是位图格式,就显示到PASTEDBITMAP控件
                CanvasClear(panel, PANEL_PASTEDBITMAP, VAL_ENTIRE_OBJECT);
			    CanvasDrawBitmap (panel, PANEL_PASTEDBITMAP, bitmap,
							  VAL_ENTIRE_OBJECT, VAL_ENTIRE_OBJECT);
        
        	    //删除位图 
                DiscardBitmap(bitmap);  
			}

			break;
		}
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -