📄 notepad.c
字号:
searchlist2 = NULL;
searchflag = 0;
}
}
}
else //点击的不是已选目录/文件
{
if(((offset - row + 1) >= 0) && ((offset - row + 1) < NOTE_DISP_MAX))
{
RepaintWindow(note[offset - row + 1], BS_INVERT); //把刚才的目录/文件恢复
}
RepaintWindow(note[i], BS_INVERT); //设定现在点击的目录/文件为选定目录/文件,并设定为反色显示
offset = i + row - 1;
}
}
else
if(msg.lparam == property[i]) //点击属性按钮
{
PropertyDisp(nowlist[i + row - 1]);
// offset = -1;
}
}
}
}
break;
case WM_VSCROLL:
if(msg.lparam == scroll)
{
switch(msg.wparam)
{
case SB_PAGEUP:
row -= NOTE_DISP_MAX;
if (row < 1) row = 1;
break;
case SB_PAGEDOWN:
row += NOTE_DISP_MAX;
if (row > (length - NOTE_DISP_MAX + 1)) row = (length - NOTE_DISP_MAX + 1);
break;
case SB_LINEUP:
row -= 1;
if (row < 1) row = 1;
break;
case SB_LINEDOWN:
row += 1;
if (row > (length - NOTE_DISP_MAX + 1)) row = (length - NOTE_DISP_MAX + 1);
break;
case SB_THUMBTRACK:
dragflag = 1;
break;
case SB_ENDSCROLL:
row = GetScrollPos(scroll,0,0,0);
dragflag = 0;
break;
}
if(!dragflag)
{
SetScrollPos(scroll,row,0,0); // 滚动条拖动定位
GroupOn( hGC );
//显示的更新
for(i = 0; i < NOTE_DISP_MAX; i++)
{
if((i + row - 1) < allnum) //列表没有结束时
{
if(*(nowlist[i + row - 1]->id) == 0) //是文件类型
SetWindowText(property[i], NULL, (char *)zi_wenjianshuxing);
else //是目录类型
SetWindowText(property[i], NULL, (char *)zi_mulushuxing); //属性按钮
SetWindowText(note[i], nowlist[i + row - 1]->name, NULL); //目录文件名称
}
else //列表结束时,显示空按钮
{
SetWindowText(property[i], NULL, NULL); //显示空属性和按钮
SetWindowText(note[i], "", NULL);
}
}
GroupOff( hGC, 0, 46, 159, 197 );
if((offset >= (row - 1)) && (offset <= (row - 1 + NOTE_DISP_MAX)))
{
RepaintWindow(note[offset - row + 1], BS_INVERT);
}
}
}
break;
case WM_QUIT:
if(MessageBox(mainwin, "确定要退出吗?", "提醒", MB_ICONEXCLAMATION|MB_OKCANCEL) == IDOK) //询问是否退出;
quit = 1;
break;
}
DefWindowProc(msg.message, msg.lparam, msg.data, msg.wparam);
}
// Lfree(tempitem);
for(i = 0; i < allnum; i++)
{
Lfree(nowlist[i]);
}
if(searchflag == 1)
DelOldSearchList(searchlist2);
else
DelOldSearchList(searchlist);
DetachDataBase(lacb);
DestroyWindow( mainwin );
EndofTask();
return;
}
//新建模块
STATUS CreateNote(char *currentid)
{
//定义窗口和控件ID
U32 mainwin; //主窗口
U32 type; //新建类型选择 选择框
U32 name; //目录(文件)名称 编辑栏
U32 tip; //静态框
U32 ok; //确定 按钮
U32 cancel; //取消 按钮
U32 keyboard; //软键盘
U32 tskbar; //底部任务栏
//定义函数变量
MSG msg;
S16 quit = 0;
U16 i, j;
U16 flag = 0;
S16 allnum;
S16 newtype = 0; //新建类型
char temp[NAME_SIZE + 1]; //新建的目录(文件)的名称
PROPERTY *nowlist[MAX_ITEM_NUM];
PROPERTY newitem;
LOCALSEARCHLIST *searchlist;
DBLACB *lacb;
char id[2];
// FILE_S *fp;
//初始化
SL_ITEM item[] =
{
SL_UNCHECKED, "目录",
SL_UNCHECKED, "文件",
0, NULL,
};
memset(temp, 0x00, (NAME_SIZE + 1));
memset(id, 0x00, 2);
newitem.id = id;
lacb = LinkDataBase(NOTEPAD_DATA_BASE);
searchlist = LocalSortRecord(lacb, NOTEPAD_NAME_FIELD, currentid, PRECISE_PART_MATCH);
allnum = searchlist->num;
GetNoteList(nowlist, allnum, searchlist);
// strcpy(newpath, currentdir);
//创建窗口控件
mainwin = CreateWindow(WNDCLASS_WIN, "新建", WS_OVERLAPPEDWINDOW, 0, 0, PHY_LCD_W, PHY_LCD_H, 0, 0, NULL);
type = CreateWindow(WNDCLASS_SELECT, "类型选择", WS_CHILD|SLS_ENABLE|SLS_FRAME|SLS_RADIOBOX, (LCD_WIDTH-100)/2, 23, 100, 50, mainwin, 0, item);
tip = CreateWindow(WNDCLASS_STATIC, "目录/文件名", WS_CHILD|SS_TEXT, (LCD_WIDTH-150)/2, 73, 150, 17, mainwin, 0, NULL);
name = CreateWindow(WNDCLASS_EDITOR, "", WS_CHILD|ES_SINGLE_REGULAR, (LCD_WIDTH-150)/2, 90, 150, 20, mainwin, NAME_SIZE + 1, NULL);
ok = CreateWindow(WNDCLASS_BUTTON, "确定", WS_CHILD|BS_REGULAR, 20 + (LCD_WIDTH-145)/2, 111, 40, 20, mainwin, 0, NULL);
cancel = CreateWindow(WNDCLASS_BUTTON, "取消", WS_CHILD|BS_REGULAR, 100 + (LCD_WIDTH-145)/2, 111, 40, 20, mainwin, 0, NULL);
keyboard = CreateWindow(WNDCLASS_KEYBD, "", WS_CHILD|KBS_HANDWRITE|0xff, 1 + (LCD_WIDTH-145)/2, 144, 157, 70, mainwin, 0, NULL);
tskbar = CreateWindow(WNDCLASS_TSKBAR, NULL, WS_CHILD|TBS_TYPICAL, 0, 0, 0, 0,mainwin, 0, NULL);
SetFocus(name);
//程序开始
while(!quit)
{
ASIXGetMessage(&msg, NULL, 0, 0);
switch(msg.message)
{
case WM_COMMAND:
if(msg.lparam == ok)
{
if(newtype == DIR_TYPE)
{
//建立目录
GetEditorStr(name, temp, NAME_SIZE);
if(strlen(temp) == 0)
{
MessageBox(mainwin, "请输入目录名", "提醒", MB_ICONEXCLAMATION|MB_OK);
}
else
{
if(strlen(currentid) >= 2)
{
MessageBox(mainwin, "不能创建三级以上的目录!", "提醒", MB_ICONEXCLAMATION|MB_OK);
}
else
{
newitem.index = 0;
newitem.content = NULL;
newitem.size = NULL;
newitem.parent = currentid;
newitem.name = temp;
*(newitem.id) = 0;
for(i = 1; i < 255; i++)
{
flag = 0;
for(j = 0; j < allnum; j++)
{
if(*(nowlist[j]->id) == i)
{
flag = 1;
break;
}
}
if(flag != 1)
{
*(newitem.id) = (char)i;
break;
}
}
if(*(newitem.id) == 0)
{
MessageBox(mainwin, "当前目录下的目录已满,不能再创建目录了!", "提醒", MB_ICONEXCLAMATION|MB_OK);
}
else
{
AddDirFile(&newitem);
}
quit = 1; //退出
}
}
}
else
if(newtype == TEXT_TYPE)
{
//建立文件
GetEditorStr(name, temp, NAME_SIZE);
if(strlen(temp) == 0)
{
MessageBox(mainwin, "请输入文件名", "提醒", MB_ICONEXCLAMATION|MB_OK);
}
else
{
newitem.index = 0;
newitem.parent = currentid;
newitem.name = temp;
*(newitem.id) = 0;
CreateFile(&newitem);
quit = 1;
}
}
else
MessageBox(mainwin, "请选择新建类型!", "提醒", MB_ICONEXCLAMATION|MB_OK);
}
else
if(msg.lparam == cancel)
{
goto ERR;
}
break;
case WM_SELECTBOX:
if(msg.lparam == type)
{
if(item[0].state == SL_CHECKED)
{
if(newtype != DIR_TYPE)
newtype = DIR_TYPE;
}
else
if(item[1].state == SL_CHECKED)
{
if(newtype != TEXT_TYPE)
newtype = TEXT_TYPE;
}
else
newtype = 0;
}
break;
case WM_QUIT:
quit = 1;
break;
}
DefWindowProc(msg.message, msg.lparam, msg.data, msg.wparam);
}
for(i=0; i<allnum; i++)
{
Lfree(nowlist[i]);
}
DelOldSearchList(searchlist);
DetachDataBase(lacb);
DestroyWindow( mainwin );
return CREATE_OK;
ERR:
for(i=0; i<allnum; i++)
{
Lfree(nowlist[i]);
}
DelOldSearchList(searchlist);
DetachDataBase(lacb);
DestroyWindow( mainwin );
return CREATE_FAIL;
}
//建立文件函数
STATUS CreateFile(PROPERTY *newitem)
{
//定义窗口和控件ID
U32 mainwin; //主窗口
U32 save; //保存按钮
U32 sendsms; //发送短信按钮
U32 infrared; //红外发送按钮
U32 textedit; //文件内容编辑栏
U32 keyboard; //软键盘
U32 tskbar; //底部任务栏
//定义函数用变量
MSG msg;
S16 quit = 0;
char newcontent[TEXT_SIZE + 1];
U8 saveflag = 0;
char size[6];
memset(newcontent, 0x00, (TEXT_SIZE + 1));
memset(size, 0x00, 6);
//创建窗口
mainwin = CreateWindow(WNDCLASS_WIN, "创建文件", WS_OVERLAPPEDWINDOW, 0, 0, PHY_LCD_W, PHY_LCD_H, 0, 0, NULL);
save = CreateWindow(WNDCLASS_BUTTON, "\\保存", WS_CHILD|BS_REGULAR, (LCD_WIDTH - 70)/2, 23, BUTTON_W, BUTTON_W, mainwin, 0x00140014, (char *)zi_save);
sendsms = CreateWindow(WNDCLASS_BUTTON, "\\发送短信", WS_CHILD|BS_REGULAR, 25 + (LCD_WIDTH - 70)/2, 23, BUTTON_W, BUTTON_W, mainwin, 0x00140014, (char *)zi_fasongduanxin);
infrared = CreateWindow(WNDCLASS_BUTTON, "\\红外", WS_CHILD|BS_REGULAR, 50 + (LCD_WIDTH - 70)/2, 23, BUTTON_W, BUTTON_W, mainwin, 0, NULL);
textedit = CreateWindow(WNDCLASS_EDITOR, "", WS_CHILD|ES_MULTI_REGULAR, 2 + (LCD_WIDTH - 160)/2, 48, 156, 80, mainwin, TEXT_SIZE, NULL);
keyboard = CreateWindow(WNDCLASS_KEYBD, "", WS_CHILD|KBS_HANDWRITE|0xff, 1, 144, 157, 70, mainwin, 0, NULL);
tskbar = CreateWindow(WNDCLASS_TSKBAR, NULL, WS_CHILD|TBS_TYPICAL, 0, 0, 0, 0,mainwin, 0, NULL);
SetFocus(textedit);
//程序开始
while(!quit)
{
ASIXGetMessage(&msg, NULL, 0, 0);
switch(msg.message)
{
case WM_COMMAND:
if(msg.lparam == save) //点击保存按钮
{
GetEditorStr(textedit, newcontent, TEXT_SIZE);
if(strlen(newcontent) == 0)
{
MessageBox(mainwin, "请输入文件内容!", "提醒", MB_ICONEXCLAMATION|MB_OK);
}
else
{
newitem->content = newcontent;
sprintf(size, "%u",strlen(newcontent));
newitem->size = size;
AddDirFile(newitem);
saveflag = 1;
quit = 1;
// fseek(fp, 0, SEEK_SET);
// fwrite(newcontent, sizeof(char), strlen(newcontent), fp);
}
}
else
if(msg.lparam == sendsms) //点击发送短信按钮
{
GetEditorStr(textedit, newcontent, TEXT_SIZE);
if(strlen(newcontent) == 0)
{
MessageBox(mainwin, "请输入文件内容!", "提醒", MB_ICONEXCLAMATION|MB_OK);
}
else
{
TransmitSMS(newcontent);
}
}
else
if(msg.lparam == infrared) //点击红外发送按钮
{
GetEditorStr(textedit, newcontent, TEXT_SIZE);
if(strlen(newcontent) == 0)
{
MessageBox(mainwin, "请输入文件内容!", "提醒", MB_ICONEXCLAMATION|MB_OK);
}
else
{
//红外发送
;
}
}
break;
case WM_QUIT:
GetEditorStr(textedit, newcontent, TEXT_SIZE); //读出文件内容
if((strlen(newcontent) != 0) && (saveflag == 0)) //内容不为空时,提示是否保存
{
if(MessageBox(mainwin, "是否保存文件!", "提醒", MB_ICONEXCLAMATION|MB_YESNO) == IDYES)
{
newitem->content = newcontent;
sprintf(size, "%u", strlen(newcontent));
newitem->size = size;
AddDirFile(newitem);
}
}
quit = 1;
break;
}
DefWindowProc(msg.message, msg.lparam, msg.data, msg.wparam);
}
DestroyWindow( mainwin );
return CREATE_OK;
}
//文件阅读模块
void ReadNotepad(PROPERTY **nowlist, S16 offset, S16 allnum)
{
//定义窗口和控件ID
U32 mainwin; //主窗口
U32 save; //保存按钮
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -