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

📄 x3.c

📁 CC386 is a general-purpose 32-bit C compiler. It is not an optimizing compiler but given that the co
💻 C
📖 第 1 页 / 共 5 页
字号:
            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 + -