📄 x3.c
字号:
return 0;
case WM_NOTIFY:
if (wParam == IDC_FILELIST)
{
if (((LPNMHDR)lParam)->code == LVN_GETDISPINFO)
{
LV_DISPINFO *plvdi = (LV_DISPINFO*)lParam;
DWINFO *ptr;
plvdi->item.mask |= LVIF_TEXT | LVIF_DI_SETITEM;
plvdi->item.mask &= ~LVIF_STATE;
switch (plvdi->item.iSubItem)
{
case 2:
ptr = (DWINFO*)GetWindowLong(children[plvdi
->item.lParam], 0);
plvdi->item.pszText = ptr->dwTitle;
break;
default:
plvdi->item.pszText = "";
break;
}
}
}
return 0;
case WM_COMMAND:
switch (wParam &0xffff)
{
case IDOK:
ParseFileSaveData(hwnd, IDOK, FALSE);
EndDialog(hwnd, IDOK);
break;
case IDCANCEL:
EndDialog(hwnd, IDCANCEL);
break;
case IDC_SELECTALL:
ParseFileSaveData(hwnd, IDC_SELECTALL, FALSE);
break;
case IDC_DESELECTALL:
ParseFileSaveData(hwnd, IDC_DESELECTALL, FALSE);
break;
case IDHELP:
ContextHelp(260);
break;
}
break;
case WM_CLOSE:
PostMessage(hwnd, WM_COMMAND, IDCANCEL, 0);
break;
}
return 0;
}
//-------------------------------------------------------------------------
long APIENTRY FileChangeProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM
lParam)
{
switch (message)
{
case WM_INITDIALOG:
if (!CreateFileSaveData(hwnd, TRUE))
EndDialog(hwnd, 1);
else
CenterWindow(hwnd);
return 0;
case WM_NOTIFY:
if (wParam == IDC_FILELIST)
{
NMITEMACTIVATE *ia;
LV_ITEM item;
int state;
if (((LPNMHDR)lParam)->code == LVN_GETDISPINFO)
{
LV_DISPINFO *plvdi = (LV_DISPINFO*)lParam;
DWINFO *ptr;
plvdi->item.mask |= LVIF_TEXT | LVIF_DI_SETITEM;
plvdi->item.mask &= ~LVIF_IMAGE;
switch (plvdi->item.iSubItem)
{
case 2:
ptr = (DWINFO*)GetWindowLong(children[plvdi
->item.lParam], 0);
plvdi->item.pszText = ptr->dwTitle;
break;
default:
plvdi->item.pszText = "";
break;
}
}
}
break;
case WM_COMMAND:
switch (wParam &0xffff)
{
case IDOK:
ParseFileSaveData(hwnd, IDOK, TRUE);
EndDialog(hwnd, IDOK);
break;
case IDCANCEL:
EndDialog(hwnd, IDCANCEL);
break;
case IDC_SELECTALL:
ParseFileSaveData(hwnd, IDC_SELECTALL, TRUE);
break;
case IDC_DESELECTALL:
ParseFileSaveData(hwnd, IDC_DESELECTALL, TRUE);
break;
case IDHELP:
ContextHelp(270);
break;
}
break;
case WM_CLOSE:
PostMessage(hwnd, WM_COMMAND, IDCANCEL, 0);
break;
}
return 0;
}
//-------------------------------------------------------------------------
void CheckEditWindowChangedThread(void)
{
static int sem;
if (!sem)
{
sem++;
DialogBoxParam(hInstance, "DLG_FILECHANGE", 0, (DLGPROC)FileChangeProc,
0);
sem--;
}
}
//-------------------------------------------------------------------------
void CheckEditWindowChanged(void)
{
DWORD threadhand;
CloseHandle(CreateThread(0, 0, (LPTHREAD_START_ROUTINE)
CheckEditWindowChangedThread, (LPVOID)0, 0, &threadhand));
}
//-------------------------------------------------------------------------
int QuerySaveAll(void)
{
return DialogBoxParam(hInstance, "DLG_FILESAVE", 0, (DLGPROC)FileSaveProc,
0);
}
//-------------------------------------------------------------------------
void SaveDrawAll(void)
{
int i;
for (i = 0; i < numberofdrawwindows; i++)
{
DWINFO *ptr = (DWINFO*)GetWindowLong(children[i], 0);
if (SendMessage(ptr->dwHandle, EM_GETMODIFY, 0, 0))
SendMessage(children[i], WM_COMMAND, IDM_SAVE, 0);
}
}
//-------------------------------------------------------------------------
int AnyModified(void)
{
int i, rv = 0;
for (i = 0; i < numberofdrawwindows; i++)
{
DWINFO *ptr = (DWINFO*)GetWindowLong(children[i], 0);
rv |= SendMessage(ptr->dwHandle, EM_GETMODIFY, 0, 0);
}
return rv;
}
//-------------------------------------------------------------------------
void CloseAll(void)
{
int i;
for (i = numberofdrawwindows - 1; i >= 0; i--)
SendMessage(children[i], WM_CLOSE, 0, 0);
}
//-------------------------------------------------------------------------
void RedrawAllBreakpoints(void)
{
int i;
for (i = numberofdrawwindows - 1; i >= 0; i--)
InvalidateRect(children[i], 0, 0);
}
//-------------------------------------------------------------------------
char *GetEditData(HWND hwnd)
{
int l;
char *buf;
l = SendMessage(hwnd, WM_GETTEXTLENGTH, 0, 0);
buf = malloc(l + 1);
if (!buf)
{
return 0;
}
SendMessage(hwnd, WM_GETTEXT, l + 1, (LPARAM)buf);
return buf;
}
//-------------------------------------------------------------------------
int SetEditData(HWND hwnd, char *buf)
{
SendMessage(GetDlgItem(hwnd, ID_EDITCHILD), WM_SETTEXT, 0, (LPARAM)buf);
free(buf);
return TRUE;
}
//-------------------------------------------------------------------------
void backup(char *name)
{
char newname[256], buffer[512];
char *s;
HANDLE in, out;
int size;
BY_HANDLE_FILE_INFORMATION info;
strcpy(newname, name);
s = strrchr(newname, '.');
if (s)
if (!xstricmp(s, ".prj"))
strcpy(s, ".bpj");
else
strcpy(s, ".bak");
else
strcat(newname, ".bak");
in = CreateFile(name, GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0);
if (in == INVALID_HANDLE_VALUE)
return ;
if (!GetFileInformationByHandle(in, &info))
{
CloseHandle(in);
return ;
}
out = CreateFile(newname, GENERIC_WRITE, 0, 0, CREATE_ALWAYS, 0, 0);
if (out == INVALID_HANDLE_VALUE)
{
ExtendedMessageBox("Write Error", MB_SETFOREGROUND | MB_SYSTEMMODAL,
"Backup file is not accessible");
CloseHandle(in);
return ;
}
while (1)
{
DWORD read, written;
if (!ReadFile(in, buffer, 512, &read, 0) || !read)
break;
WriteFile(out, buffer, read, &written, 0);
}
SetFileTime(out, &info.ftCreationTime, &info.ftLastAccessTime,
&info.ftLastWriteTime);
CloseHandle(out);
CloseHandle(in);
}
//-------------------------------------------------------------------------
int SaveFile(HWND hwnd, DWINFO *info)
{
char *buf = GetEditData(GetDlgItem(hwnd, ID_EDITCHILD));
FILE *out;
int l, i;
if (editFlags &BACKUP_FILES)
backup(info->dwName);
if (!buf)
return FALSE;
#ifdef OLD_EDIT_FORMAT
out = fopen(info->dwName, "wb");
#else
out = fopen(info->dwName, "w");
#endif
if (!out)
{
ExtendedMessageBox("Write Error", MB_SETFOREGROUND | MB_SYSTEMMODAL,
"Output file is read-only");
free(buf);
return FALSE;
}
fputs(buf, out);
fclose(out);
free(buf);
FileTime(&info->time, info->dwName);
return TRUE;
}
//-------------------------------------------------------------------------
int LoadFile(HWND hwnd, DWINFO *info)
{
long size;
char *buf;
#ifdef OLD_EDIT_FORMAT
FILE *in = fopen(info->dwName, "rb");
#else
FILE *in = fopen(info->dwName, "r");
#endif
if (!in)
{
ShowWindow(info->dwHandle, SW_SHOW);
return FALSE;
}
fseek(in, 0L, SEEK_END);
fgetpos(in, &size);
buf = calloc(size + 1, 1);
if (!buf)
{
fclose(in);
ShowWindow(info->dwHandle, SW_SHOW);
return FALSE;
}
fseek(in, 0L, SEEK_SET);
size = fread(buf, 1, size, in);
if (size < 0)
size = 0;
buf[size] = 0;
fclose(in);
SetEditData(hwnd, buf);
SendMessage(info->dwHandle, EM_SETMODIFY, 0, 0);
if (FileAttributes(info->dwName) &FILE_ATTRIBUTE_READONLY)
SendMessage(info->dwHandle, EM_SETREADONLY, 1, 0);
FileTime(&info->time, info->dwName);
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -