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

📄 medit.c

📁 miniucgui1.30版本的源码
💻 C
📖 第 1 页 / 共 5 页
字号:
        for (i = 0; i < pMLEditData->MaxlinesDisp; i++)            DrawHDotLine (hdc,                     pMLEditData->leftMargin,                     pMLEditData->topMargin + pMLEditData->lineHeight * (i + 1) - 1,                    RECTW (rcTemp) - pMLEditData->leftMargin - pMLEditData->rightMargin);    }    if (fGetDC)        ReleaseDC (hdc);}static int MLEditCtrlProc (HWND hWnd, int message, WPARAM wParam, LPARAM lParam){       DWORD       dwStyle;    HDC         hdc;    PLINEDATA      pLineData;    PMLEDITDATA pMLEditData = NULL;    dwStyle     = GetWindowStyle(hWnd);    switch (message)    {        case MSG_CREATE:        {            if (!(pMLEditData = malloc (sizeof (MLEDITDATA)))) {                return -1;            }            pMLEditData->lineHeight = GetWindowFont (hWnd)->size;            if (dwStyle & ES_BASELINE)                pMLEditData->lineHeight += 2;                            if (!CreateCaret (hWnd, NULL, 1, pMLEditData->lineHeight))            {                free (pMLEditData);                return -1;            }            pMLEditData->status         = 0;            pMLEditData->curtotalLen    = 0;            pMLEditData->totalLimit     = 100*LEN_MLEDIT_BUFFER;            pMLEditData->lineLimit      = LEN_MLEDIT_BUFFER;            pMLEditData->editLine       = 0;            pMLEditData->veditPos       = 0;            pMLEditData->dispPos        = 0;            pMLEditData->vdispPos       = 0;            pMLEditData->MaxlinesDisp   = 0;            pMLEditData->linesDisp      = 0;            pMLEditData->StartlineDisp  = 0;            pMLEditData->EndlineDisp    = 0;                        MLEditInitBuffer (hWnd, pMLEditData, GetWindowCaption(hWnd), dwStyle);    #if 0            pMLEditData->selStartPos    = 0;            pMLEditData->selEndPos      = 0;#endif            pMLEditData->passwdChar     = '*';            pMLEditData->leftMargin     = MARGIN_MEDIT_LEFT;            pMLEditData->topMargin      = MARGIN_MEDIT_TOP;            pMLEditData->rightMargin    = MARGIN_MEDIT_RIGHT;            pMLEditData->bottomMargin   = MARGIN_MEDIT_BOTTOM;            pMLEditData->pos_chars = (int*)malloc(LEN_MLEDIT_BUFFER*sizeof(int));            pMLEditData->dx_chars = (int*)malloc(LEN_MLEDIT_BUFFER*sizeof(int));            memset (pMLEditData->pos_chars, 0, LEN_MLEDIT_BUFFER*sizeof(int));            memset (pMLEditData->dx_chars , 0, LEN_MLEDIT_BUFFER*sizeof(int));            pMLEditData->fit_chars      = 0;            pMLEditData->realdispPos    = 0;            pMLEditData->realStartLine  = 0;            pMLEditData->realEndLine    = 0;            pMLEditData->diff           = FALSE;            pMLEditData->bSCROLL        = FALSE;            pMLEditData->wraplines      = 0;                        SetWindowAdditionalData2 (hWnd,(DWORD)pMLEditData);            break;        }        case MSG_DESTROY:        {            pMLEditData =(PMLEDITDATA) GetWindowAdditionalData2(hWnd);            DestroyCaret (hWnd);            MLEditEmptyBuffer(pMLEditData);            free (pMLEditData->pos_chars);            free (pMLEditData->dx_chars);            pMLEditData->pos_chars = NULL;            pMLEditData->dx_chars = NULL;            free(pMLEditData);         }        break;                case MSG_SIZECHANGED:        {            RECT* clientRect = (RECT*)lParam;            pMLEditData =(PMLEDITDATA) GetWindowAdditionalData2(hWnd);            pMLEditData->MaxlinesDisp   = (RECTHP(clientRect) - pMLEditData->topMargin                                            - pMLEditData->bottomMargin)                                        / pMLEditData->lineHeight;            if (pMLEditData->MaxlinesDisp < 0)                pMLEditData->MaxlinesDisp = 0;            if (dwStyle & ES_AUTOWRAP && pMLEditData->head)            {                   PLINEDATA  pLineData = pMLEditData->head;                pMLEditData->wraplines = 0;                for (; pLineData; pLineData = pLineData->next)                {                    calcLineInfo (hWnd, pMLEditData, pLineData);                    pMLEditData->wraplines += pLineData->nwrapline;                }            }            if (dwStyle & ES_AUTOWRAP)                pMLEditData->linesDisp    = MIN (pMLEditData->MaxlinesDisp, pMLEditData->wraplines);            else                pMLEditData->linesDisp    = MIN (pMLEditData->MaxlinesDisp, pMLEditData->lines);            pMLEditData->StartlineDisp  = 0;            pMLEditData->EndlineDisp    = pMLEditData->StartlineDisp + pMLEditData->linesDisp - 1;            pMLEditData->editLine       = 0;            pMLEditData->dispPos        = 0;                        edtSetScrollInfo (hWnd, pMLEditData, TRUE);        }        break;        case MSG_FONTCHANGED:        {            pMLEditData =(PMLEDITDATA) GetWindowAdditionalData2(hWnd);            pMLEditData->vdispPos = 0;            pMLEditData->veditPos = 0;            edtSetCaretPos (hWnd);            edtSetScrollInfo (hWnd, pMLEditData, TRUE);            InvalidateRect (hWnd, NULL, TRUE);            return 0;        }                case MSG_SETCURSOR:            if (dwStyle & WS_DISABLED) {                SetCursor (GetSystemCursor (IDC_ARROW));                return 0;            }        break;        case MSG_KILLFOCUS:        {            pMLEditData = (PMLEDITDATA) GetWindowAdditionalData2 (hWnd);            pMLEditData->status &= ~EST_FOCUSED;            HideCaret (hWnd);            NotifyParent (hWnd, GetDlgCtrlID(hWnd), EN_KILLFOCUS);        }        break;                case MSG_SETFOCUS:        {            pMLEditData = (PMLEDITDATA) GetWindowAdditionalData2 (hWnd);            if (pMLEditData->status & EST_FOCUSED)                break;                        pMLEditData->status |= EST_FOCUSED;            /* only implemented for ES_LEFT align format. */            edtSetCaretPos (hWnd);            ShowCaret (hWnd);            ActiveCaret (hWnd);            NotifyParent (hWnd, GetDlgCtrlID(hWnd), EN_SETFOCUS);        }        break;                case MSG_ENABLE:            if ( (!(dwStyle & WS_DISABLED) && !wParam)                    || ((dwStyle & WS_DISABLED) && wParam) ) {                if (wParam)                    ExcludeWindowStyle(hWnd,WS_DISABLED);                else                    IncludeWindowStyle(hWnd,WS_DISABLED);                InvalidateRect (hWnd, NULL, TRUE);            }        return 0;        case MSG_ERASEBKGND:        {            BOOL hidden = HideCaret (hWnd);            edtOnEraseBackground (hWnd, dwStyle, (HDC)wParam, (const RECT*)lParam);            if (hidden)                ShowCaret (hWnd);            return 0;        }        case MSG_PAINT:        {            int     i;            char*   dispBuffer;            RECT    rect;                        pMLEditData =(PMLEDITDATA) GetWindowAdditionalData2(hWnd);            hdc = BeginPaint (hWnd);            GetClientRect (hWnd, &rect);                if (dwStyle & WS_DISABLED) {                SetBrushColor (hdc, PIXEL_lightgray);                SetBkColor (hdc, PIXEL_lightgray);            }            else {                SetBrushColor (hdc, PIXEL_lightwhite);                SetBkColor (hdc, PIXEL_lightwhite);            }            SetTextColor (hdc, PIXEL_black);            rect.left     += pMLEditData->leftMargin;            rect.top     += pMLEditData->topMargin ;            rect.right     -= pMLEditData->rightMargin;            rect.bottom -= pMLEditData->bottomMargin;            ClipRectIntersect (hdc, &rect);            for (i = pMLEditData->StartlineDisp;                     i <= pMLEditData->EndlineDisp; i++) {                int y, line=i, wrapline=0;                if (dwStyle & ES_AUTOWRAP)                    edtGetLineNums (pMLEditData, i, &line, &wrapline);                            pLineData= GetLineData(pMLEditData, line);                if (pLineData == NULL)                    break;                edtGetLineInfo (hWnd, pLineData);                if (dwStyle & ES_AUTOWRAP) {                     if (pMLEditData->fit_chars == 0 &&                                     pMLEditData->EndlineDisp >= pMLEditData->wraplines) {                        //FIXME                        continue;                        }                }                else {                     if (pMLEditData->fit_chars == 0 &&                                     pMLEditData->EndlineDisp >= pMLEditData->lines) {                        //FIXME                        continue;                        }                }                dispBuffer = alloca (LEN_MLEDIT_BUFFER+1);                if (dwStyle & ES_PASSWORD)                    memset (dispBuffer, pMLEditData->passwdChar, pLineData->dataEnd);                    memcpy (dispBuffer,                            pLineData->buffer,                        pLineData->dataEnd);                       dispBuffer[pLineData->dataEnd] = '\0';                y = pMLEditData->lineHeight*                                (i - pMLEditData->StartlineDisp)                            + pMLEditData->topMargin;                //fprint (stderr, "textOut-buffer = %s\n", dispBuffer+pLineData->wrapStartPos[wrapline]);                if (dwStyle & ES_AUTOWRAP)                    TextOutLen (hdc,                         pMLEditData->leftMargin - pMLEditData->dispPos,                         y,                        dispBuffer+pMLEditData->pos_chars[pLineData->wrapStartPos[wrapline]],                        pMLEditData->pos_chars[pLineData->wrapStartPos[wrapline+1]]                            -pMLEditData->pos_chars[pLineData->wrapStartPos[wrapline]]);                else                    TextOut(hdc,                         pMLEditData->leftMargin - pMLEditData->dispPos, y,                        dispBuffer);            }            EndPaint (hWnd, hdc);        }        return 0;        case MSG_KEYDOWN:        {            BOOL    bChange = FALSE;            int     i;               int      line, wrapline;            RECT    InvRect;             int     deleted;            PLINEDATA temp = NULL;            char *  tempP = NULL;               pMLEditData =(PMLEDITDATA) GetWindowAdditionalData2(hWnd);            GetClientRect (hWnd, &InvRect);            InvRect.left = pMLEditData->leftMargin - 1;                    switch (LOWORD (wParam)) {                case SCANCODE_ENTER:                {                    if (dwStyle & ES_READONLY) {                        Ping();                        return 0;                    }                       edtPosProc (hWnd);                     if ((pMLEditData->totalLimit >= 0)                             && ((pMLEditData->curtotalLen + 1) > pMLEditData->totalLimit)) {                        Ping ();                        NotifyParent (hWnd, GetDlgCtrlID(hWnd), EN_MAXTEXT);                        return 0;                    }else                        pMLEditData->curtotalLen++;                    if (dwStyle & ES_AUTOWRAP)                    {                        edtGetLineNums (pMLEditData, pMLEditData->editLine, &line, &wrapline);                        pLineData = GetLineData(pMLEditData, line);                    }else                        pLineData = GetLineData(pMLEditData,pMLEditData->editLine);                                        if (dwStyle & ES_AUTOWRAP)                    {                        edtGetLineInfo (hWnd, pLineData);                        if (pMLEditData->veditPos < pMLEditData->fit_chars)                            tempP = pLineData->buffer +                                     pMLEditData->pos_chars[pMLEditData->veditPos];                        temp = pLineData->next;                        pLineData->next = malloc( sizeof(LINEDATA) );                        pLineData->next->previous = pLineData;                        pLineData->next->next = temp;                    

⌨️ 快捷键说明

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