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

📄 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 页
字号:
        oldpen; RECT r; HBRUSH graybrush; LOGBRUSH lbrush; PAINTSTRUCT paint;
        int childheight; int startpos, endpos, flag, i; HWND win; FILETIME
        time; NMHDR *nm; int rv; charinfo s; switch (iMessage)
    {
        case EN_LINECHANGE:
        ptr = (DWINFO*)GetWindowLong(hwnd, 0); TagLineChange(ptr->dwName,
            wParam + 1, lParam); GetClientRect(hwnd, &r); r.right =
            EDITOR_OFFSET; InvalidateRect(hwnd, &r, 0); break; case WM_NOTIFY:
            nm = (NMHDR*)lParam; if (nm->code == NM_RCLICK)
            {
                HMENU menu = LoadMenu(hInstance, "EDITMENU"); HMENU popup =
                    GetSubMenu(menu, 0); POINT pos, pos1; ptr = (DWINFO*)
                    GetWindowLong(hwnd, 0); SendMessage(hwnd, EN_SETCURSOR, 0,
                    0); if (!SendMessage(ptr->dwHandle, EM_GETMODIFY, 0, 0))
                    EnableMenuItem(menu, IDM_SAVE, MF_GRAYED); if (uState !=
                    atBreakpoint && uState != atException)
                {
                    EnableMenuItem(menu, IDM_RUNTO, MF_GRAYED); EnableMenuItem
                        (menu, IDM_ADDWATCHINDIRECT, MF_GRAYED); 
                }
                GetCursorPos(&pos); pos1.x = pos.x; pos1.y = pos.y;
                    ScreenToClient(ptr->dwHandle, &pos1); i = SendMessage(ptr
                    ->dwHandle, EM_CHARFROMPOS, 0, (LPARAM) &pos1); s.min = i;
                    s.max = i; SendMessage(ptr->dwHandle, EM_EXSETSEL, 0, 
                    (LPARAM) &s); TrackPopupMenuEx(popup, TPM_BOTTOMALIGN |
                    TPM_LEFTBUTTON, pos.x, pos.y, hwndFrame, NULL); DestroyMenu
                    (menu); 
            }
        return 0; case WM_SYSCOMMAND:
        if (wParam == SC_CLOSE)return SendMessage(hwnd, WM_COMMAND, IDM_CLOSE,
            0); break; case WM_COMMAND:
            switch (LOWORD(wParam))
            {
            case IDM_CONTEXTHELP:
            ptr = (DWINFO*)GetWindowLong(hwnd, 0); i = SendMessage(ptr
                ->dwHandle, WM_COMMAND, wParam, lParam); break; case IDM_GOTO:
                lParam = DialogBox(hInstance, "GOTODIALOG", hwnd, (DLGPROC)
                    gotoProc); if (lParam == 0)break; 
                // fall through
            case IDM_SETLINE:
                ptr = (DWINFO*)GetWindowLong(hwnd, 0); SendMessage(ptr
                    ->dwHandle, EM_GETLINECOUNT, 0, 0);  
                    // force update of vertical scroll range
            i = SendMessage(ptr->dwHandle, EM_LINEINDEX, lParam - 1, 0); s.min 
                = i; s.max = i; SendMessage(ptr->dwHandle, EM_EXSETSEL, 0, 
                (LPARAM) &s); SendMessage(ptr->dwHandle, EM_SCROLLCARET, 0, 0);
                drawParams(ptr, hwnd); found = FALSE; InvalidateRect(hwnd, 0, 0)
                ; break; case ID_REDRAWSTATUS:
            ptr = (DWINFO*)GetWindowLong(hwnd, 0); drawParams(ptr, hwnd);
                InvalidateRect(hwnd, 0, 0); break; case ID_QUERYHASFILE:
            ptr = (DWINFO*)GetWindowLong(hwnd, 0); ptr1 = (DWINFO*)lParam;
                return !xstricmpz(ptr->dwName, ptr1->dwName); case ID_QUERYSAVE:
                ptr = (DWINFO*)GetWindowLong(hwnd, 0); rv = SendMessage(ptr
                    ->dwHandle, EM_GETMODIFY, 0, 0); if (rv)
                {
                    return ExtendedMessageBox("File Has Changed",
                        MB_YESNOCANCEL, 
                        "File %s has changed.  Do you wish to save it?", ptr
                        ->dwTitle); 
                }
                else
            return IDNO; case IDM_SAVEAS:
                dialog: ptr = (DWINFO*)GetWindowLong(hwnd, 0); if 
                    (!SaveFileDialog(&ofn, ptr->dwName, hwnd, TRUE,
                    szSourceFilter, "FILEDIR", 0))break; if (projectList && ptr
                    ->dwName[0] == 0)
                {
                    if (ExtendedMessageBox("Project Query", MB_TASKMODAL |
                        MB_YESNO, "Add file to project?") == IDYES)
                    {
                        AddFileInternal(projectList, 0, ofn.lpstrFile,
                            ofn.lpstrFileTitle); 
                    }
                }
            strcpy(ptr->dwTitle, ofn.lpstrFileTitle); strcpy(ptr->dwName,
                ofn.lpstrFile); SetWindowText(hwnd, ptr->dwTitle); recolorize
                (ptr); case IDM_SAVE:
            save: ptr = (DWINFO*)GetWindowLong(hwnd, 0); rv = SendMessage(ptr
                ->dwHandle, EM_GETMODIFY, 0, 0); if (!rv)break; if (ptr
                ->dwName[0] == 0)goto dialog; rv = SaveFile(hwnd, (char*)
                GetWindowLong(hwnd, 0)); TagLinesAdjust(ptr->dwName,
                TAGM_SAVEFILE); SendMessage(ptr->dwHandle, EM_SETMODIFY, 0, 0);
                drawParams(ptr, hwnd); return rv; break; case IDM_CLOSE:
                {
                    rv = SendMessage(hwnd, WM_COMMAND, ID_QUERYSAVE, 0); switch
                        (rv)
                    {
                    case IDYES:
                    if (SendMessage(hwnd, WM_COMMAND, IDM_SAVE, 0))SendMessage
                        (hwnd, WM_CLOSE, 0, 0); break; case IDNO:
                    ptr = (DWINFO*)GetWindowLong(hwnd, 0); TagLinesAdjust(ptr
                        ->dwName, TAGM_DISCARDFILE); SendMessage(hwnd, WM_CLOSE,
                        0, 0); break; case IDCANCEL:
                        break; 
                    }
                    return rv; 
                }
            break; case IDM_UNDO:
            SendMessage(GetDlgItem(hwnd, ID_EDITCHILD), WM_UNDO, 0, 0); break;
                case IDM_CUT:
            SendMessage(GetDlgItem(hwnd, ID_EDITCHILD), WM_CUT, 0, 0); break;
                case IDM_COPY:
            SendMessage(GetDlgItem(hwnd, ID_EDITCHILD), WM_COPY, 0, 0); break;
                case IDM_PASTE:
            SendMessage(GetDlgItem(hwnd, ID_EDITCHILD), WM_PASTE, 0, 0); break;
                case IDM_SELECTALL:
            SendMessage(GetDlgItem(hwnd, ID_EDITCHILD), EM_SETSEL, 0,  - 1);
                break; case IDM_FIND:
            PopFindString(hwnd); break; case IDM_REPLACE:
            PopReplaceString(hwnd); break; case IDM_FINDNEXT:
                if (finding)FindNextString(hwnd, &find, 0, 0); 
                else
            ReplaceNextString(hwnd, &replace); break; case IDM_TOUPPER:
            SendMessage(GetDlgItem(hwnd, ID_EDITCHILD), EM_TOUPPER, 0, 0);
                break; case IDM_TOLOWER:
            SendMessage(GetDlgItem(hwnd, ID_EDITCHILD), EM_TOLOWER, 0, 0);
                break; case IDM_INDENT:
            SendMessage(GetDlgItem(hwnd, ID_EDITCHILD), EM_SELECTINDENT, 0, 1);
                break; case IDM_UNINDENT:
            SendMessage(GetDlgItem(hwnd, ID_EDITCHILD), EM_SELECTINDENT, 0, 0);
                break; default:
                return DefMDIChildProc(hwnd, iMessage, wParam, lParam); 
            }
        break; case EM_CANUNDO:
        return SendMessage(GetDlgItem(hwnd, ID_EDITCHILD), EM_CANUNDO, 0, 0);
            case EN_SETCURSOR:
        found = FALSE; ptr = (DWINFO*)GetWindowLong(hwnd, 0); drawParams(ptr,
            hwnd); GetClientRect(hwnd, &r); r.right = EDITOR_OFFSET - 3;
            InvalidateRect(hwnd, &r, 0); break; case WM_PAINT:
        GetClientRect(hwnd, &r); dc = BeginPaint(hwnd, &paint); hpen =
            CreatePen(PS_SOLID, 1, 0xcccccc), oldpen; r.right = EDITOR_OFFSET -
            3; MoveToEx(dc, EDITOR_OFFSET - 1, 0, 0); LineTo(dc, EDITOR_OFFSET 
            - 1, r.bottom); oldpen = SelectObject(dc, hpen); MoveToEx(dc,
            EDITOR_OFFSET - 2, 0, 0); LineTo(dc, EDITOR_OFFSET - 2, r.bottom);
            SelectObject(dc, oldpen); DeleteObject(hpen); PaintBreakpoints(hwnd,
            dc, &paint, &r); EndPaint(hwnd, &paint); return 0; case WM_CREATE:
            //         maximized = TRUE ;
            ptr = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DWINFO))
                ; SetWindowLong(hwnd, 0, (int)ptr); SetWindowLong(hwnd, 4, (int)
                EDITSIG); memset(ptr, 0, sizeof(*ptr)); if (newInfo == (DWINFO*)
                - 1)
            {
                SetWindowText(hwnd, szUntitled); 
            }
            else
            {
                strcpy(ptr->dwTitle, newInfo->dwTitle); SetWindowText(hwnd,
                    newInfo->dwTitle); strcpy(ptr->dwName, newInfo->dwName);
                    FileTime(&ptr->time, ptr->dwName); 
            }
            ptr->dwHandle = CreateWindowEx(0, "xedit", 0, WS_CHILD +
                WS_CLIPSIBLINGS + WS_HSCROLL + WS_VSCROLL + ES_LEFT +
                ES_MULTILINE + ES_NOHIDESEL + ES_AUTOVSCROLL + ES_AUTOHSCROLL,
                EDITOR_OFFSET, 0, 0, 0, hwnd, (HMENU)ID_EDITCHILD, hInstance, 0)
                ; ptr->self = hwnd; ptr->dwLineNo =  - 1; if (newInfo &&
                newInfo != (DWINFO*) - 1 && newInfo->dwLineNo !=  - 1)
            {
                ptr->dwLineNo = newInfo->dwLineNo; newInfo->dwLineNo =  - 1; 
            }
            if (newInfo != (DWINFO*) - 1 && newInfo->logMRU)
            {
                InsertMRU(ptr, 0); MRUToMenu(0); 
            }
            //         CloseHandle(CreateThread(0,0,(LPTHREAD_START_ROUTINE)asyncLoadFile,(LPVOID)ptr,0,&threadhand)) ;
            recolorize(ptr); if (ptr->dwName[0])LoadFile(ptr->self, ptr); 
            else
            ShowWindow(ptr->dwHandle, SW_SHOW); children[numberofdrawwindows++]
                = hwnd; if (ptr->dwLineNo !=  - 1)
            {
                PostMessage(ptr->self, WM_COMMAND, IDM_SETLINE, ptr->dwLineNo); 
            }
            PostMessage(hwndSourceTab, WM_RESETTABS, 0, 0); return 0; 

        case WM_CLOSE:
        ptr = (DWINFO*)GetWindowLong(hwnd, 0); eraseParams(ptr->dwHandle);
            break; case WM_DESTROY:
            for (i = 0; i < numberofdrawwindows; i++)if (children[i] == hwnd)
                break; if (i < numberofdrawwindows - 1)memcpy(children + i,
                children + i + 1, (numberofdrawwindows - i - 1) *sizeof(HWND));
                if (--numberofdrawwindows == 0 && IsWindow(hwndFind))
            {
                DestroyWindow(hwndFind); hwndFind = 0; 
            }
        SendMessage(hwndSourceTab, WM_RESETTABS, 0, 0); HeapFree(GetProcessHeap
            (), 0, (void*)GetWindowLong(hwnd, 0)); PostMessage(hwndFrame,
            WM_REDRAWTOOLBAR, 0, 0); break; case WM_SIZE:
        MoveWindow(GetDlgItem(hwnd, ID_EDITCHILD), EDITOR_OFFSET, 0, (lParam
            &65535) - EDITOR_OFFSET, lParam >> 16, 1); break; case
            WM_MDIACTIVATE:
        found = FALSE; break; case WM_SETFOCUS:
        SetFocus(GetDlgItem(hwnd, ID_EDITCHILD)); ptr = (DWINFO*)GetWindowLong
            (hwnd, 0); drawParams(ptr, hwnd); InvalidateRect(hwnd, 0, 0);
            PostMessage(hwndFrame, WM_REDRAWTOOLBAR, 0, 0); PostMessage
            (hwndSourceTab, WM_SETACTIVETAB, 0, (LPARAM)hwnd); return 0; case
            WM_KILLFOCUS:
        SendMessage(GetDlgItem(hwnd, ID_EDITCHILD), iMessage, wParam, lParam);
            return 0; case WM_INITMENUPOPUP:
            SendMessage(GetDlgItem(hwnd, ID_EDITCHILD), EM_GETSEL, (WPARAM)
                &startpos, (LPARAM) &endpos); flag = startpos < endpos;
                EnableMenuItem(hMenuMain, IDM_CUT, flag); EnableMenuItem
                (hMenuMain, IDM_COPY, flag); EnableMenuItem(hMenuMain,
                IDM_PASTE, 1); EnableMenuItem(hMenuMain, IDM_UNDO, SendMessage
                (GetDlgItem(hwnd, ID_EDITCHILD), EM_CANUNDO, 0, 0));
                EnableMenuItem(hMenuMain, IDM_BROWSE, flag); 
            //EnableMenuItem(hMenuMain,IDM_BROWSEBACK,flag) ;
            EnableMenuItem(hMenuMain, IDM_BOOKMARK, flag); 
            //EnableMenuItem(hMenuMain,IDM_NEXTBOOKMARK,flag) ;
            //EnableMenuItem(hMenuMain,IDM_PREVBOOKMARK,flag) ;
        return 0; case WM_WORDUNDERCURSOR:
        ptr = (DWINFO*)GetWindowLong(hwnd, 0); return SendMessage(ptr->dwHandle,
            iMessage, wParam, lParam); case WM_FILETITLE:
        ptr = (DWINFO*)GetWindowLong(hwnd, 0); return ptr->dwTitle; case
            WM_FILENAME:
        ptr = (DWINFO*)GetWindowLong(hwnd, 0); return ptr->dwName; default:
            if (iMessage == iFindMessage)
            {
                HWND edit; if (finding)
                {
                    edit = GetDlgItem(hwndFind, 1152); SendMessage(edit,
                        WM_SAVEHISTORY, 0, 0); if (find.Flags &FR_FINDNEXT)
                        FindNextString(hwnd, &find, 0, 0); 
                    //               if (find.Flags & FR_DIALOGTERM)
                    //                  hwndFind = 0 ;
                }
                else
                {
                    edit = GetDlgItem(hwndFind, 1152); SendMessage(edit,
                        WM_SAVEHISTORY, 0, 0); edit = GetDlgItem(hwndFind, 1153)
                        ; SendMessage(edit, WM_SAVEHISTORY, 0, 0); if 
                        (replace.Flags &(FR_FINDNEXT | FR_REPLACE |
                        FR_REPLACEALL))ReplaceNextString(hwnd, &replace); 
                    //               if (replace.Flags & FR_DIALOGTERM)
                    //                  hwndFind = 0 ;
                }
            }
            break; 
    }
    return DefMDIChildProc(hwnd, iMessage, wParam, lParam); 
}

//-------------------------------------------------------------------------

void RegisterDrawWindow(void)
{
    WNDCLASS wc; memset(&wc, 0, sizeof(wc)); wc.style = 0; wc.lpfnWndProc =
        &DrawProc; wc.cbClsExtra = 0; wc.cbWndExtra = sizeof(void*) * 2;
        wc.hInstance = hInstance; wc.hIcon = LoadIcon(0, IDI_APPLICATION);
        wc.hCursor = LoadCursor(0, IDC_ARROW); wc.hbrBackground =
        GetStockObject(WHITE_BRUSH); wc.lpszMenuName = 0; wc.lpszClassName =
        szDrawClassName; pcBitmap = LoadBitmap(hInstance, "ID_PCBMP");
        stoppcBitmap = LoadBitmap(hInstance, "ID_STOPPCBMP"); tagBmps[TAG_BP] =
        LoadBitmap(hInstance, "ID_STOPBMP"); tagBmps[TAG_FIF1] = LoadBitmap
        (hInstance, "ID_FIF1BMP"); tagBmps[TAG_FIF2] = LoadBitmap(hInstance, 
        "ID_FIF2BMP"); tagBmps[TAG_BOOKMARK] = LoadBitmap(hInstance, 
        "ID_BOOKMARKBMP"); tagBmps[TAG_BPGRAYED] = LoadBitmap(hInstance, 
        "ID_STOPDISBMP"); ChangeBitmapColor(pcBitmap, 0xffffff, GetSysColor
        (COLOR_3DFACE)); ChangeBitmapColor(stoppcBitmap, 0xffffff, GetSysColor
        (COLOR_3DFACE)); ChangeBitmapColor(tagBmps[TAG_BP], 0, GetSysColor
        (COLOR_3DFACE)); ChangeBitmapColor(tagBmps[TAG_FIF1], 0, GetSysColor
        (COLOR_3DFACE)); ChangeBitmapColor(tagBmps[TAG_FIF2], 0, GetSysColor
        (COLOR_3DFACE)); ChangeBitmapColor(tagBmps[TAG_BOOKMARK], 0,
        GetSysColor(COLOR_3DFACE)); ChangeBitmapColor(tagBmps[TAG_BPGRAYED], 0,
        GetSysColor(COLOR_3DFACE)); RegisterClass(&wc); findflags =
        ProfileToInt("FindFlags", 12); replaceflags = ProfileToInt(
        "ReplaceFlags", 4); 
}

//-------------------------------------------------------------------------

HWND openfile(DWINFO *newInfo)
{
    MDICREATESTRUCT mc; HWND rv; BOOL maximized; SendMessage(hwndClient,
        WM_MDIGETACTIVE, 0, (LPARAM) &maximized); memset(&mc, 0, sizeof(mc));
        mc.szClass = szDrawClassName; mc.szTitle = szUntitled; mc.hOwner =
        hInstance; mc.x = childxpos; mc.y = childypos; mc.cx = 0; mc.cy = 0;
        mc.style = WS_VISIBLE | WS_CHILD | WS_OVERLAPPEDWINDOW | WS_SYSMENU |
        WS_SIZEBOX | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | (maximized ? WS_MAXIMIZE
        : 0); mc.lParam = 0; rv = (HWND)SendMessage(hwndClient, WM_MDICREATE, 0,
        (LPARAM) &mc); childxpos += 20; childypos += 20; if (childxpos > 120)
        childxpos = childypos = 0; return rv; 
}

//-------------------------------------------------------------------------

HWND CreateDrawWindow(DWINFO *baseinfo)
{
    int i; DWINFO temp; OPENFILENAME ofn; if (baseinfo && baseinfo != (DWINFO*)
        - 1)for (i = 0; i < MAX_CHILDREN; i++)if (children[i] && SendMessage
        (children[i], WM_COMMAND, ID_QUERYHASFILE, (LPARAM)baseinfo))
    {
        BringWindowToTop(children[i]); SetFocus(children[i]); if (baseinfo
            ->dwLineNo !=  - 1)PostMessage(children[i], WM_COMMAND, IDM_SETLINE,
            baseinfo->dwLineNo); return children[i]; 
    }

    if (numberofdrawwindows >= MAX_CHILDREN)
    {
        ExtendedMessageBox("Error", MB_SETFOREGROUND | MB_SYSTEMMODAL, 
            "Too many edit windows open"); return 0; 
    }

    newInfo = baseinfo; if (!newInfo)
    {
        newInfo = &temp; newInfo->dwLineNo =  - 1; newInfo->logMRU = TRUE; if 
            (OpenFileDialog(&ofn, 0, 0, FALSE, TRUE, szSourceFilter, "FILEDIR",
            0))
        {
            char *q = ofn.lpstrFile, path[256]; strcpy(path, ofn.lpstrFile); q 
                += strlen(q) + 1; if (! *q)
            {
                strcpy(newInfo->dwTitle, ofn.lpstrFileTitle); strcpy(newInfo
                    ->dwName, ofn.lpstrFile); 
            }
            else
            {
                while (*q)
                {
                    strcpy(newInfo->dwTitle, q); sprintf(newInfo->dwName, 
                        "%s\\%s", path, q); openfile(newInfo); q += strlen(q) +
                        1; 
                }
                return 0; 
            }
        }
        else
        {

            //               ExtendedMessageBox("File Open",MB_SETFOREGROUND | MB_SYSTEMMODAL,"Could not open file %s %d",newInfo->dwName,GetLastError()) ;
            return 0; 
        }
    }
    return openfile(newInfo); 
}

⌨️ 快捷键说明

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