error.c

来自「CC386 is a general-purpose 32-bit C comp」· C语言 代码 · 共 479 行 · 第 1/2 页

C
479
字号
    return CallWindowProc(oldproc, hwnd, iMessage, wParam, lParam);
}

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

LRESULT CALLBACK _export errorProc(HWND hwnd, UINT iMessage, WPARAM wParam,
    LPARAM lParam)
{
    static HWND hsubwnds[4]; // build, debug, find1, find2
    static int index;
    static HFONT tabBoldFont, tabNormalFont;
    TC_ITEM tie;
    NMHDR *h;
    DRAWITEMSTRUCT *dr;
    HFONT font;
    RECT r, r1,  *pr;
    charinfo s;
    switch (iMessage)
    {
        case WM_MDIACTIVATE:
            SendMessage(hwndCtrl, LCF_SETACTIVE, 0, lParam == (LPARAM)hwnd);
            if (lParam == (LPARAM)hwnd)
                SendMessage(hwndSourceTab, WM_SETACTIVETAB, 0, (LPARAM)hwnd);
            return TRUE;
        case WM_SYSCOMMAND:
            if (wParam == SC_CLOSE)
            {
                SendMessage(hwnd, WM_CLOSE, 0, 0);
            }
            break;
        case WM_NOTIFY:
            h = (NMHDR*)lParam;
            switch (h->code)
            {
            case TCN_SELCHANGE:
                ShowWindow(hsubwnds[index], SW_HIDE);
                index = TabCtrl_GetCurSel(hwndTabCtrl);
                ShowWindow(hsubwnds[index], SW_SHOW);
                break;
            }
            break;
        case WM_COMMAND:
            //			switch(LOWORD(wParam)) {
            //			}
            break;
        case WM_DRAWITEM:
            dr = (DRAWITEMSTRUCT*)lParam;
            if (dr->itemState &ODS_SELECTED)
            {
                font = tabBoldFont;
            }
            else
                font = tabNormalFont;
            font = SelectObject(dr->hDC, font);
            TextOut(dr->hDC, dr->rcItem.left + 4, dr->rcItem.bottom - 16,
                nameTags[dr->itemID], strlen(nameTags[dr->itemID]));
            font = SelectObject(dr->hDC, font);
            break;
        case WM_SETTEXT:
            if (!lParam)
                SendMessage(hsubwnds[wParam], WM_SETTEXT, 0, (LPARAM)"");
            else
            {
                int lindex = SendMessage(hsubwnds[wParam], EM_LINEINDEX,
                    0x7fffffff, 0);
                SendMessage(hsubwnds[wParam], EM_HIDESELECTION, 1, 0);
                s.min = s.max = lindex;
                SendMessage(hsubwnds[wParam], EM_EXSETSEL, 0, (LPARAM) &s);
                SendMessage(hsubwnds[wParam], EM_REPLACESEL, FALSE, lParam);
                SendMessage(hsubwnds[wParam], EM_HIDESELECTION, 0, 0);
                SendMessage(hsubwnds[wParam], EM_SCROLLCARET, 0, 0);

            }
            return 0;
        case WM_SETFOCUS:
            SendMessage(hwndFrame, WM_REDRAWTOOLBAR, 0, 0);
            SendMessage(hsubwnds[index], WM_SETFOCUS, wParam, lParam);
            break;
        case WM_CREATE:
            hwndError = hwnd;
            GetClientRect(hwnd, &r);
            hwndCtrl = CreateControlWindow(DID_ERRORWND, hwnd, &r, (int)(
                (LPMDICREATESTRUCT)(*(int*)lParam))->lParam, szErrorTitle);
            SendMessage(hwndCtrl, LCF_ADJUSTRECT, 0, (LPARAM) &r);
            tabBoldFont = CreateFontIndirect(&Boldfontdata);
            tabNormalFont = CreateFontIndirect(&Normalfontdata);
            #ifndef __CCDL__
                #ifndef TCS_BOTTOM
                    #define TCS_BOTTOM 2
                #endif 
            #endif 
            hwndTabCtrl = CreateWindow(WC_TABCONTROL, 0, WS_CHILD +
                WS_CLIPSIBLINGS + WS_VISIBLE + WS_DLGFRAME + TCS_OWNERDRAWFIXED
                + TCS_FOCUSNEVER + TCS_FIXEDWIDTH + TCS_BOTTOM, r.left, r.top,
                r.right - r.left, r.bottom - r.top, hwndCtrl, 0, hInstance, 0);
            SendMessage(hwndTabCtrl, WM_SETFONT, (WPARAM)tabNormalFont, 0);
            OffsetRect(&r,  - r.left,  - r.top);
            TabCtrl_AdjustRect(hwndTabCtrl, FALSE, &r);
            hsubwnds[0] = CreateWindowEx(0, "XBUILDEDIT", 0, WS_CHILD +
                WS_VISIBLE + WS_VSCROLL + ES_NOHIDESEL + WS_BORDER + ES_LEFT +
                ES_MULTILINE, r.left, r.top, r.right - r.left, r.bottom - r.top,
                hwndTabCtrl, (HMENU)ID_EDITCHILD, hInstance, 0);
            hsubwnds[1] = CreateWindowEx(0, "XBUILDEDIT", 0, WS_CHILD +
                WS_VSCROLL + ES_NOHIDESEL + WS_BORDER + ES_LEFT + ES_MULTILINE,
                r.left, r.top, r.right - r.left, r.bottom - r.top, hwndTabCtrl,
                (HMENU)ID_EDITCHILD, hInstance, 0);
            hsubwnds[2] = CreateWindowEx(0, "XBUILDEDIT", 0, WS_CHILD +
                WS_VSCROLL + ES_NOHIDESEL + WS_BORDER + ES_LEFT + ES_MULTILINE,
                r.left, r.top, r.right - r.left, r.bottom - r.top, hwndTabCtrl,
                (HMENU)ID_EDITCHILD, hInstance, 0);
            hsubwnds[3] = CreateWindowEx(0, "XBUILDEDIT", 0, WS_CHILD +
                WS_VSCROLL + ES_NOHIDESEL + WS_BORDER + ES_LEFT + ES_MULTILINE,
                r.left, r.top, r.right - r.left, r.bottom - r.top, hwndTabCtrl,
                (HMENU)ID_EDITCHILD, hInstance, 0);
            SendMessage(hsubwnds[0], EM_LIMITTEXT, 4 *65536, 0);
            SendMessage(hsubwnds[1], EM_LIMITTEXT, 4 *65536, 0);
            SendMessage(hsubwnds[2], EM_LIMITTEXT, 4 *65536, 0);
            SendMessage(hsubwnds[3], EM_LIMITTEXT, 4 *65536, 0);
            SendMessage(hsubwnds[0], WM_SETFONT, (WPARAM)tabNormalFont, 0);
            SendMessage(hsubwnds[1], WM_SETFONT, (WPARAM)tabNormalFont, 0);
            SendMessage(hsubwnds[2], WM_SETFONT, (WPARAM)tabNormalFont, 0);
            SendMessage(hsubwnds[3], WM_SETFONT, (WPARAM)tabNormalFont, 0);
            tie.mask = TCIF_TEXT;
            tie.iImage =  - 1;
            tie.pszText = nameTags[0];
            TabCtrl_InsertItem(hwndTabCtrl, 0, &tie);
            tie.mask = TCIF_TEXT;
            tie.iImage =  - 1;
            tie.pszText = nameTags[1];
            TabCtrl_InsertItem(hwndTabCtrl, 1, &tie);
            tie.mask = TCIF_TEXT;
            tie.iImage =  - 1;
            tie.pszText = nameTags[2];
            TabCtrl_InsertItem(hwndTabCtrl, 2, &tie);
            tie.mask = TCIF_TEXT;
            tie.iImage =  - 1;
            tie.pszText = nameTags[3];
            TabCtrl_InsertItem(hwndTabCtrl, 3, &tie);
            return 0;
        case WM_CLOSE:
            dmgrHideWindow(DID_ERRORWND, TRUE);
            return 0;
        case WM_DESTROY:
            dmgrRemoveClient((CCW_params*)GetWindowLong(hwndCtrl, 0));
            DestroyWindow(hwndTabCtrl);
            DestroyWindow(hsubwnds[0]);
            DestroyWindow(hsubwnds[1]);
            DestroyWindow(hsubwnds[2]);
            DestroyWindow(hsubwnds[3]);
            DestroyWindow(hwndCtrl);
            break;
        case WM_SELERRWINDOW:
            ShowWindow(hsubwnds[index], SW_HIDE);
            index = (int)lParam;
            SendMessage(hwnd, WM_SETTEXT, index, 0);
            ShowWindow(hsubwnds[index], SW_SHOW);
            TabCtrl_SetCurSel(hwndTabCtrl, index);
            break;
        case WM_ERRDONESCAN:
            TagRemoveAll(lParam == ERR_FIND1_WINDOW ? TAG_FIF1 : TAG_FIF2);
            ScanForTags(lParam == ERR_FIND1_WINDOW ? TAG_FIF1 : TAG_FIF2,
                lParam == ERR_FIND1_WINDOW ? hsubwnds[2]: hsubwnds[3]);
            break;
        case WM_SIZE:
            MoveWindow(hwndCtrl, 0, 0, LOWORD(lParam), HIWORD(lParam), TRUE);
            r.left = 0;
            r.right = LOWORD(lParam);
            r.top = 0;
            r.bottom = HIWORD(lParam);
            SendMessage(hwndCtrl, LCF_ADJUSTRECT, 0, (LPARAM) &r);
            MoveWindow(hwndTabCtrl, r.left, r.top, r.right - r.left, r.bottom -
                r.top, TRUE);
            GetClientRect(hwndTabCtrl, &r);
            //         OffsetRect(&r,-r.left,-r.top) ;
            TabCtrl_AdjustRect(hwndTabCtrl, FALSE, &r);
            MoveWindow(hsubwnds[0], r.left, r.top, r.right - r.left, r.bottom -
                r.top, TRUE);
            MoveWindow(hsubwnds[1], r.left, r.top, r.right - r.left, r.bottom -
                r.top, TRUE);
            MoveWindow(hsubwnds[2], r.left, r.top, r.right - r.left, r.bottom -
                r.top, TRUE);
            MoveWindow(hsubwnds[3], r.left, r.top, r.right - r.left, r.bottom -
                r.top, TRUE);
            return 0;
        default:
            break;
    }
    return DefMDIChildProc(hwnd, iMessage, wParam, lParam);
}

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

void RegisterErrorWindow(void)
{
    WNDCLASS wc;
    memset(&wc, 0, sizeof(wc));
    wc.style = 0;
    wc.lpfnWndProc = &errorProc;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    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 = szErrorClassName;
    RegisterClass(&wc);

    GetClassInfo(0, "richedit", &wc);
    oldproc = wc.lpfnWndProc;
    wc.lpfnWndProc = &buildEditProc;
    wc.lpszClassName = "XBUILDEDIT";
    wc.hInstance = hInstance;
    wc.hbrBackground = 0;
    RegisterClass(&wc);


}

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

void CreateErrorWindow(void)
{
    MDICREATESTRUCT mc;
    RECT r;
    if (hwndError)
        return ;
    mc.szClass = szErrorClassName;
    mc.szTitle = szErrorTitle;
    mc.hOwner = hInstance;
    mc.x = CW_USEDEFAULT;
    mc.y = CW_USEDEFAULT;
    mc.cx = 200;
    mc.cy = 200;
    mc.style = WS_CHILD | WS_DLGFRAME | WS_CLIPCHILDREN | WS_CLIPSIBLINGS;
    mc.lParam = (LPARAM)0;
    hwndError = (HWND)SendMessage(hwndClient, WM_MDICREATE, 0, (LPARAM) &mc);
}

⌨️ 快捷键说明

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