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

📄 notepad.c

📁 基于东南大学开发的SEP3203的ARM7中的所有驱动
💻 C
📖 第 1 页 / 共 4 页
字号:
#include <stdio.h>
#include <string.h> 

#include <asixwin.h>
#include <asixapp.h>
#include <asixwin\asix_ed.h>
#include <asixwin\asix_mn.h>
#include <asixwin\asix_tb.h>
#include <asixwin\select.h>
#include "notepad.h"
#include "..\sms\sms.h"

#include <database\ntpaddb.h>
#include <resource\bitmap.h>
#include <resource\sysicon.h>

//注册表
TASKDESCRIPTION NOTETskDesp = 
{"NOTEPAD",		ASIX_APP,	0,	jishi,		4096,	1,	LCD_WIDTH,	LCD_HEIGHT,	BrowseNotepad,		APP_PRI};

//记事本浏览模块
void BrowseNotepad(void)
{
	U32		hGC;

	//定义窗口和控件的ID
	U32		mainwin;						//主窗口
	U32		newone;							//新建	按钮
	U32		del;							//删除	按钮
	U32		search;							//查找	按钮
	U32		order;							//排序,菜单
	U32		rename;							//重命名	按钮
	U32		up;								//向上一级	按钮
	U32		back;							//目录(文件)列表的的外框	静态文本框
	U32		note[NOTE_DISP_MAX];			//目录(文件)列表	按钮
	U32		property[NOTE_DISP_MAX];		//属性按钮
	U32		scroll;							//垂直滚动条
	U32		path;							//路径显示栏	静态框
	U32		dirnumtip;						//目录个数的图标
	U32		filenumtip;						//目录个数的显示
	U32		dirnumdisp;						//文件个数的图标
	U32		filenumdisp; 					//文件个数的显示
	U32		tskbar;							//底部任务栏

	//定义函数用变量
	MSG		msg; 
	S16		quit = 0; 
	S16		dragflag = 0; 					//拖动标志
	S16		i = 0, j = 0; 
	S16		noworder;						//当前的排序方式
	S16		allnum;							//目录和文件的总个数
	S16		dirnum;							//目录的个数
	S16		filenum;						//文件的个数
	S16		row = 1; 							//滚动块的位置
	char	currentdir[NAME_SIZE + 1]; 					//当前目录名
	char	currentid[LEVEL_NUM + 1], currentid2[LEVEL_NUM + 1];						//当前的目录id(绝对路径)
	S16		offset = -1; 					//offset是被选中的目录/文件与当前目录下的首个目录/文件偏移量,-1表示没有选中目录/文件
	S16		length = NOTE_DISP_MAX;			//滚动条长度,默认为一屏显示的目录/文件个数
	PROPERTY		*nowlist[MAX_ITEM_NUM]; 
//	PROPERTY		*tempitem; 
	LOCALSEARCHLIST		*searchlist, *searchlist2, *templist; 
	DBLACB		*lacb; 
	char		dirtemp[2]; 
	char		filetemp[2]; 
	S16			searchflag = 0; 
//	U8			searchtype = 0xff; 

	//初始化
	struct MENU_ITEM menuitem[]	=
	{
		1, 1, "按时间",
		1, 1, "按名称",
		0, 0, NULL,
	}; 

//	tempitem = (PROPERTY *)Lmalloc(sizeof(PROPERTY)); 
//	memset(tempitem, 0x00, sizeof(PROPERTY)); 
//	searchlist2 = NULL;
	memset(currentdir, 0x00, NAME_SIZE + 1); 
	memset(currentid, 0x00, (LEVEL_NUM + 1)*sizeof(char));	//默认当前目录为根目录
	memset(currentid2, 0x00, (LEVEL_NUM + 1)*sizeof(char)); 

	strcpy(currentdir, "\\"); 

	//连接数据库并读入数据
//	CreateDataBase(); 
	lacb = LinkDataBase(NOTEPAD_DATA_BASE); 
	searchlist = LocalSortRecord(lacb, NOTEPAD_NAME_FIELD, currentid, PRECISE_PART_MATCH); 
	noworder = NAME_ORDER; 
	allnum = searchlist->num; 
	GetNoteList(nowlist, allnum, searchlist); 

	if(allnum > NOTE_DISP_MAX)
	{
		length = allnum; 
	}

	for(i = 0; i < allnum; i++)
	{
		if(*(nowlist[i]->id) == 0)			//当项目类型为文件时,跳出
			break; 
	}
	dirnum = i;					//得出目录的个数
	filenum = allnum - dirnum;			//剩下的是文件个数

	//创建窗口和控件
	mainwin = CreateWindow(WNDCLASS_WIN, "NOTEPAD", WS_OVERLAPPEDWINDOW, 0, 0, PHY_LCD_W, PHY_LCD_H, 0, 0, NULL); 
	newone = CreateWindow(WNDCLASS_BUTTON, "\\新建", WS_CHILD|BS_REGULAR, (LCD_WIDTH - 150)/2, 23, BUTTON_W, BUTTON_W, mainwin, 0x00140014, (char *)zi_new); 
	del = CreateWindow(WNDCLASS_BUTTON, "\\删除", WS_CHILD|BS_REGULAR, (LCD_WIDTH - 150)/2 + 25, 23, BUTTON_W, BUTTON_W, mainwin, 0x00140014, (char *)zi_cancel); 
	search = CreateWindow(WNDCLASS_MENU, (char *)zi_find, WS_CHILD|MNS_ICON, (LCD_WIDTH - 150)/2 + 50, 23, BUTTON_W, BUTTON_W, mainwin, 0, menuitem);	
	order = CreateWindow(WNDCLASS_MENU, (char *)zi_paixu, WS_CHILD|MNS_ICON, (LCD_WIDTH - 150)/2 + 75, 23, BUTTON_W, BUTTON_W, mainwin, 0, menuitem); 
	rename = CreateWindow(WNDCLASS_BUTTON, "\\重命名", WS_CHILD|BS_REGULAR, (LCD_WIDTH - 150)/2 + 100, 23, BUTTON_W, BUTTON_W,	mainwin, 0x00140014, (char *)zi_rename); 
	up = CreateWindow(WNDCLASS_BUTTON, "\\返回上级目录", WS_CHILD|BS_REGULAR, (LCD_WIDTH - 150)/2 + 125, 23, BUTTON_W, BUTTON_W, mainwin, 0x00140014, (char *)zi_back); 
	back = CreateWindow(WNDCLASS_STATIC, "", WS_CHILD|SS_BOARD, (LCD_WIDTH - 150)/2, 46, 130, 152, mainwin, 0, NULL); 
	scroll = CreateWindow(WNDCLASS_SCROLL, "", WS_CHILD|SBS_VERT, (LCD_WIDTH - 150)/2 + 131, 46, 20 , 152, mainwin, MAKELONG(1, length - NOTE_DISP_MAX + 1), NULL); 

	tskbar = CreateWindow(WNDCLASS_TSKBAR, NULL, WS_CHILD|TBS_TYPICAL, 0, 0, 0, 0,mainwin, 0, NULL);

	//底部显示
	path = CreateWindow(WNDCLASS_STATIC, currentdir, WS_CHILD|SS_TEXT|SS_LEFT, (LCD_WIDTH-150)/2, 200, 75, 20, mainwin, 0, NULL); 
	dirnumtip = CreateWindow(WNDCLASS_STATIC, NULL, WS_CHILD|SS_ICON, 70 + (LCD_WIDTH-150)/2, 200, BUTTON_W, BUTTON_W, mainwin, 0x00140014, (char *)zi_mulushuxing); 
	sprintf(dirtemp, "%u", dirnum); 
	dirnumdisp = CreateWindow(WNDCLASS_STATIC, dirtemp, WS_CHILD|SS_TEXT, 90 + (LCD_WIDTH-150)/2, 200, 16, BUTTON_W, mainwin, 0, NULL); 		
	filenumtip = CreateWindow(WNDCLASS_STATIC, NULL, WS_CHILD|SS_ICON, 110 + (LCD_WIDTH-150)/2, 200, BUTTON_W, BUTTON_W, mainwin, 0x00140014, (char *)zi_wenjianshuxing); 
	sprintf(filetemp, "%u", filenum); 
	filenumdisp = CreateWindow(WNDCLASS_STATIC, filetemp, WS_CHILD|SS_TEXT, 130 + (LCD_WIDTH-150)/2, 200, 16, BUTTON_W, mainwin, 0, NULL); 
	
	for(i = 0; i < NOTE_DISP_MAX; i++)				//显示目录/文件列表
	{		
		if(i < allnum)
		{
			if(*(nowlist[i]->id) == 0)
				property[i] = CreateWindow(WNDCLASS_BUTTON, "\\属性", WS_CHILD|BS_ICON, (LCD_WIDTH-150)/2, (U16)(48 + i*(BUTTON_W + 1)), BUTTON_W, BUTTON_W, mainwin, 0x00140014, (char *)zi_wenjianshuxing);			//属性按钮
			else
				property[i] = CreateWindow(WNDCLASS_BUTTON, "\\属性", WS_CHILD|BS_ICON, (LCD_WIDTH-150)/2, (U16)(48 + i*(BUTTON_W + 1)), BUTTON_W, BUTTON_W, mainwin, 0x00140014, (char *)zi_mulushuxing);			//属性按钮
			note[i] = CreateWindow(WNDCLASS_BUTTON, nowlist[i]->name, WS_CHILD|BS_REGULAR, (LCD_WIDTH-150)/2 + 20, (U16)(48 + i*(BUTTON_W + 1)), 110, BUTTON_W, mainwin, 0, NULL);		//目录列表
		}
		else
		{
			property[i] = CreateWindow(WNDCLASS_BUTTON, "\\属性", WS_CHILD|BS_ICON, 2, (U16)(48 + i*(BUTTON_W + 1)), BUTTON_W, BUTTON_W, mainwin, 0, NULL);		//显示空按钮
			note[i] = CreateWindow(WNDCLASS_BUTTON, "", WS_CHILD|BS_REGULAR, 23, (U16)(48 + i*(BUTTON_W + 1)), 116, BUTTON_W, mainwin, 0, NULL);			//显示空按钮
		}
	}

	hGC = GetGC();

	//程序开始
	while(!quit)
	{
		ASIXGetMessage(&msg, NULL, 0, 0); 
		switch(msg.message)
		{
			case WM_COMMAND:
				if(msg.lparam == newone)	//点击新建按钮
				{
					if(CreateNote(currentid))				//新建成功则刷新界面
					{
						if(offset != -1)
						{
							if(((offset - row + 1) >= 0) && ((offset - row + 1) < NOTE_DISP_MAX))
							{
								RepaintWindow(note[offset - row + 1], BS_INVERT);		//把刚才的目录/文件恢复
							}
						}
						
						DelOldSearchList(searchlist); 
						searchlist = LocalSortRecord(lacb, (U8)noworder, currentid, PRECISE_PART_MATCH);		//重新读入列表
						for(i = 0; i < allnum; i++)
						{
							Lfree(nowlist[i]); 
						}
						allnum = searchlist->num; 

						length = NOTE_DISP_MAX;				//得出滚动条的长度
						if(allnum > NOTE_DISP_MAX)
						{
							length = allnum; 
						}

						GetNoteList(nowlist, allnum, searchlist);		//解析数据
						for(i = 0; i < allnum; i++)
						{
							if(*(nowlist[i]->id) == 0)			//当项目类型为文件时,跳出
								break; 
						}
						dirnum = i;							//得出目录的个数
						filenum = allnum - dirnum;			//剩下的时文件个数
						
						//更改目录和文件的个数
						sprintf(dirtemp, "%u", dirnum); 
						SetWindowText(dirnumdisp, dirtemp, NULL); 
						sprintf(filetemp, "%u", filenum); 
						SetWindowText(filenumdisp, filetemp, NULL); 

						GroupOn( hGC );
						//刷新列表
						for(i = 0; i < NOTE_DISP_MAX; i++)
						{		
							if(i < allnum)						//列表没有结束时
							{
								if(*(nowlist[i]->id) == 0)			//是文件类型
									SetWindowText(property[i], NULL, (char *)zi_wenjianshuxing); 
								else							//是目录类型
									SetWindowText(property[i], NULL, (char *)zi_mulushuxing);		//属性按钮
								SetWindowText(note[i], nowlist[i]->name, NULL);		//目录文件名称
							}
							else								//列表结束时,显示空按钮
							{
								SetWindowText(property[i], NULL, NULL);		//显示空属性和按钮
								SetWindowText(note[i], NULL, NULL); 
							}
						}
						GroupOff( hGC, 0, 46, 159, 197 );

						//恢复状态参数
						SetScrollRange(scroll, 1, (U16)(length - NOTE_DISP_MAX + 1));		//重新设置滚动条长度,并定位到最顶端
						SetScrollPos(scroll, 1, 0, 0); 
						row = 1; 
					}
					offset = -1; 
				}
				else
				if(msg.lparam == del)		//点击删除按钮
				{
					if(offset == -1)
						MessageBox(mainwin, "请选择要删除的目录/文件!", "提醒", MB_ICONEXCLAMATION|MB_OK); 
					else
					{
						//删除操作
						if(MessageBox(mainwin, "确定要删除该目录/文件!!!", "提醒", MB_ICONEXCLAMATION|MB_OKCANCEL) == IDOK)
						{
							if(((offset - row + 1) >= 0) && ((offset - row + 1) < NOTE_DISP_MAX))
							{
								RepaintWindow(note[offset - row + 1], BS_INVERT);		//把刚才的目录/文件恢复
							}
							if(*(nowlist[offset]->id) == 0)			//要删除的是文件时
							{
								LocalDelRecord( lacb, nowlist[offset]->index );		//从数据库中删除
							}
							else				//要删除的是目录时
							{
								strcpy(currentid2, nowlist[offset]->parent); 
								strcat(currentid2, nowlist[offset]->id); 
								searchlist2 = LocalFindRecord(lacb, NOTEPAD_PARENT_FIELD, currentid2, 0); 
								if(searchlist2->num != 0)
								{
									if(MessageBox(mainwin, "当前目录下还有文件,确定要删除吗!", "提醒", MB_ICONEXCLAMATION|MB_OKCANCEL) == IDOK)
									{
										for(i = 0; i < searchlist2->num; i++)
										{
											LocalDelRecord( lacb, searchlist2->head[i].index );		//从数据库中删除
										}
										LocalDelRecord( lacb, nowlist[offset]->index ); 
									} 
								}
								else
									LocalDelRecord( lacb, nowlist[offset]->index ); 
								DelOldSearchList(searchlist2); 
								searchlist2 = NULL; 
							}

							//刷新列表
							DelOldSearchList(searchlist); 
							searchlist = LocalSortRecord(lacb, (U8)noworder, currentid, PRECISE_PART_MATCH);		//重新读入列表
							for(i = 0; i < allnum; i++)
							{
								Lfree(nowlist[i]); 
							}
							allnum = searchlist->num; 
							GetNoteList(nowlist, allnum, searchlist);		//解析数据
						
							length = NOTE_DISP_MAX;				//得出滚动条的长度
							if(allnum > NOTE_DISP_MAX)
							{
								length = allnum; 
							}

							for(i = 0; i < allnum; i++)
							{
								if(*(nowlist[i]->id) == 0)			//当项目类型为文件时,跳出
										break; 
							}
							dirnum = i;							//得出目录的个数
							filenum = allnum - dirnum;			//剩下的时文件个数
							
							//更改目录和文件的个数
							sprintf(dirtemp, "%u", dirnum); 
							SetWindowText(dirnumdisp, dirtemp, NULL); 
							sprintf(filetemp, "%u", filenum); 
							SetWindowText(filenumdisp, filetemp, NULL); 

							GroupOn( hGC );
							//刷新列表
							for(i = 0; i < NOTE_DISP_MAX; i++)
							{		
								if(i < allnum)						//列表没有结束时
								{
									if(*(nowlist[i]->id) == 0)			//是文件类型
										SetWindowText(property[i], NULL, (char *)zi_wenjianshuxing); 
									else							//是目录类型
										SetWindowText(property[i], NULL, (char *)zi_mulushuxing);		//属性按钮
									SetWindowText(note[i], nowlist[i]->name, NULL);		//目录文件名称
								}
								else								//列表结束时,显示空按钮
								{
									SetWindowText(property[i], NULL, NULL);		//显示空属性和按钮
									SetWindowText(note[i], NULL, NULL); 
								}
							}
							GroupOff( hGC, 0, 46, 159, 197 );

							//恢复状态参数
							SetScrollRange(scroll, 1, (U16)(length - NOTE_DISP_MAX + 1));		//重新设置滚动条长度,并定位到最顶端
							SetScrollPos(scroll, 1, 0, 0); 
							row = 1; 
						}
					}
					offset = -1; 
				}
				else
				if(msg.lparam == search)	//点击查找菜单
				{
					switch(msg.wparam)
					{
						case 0:				//按时间查找
							templist = SearchTime(); 
							if(templist == NULL)			//没有查找
							{
								break; 
							}
							if(templist->num != 0)		//查找结果为空
							{
								if(searchflag == 1)
								{
									DelOldSearchList(searchlist2); 
									searchlist2 = NULL; 
								}
								else
								{
									DelOldSearchList(searchlist); 
									searchlist = NULL; 
								}
								searchlist2 = templist; 
								templist = NULL; 
								if(offset != -1)
								{
									if(((offset - row + 1) >= 0) && ((offset - row + 1) < NOTE_DISP_MAX))
									{
										RepaintWindow(note[offset - row + 1], BS_INVERT);		//把刚才的目录/文件恢复
									}
								}
								offset = -1; 

								for(i = 0; i < allnum; i++)
								{
									Lfree(nowlist[i]); 
								}
								allnum = searchlist2->num; 
								GetNoteList(nowlist, allnum, searchlist2);		//解析数据
							
								length = NOTE_DISP_MAX;				//得出滚动条的长度
								if(allnum > NOTE_DISP_MAX)
								{
									length = allnum; 
								}

								for(i = 0; i < allnum; i++)
								{
									if(*(nowlist[i]->id) == 0)			//当项目类型为文件时,跳出
										break; 
								}
								dirnum = i;							//得出目录的个数
								filenum = allnum - dirnum;			//剩下的时文件个数
								
								//更改目录和文件的个数
								sprintf(dirtemp, "%u", dirnum); 
								SetWindowText(dirnumdisp, dirtemp, NULL); 
								sprintf(filetemp, "%u", filenum); 
								SetWindowText(filenumdisp, filetemp, NULL); 
								SetWindowText(path, "", NULL); 

								GroupOn( hGC );
								//刷新列表
								for(i = 0; i < NOTE_DISP_MAX; i++)
								{		
									if(i < allnum)						//列表没有结束时
									{
										if(*(nowlist[i]->id) == 0)			//是文件类型
											SetWindowText(property[i], NULL, (char *)zi_wenjianshuxing); 
										else							//是目录类型
											SetWindowText(property[i], NULL, (char *)zi_mulushuxing);		//属性按钮
										SetWindowText(note[i], nowlist[i]->name, NULL);		//目录文件名称
									}
									else								//列表结束时,显示空按钮
									{
										SetWindowText(property[i], NULL, NULL);		//显示空属性和按钮
										SetWindowText(note[i], NULL, NULL); 
									}
								}
								GroupOff( hGC, 0, 46, 159, 197 );

								//恢复状态参数
								SetScrollRange(scroll, 1, (U16)(length - NOTE_DISP_MAX + 1));		//重新设置滚动条长度,并定位到最顶端
								SetScrollPos(scroll, 1, 0, 0); 
								row = 1; 

								//查找后的处理
								EnableWindow(newone, FALSE); 
								searchflag = 1; 
								noworder = TIME_ORDER; 							
							}
							else
							{
								Lfree(templist); 
								MessageBox(mainwin, "没有符合要求的目录/文件!", "提醒", MB_ICONEXCLAMATION|MB_OK); 
							}

⌨️ 快捷键说明

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