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

📄 medit.c

📁 TN-kernel内核针对LPC系列ARM7处理器和S3C44B0X重新定制好的源代码包。内含Nano-X GUI。
💻 C
📖 第 1 页 / 共 5 页
字号:
                                        {
                                                pMLEditData->dispPos = 0;
                                            InvalidateRect (hWnd, NULL, FALSE);
                                        }
                               return 0;
                    }
                case VK_END: /* SCANCODE_END: */
                {
                    int newStartPos;
                    pLineData = GetLineData(pMLEditData,pMLEditData->editLine);
                    if (pMLEditData->editPos == pLineData->dataEnd)
                        return 0;
                    newStartPos = edtGetStartDispPosAtEnd (hWnd, pLineData);

                    pMLEditData->editPos = pLineData->dataEnd;
                    pMLEditData->caretPos = pMLEditData->editPos - newStartPos;

                    SetCaretPos (pMLEditData->caretPos * GetSysCharWidth (hWnd)
                            + pMLEditData->leftMargin,
                                                (pMLEditData->editLine-pMLEditData->StartlineDisp) * GetSysCharHeight(hWnd)
                                + pMLEditData->topMargin);

                    if (pMLEditData->dispPos != newStartPos)
                        InvalidateRect (hWnd, NULL, FALSE);
                                        pMLEditData->dispPos = newStartPos;
                }
                return 0;

                case VK_LEFT: /* SCANCODE_CURSORBLOCKLEFT: */
                {
                    BOOL bScroll = FALSE;
                    int  scrollStep,newStartPos;
                                        PLINEDATA temp;
                                        pLineData = GetLineData(pMLEditData,pMLEditData->editLine);
                    if (pMLEditData->editPos == 0 )
                                        {
                                                temp = pLineData->previous;
                                                if(temp && pMLEditData->editLine > pMLEditData->StartlineDisp)
                                                {
                                                        pMLEditData->editLine --;
                                                        pMLEditData->editPos = temp->dataEnd;
                                    newStartPos = edtGetStartDispPosAtEnd (hWnd, temp);
                                    pMLEditData->caretPos = pMLEditData->editPos - newStartPos;
                                    if (pMLEditData->dispPos != newStartPos)
                                                        {
                                                                pMLEditData->dispPos = newStartPos;
                                                                bScroll = TRUE;
                                                        }
                                                }
                                                else
                                return 0;
                                        }
                                        else
                    {        if (edtIsACCharBeforePosition (pLineData->buffer,
                                    pLineData->dataEnd,
                                    pMLEditData->editPos)) {
                                scrollStep = 2;
                                pMLEditData->editPos -= 2;
                            }
                            else {
                                        scrollStep = 1;
                                pMLEditData->editPos --;
                            }

                            pMLEditData->caretPos -= scrollStep;
                            if (pMLEditData->caretPos == 0
                                    && pMLEditData->editPos != 0) {

                                bScroll = TRUE;

                                if (edtIsACCharBeforePosition (pLineData->buffer,
                                    pLineData->dataEnd,
                                        pMLEditData->editPos)) {
                                           pMLEditData->dispPos -= 2;
                                    pMLEditData->caretPos = 2;
                                }
                                else {
                                                                pMLEditData->dispPos--;
                                    pMLEditData->caretPos = 1;
                                }
                            }
                            else if (pMLEditData->caretPos < 0) {
                                                        pMLEditData->dispPos = 0;
                                pMLEditData->caretPos = 0;
                            }
                    }
                    SetCaretPos (pMLEditData->caretPos * GetSysCharWidth (hWnd)
                            + pMLEditData->leftMargin,
                                                (pMLEditData->editLine - pMLEditData->StartlineDisp) * GetSysCharHeight(hWnd)
                                + pMLEditData->topMargin);

                    if (bScroll)
                        InvalidateRect (hWnd, NULL, FALSE);
                }
                return 0;

                case VK_RIGHT: /* SCANCODE_CURSORBLOCKRIGHT: */
                {
                    BOOL bScroll = FALSE;
                    int  scrollStep, moveStep;
                                        PLINEDATA temp;

                                        pLineData = GetLineData(pMLEditData,pMLEditData->editLine);
                    if (pMLEditData->editPos == pLineData->dataEnd)
                                        {
                                                temp = pLineData->next;
                                                if(temp)
                                                {
                                                        pMLEditData->editLine++;
                                                        pMLEditData->editPos  = 0;
                                                        pMLEditData->caretPos = 0;
                                                        if(pMLEditData->dispPos !=0)
                                                        {
                                                                pMLEditData->dispPos  = 0;
                                                                bScroll = TRUE;
                                                        }
                                                }
                                                else
                                return 0;
                                        }
                                        else
                    {
                                                if (edtIsACCharAtPosition (pLineData->buffer,
                                        pLineData->dataEnd,
                                        pMLEditData->dispPos)) {
                                  if (edtIsACCharAtPosition (pLineData->buffer,
                                    pLineData->dataEnd,
                                    pMLEditData->editPos)) {
                                      scrollStep = 2;
                                    moveStep = 2;
                                    pMLEditData->editPos  += 2;
                                }
                                else {
                                    scrollStep = 2;
                                    moveStep = 1;
                                    pMLEditData->editPos ++;
                                }
                            }
                            else {
                                if (edtIsACCharAtPosition (pLineData->buffer,
                                            pLineData->dataEnd,
                                            pMLEditData->editPos)) {

                                    if (edtIsACCharAtPosition (pLineData->buffer,
                                            pLineData->dataEnd,
                                            pMLEditData->dispPos + 1))
                                        scrollStep = 3;
                                    else
                                        scrollStep = 2;

                                    moveStep = 2;
                                    pMLEditData->editPos += 2;
                                }
                                else {
                                    scrollStep = 1;
                                    moveStep = 1;
                                    pMLEditData->editPos ++;
                                }
                            }

                            pMLEditData->caretPos += moveStep;
                            if (pMLEditData->caretPos * GetSysCharWidth (hWnd)
                                    > edtGetOutWidth (hWnd)) {
                                bScroll = TRUE;
                                pMLEditData->dispPos += scrollStep;
                                pMLEditData->caretPos =
                                    pMLEditData->editPos - pMLEditData->dispPos;
                            }
                                        }
                    SetCaretPos (pMLEditData->caretPos * GetSysCharWidth (hWnd)
                            + pMLEditData->leftMargin,
                        (pMLEditData->editLine - pMLEditData->StartlineDisp) * GetSysCharHeight (hWnd)
                                + pMLEditData->topMargin);

                    if (bScroll)
                        InvalidateRect (hWnd, NULL, FALSE);
                }
                return 0;

                case VK_UP: /* SCANCODE_CURSORBLOCKUP: */
                {
                    BOOL bScroll = FALSE;
                    int  newStartPos;
                                        PLINEDATA temp;
                                        pLineData = GetLineData(pMLEditData,pMLEditData->editLine);
                                        temp = pLineData->previous;
                                        if(pMLEditData->editLine == 0)
                                                return 0;
                                        else if (pMLEditData->editLine == pMLEditData->StartlineDisp)
                                        {
                                                bScroll = TRUE;
                                                pMLEditData->StartlineDisp--;
                                                pMLEditData->EndlineDisp--;
                                        }
                                        pMLEditData->editLine--;

                                        if( pMLEditData->editPos >= temp->dataEnd )
                                        {
                                                pMLEditData->editPos = temp->dataEnd;
                                                pMLEditData->dispPos = 0;
                                   newStartPos = edtGetStartDispPosAtEnd (hWnd, temp);
                                       pMLEditData->dispPos =  newStartPos;
                                                pMLEditData->caretPos = pMLEditData->editPos - newStartPos;
                                                bScroll = TRUE;
                                        }
                                        else
                                        {
                                                  newStartPos = edtGetOffset(hWnd, pMLEditData,temp,
                                                   pMLEditData->caretPos * GetSysCharWidth (hWnd)
                                               + pMLEditData->leftMargin);
                                                if(!edtIsACCharFromBegin(temp->buffer,temp->dataEnd,
                                                                pMLEditData->dispPos))
                                                {
                                                        bScroll = TRUE;
                                                        pMLEditData->dispPos--;
                                                   newStartPos = edtGetOffset(hWnd, pMLEditData,temp,
                                                      pMLEditData->caretPos * GetSysCharWidth (hWnd)
                                                  + pMLEditData->leftMargin+GetSysCharWidth(hWnd)/2);
                                                }
                                       pMLEditData->editPos = newStartPos + pMLEditData->dispPos;
                                       pMLEditData->caretPos = newStartPos;
                                        }
                    SetCaretPos (pMLEditData->caretPos * GetSysCharWidth (hWnd)
                            + pMLEditData->leftMargin,
                                            (pMLEditData->editLine - pMLEditData->StartlineDisp) * GetSysCharHeight(hWnd)
                            + pMLEditData->topMargin);
                                        if(bScroll)
                                                InvalidateRect(hWnd,NULL,FALSE);
                                }
                                break;
                case VK_DOWN: /* SCANCODE_CURSORBLOCKDOWN: */
                {
                    BOOL bScroll = FALSE;
                    int  newStartPos;
                                        PLINEDATA temp;
                                        pLineData = GetLineData(pMLEditData,pMLEditData->editLine);
                                        temp = pLineData->next;
                                        if(pMLEditData->editLine == pMLEditData->lines-1)
                                                return 0;
                                        else if (pMLEditData->editLine == pMLEditData->EndlineDisp)
                                        {
                                                bScroll = TRUE;
                                                pMLEditData->StartlineDisp++;
                                                pMLEditData->EndlineDisp++;
                                        }
                                        pMLEditData->editLine++;

                                        if( pMLEditData->editPos >= temp->dataEnd )
                                        {
                                                pMLEditData->editPos = temp->dataEnd;
                                                pMLEditData->dispPos = 0;
                                   newStartPos = edtGetStartDispPosAtEnd (hWnd, temp);
                                       pMLEditData->dispPos =  newStartPos;
                                                pMLEditData->caretPos = pMLEditData->editPos - newStartPos;
                                                bScroll = TRUE;
                                        }
                                        else
                                        {
                                                  newStartPos = edtGetOffset(hWnd, pMLEditData,temp,
                                                   pMLEditData->caretPos * GetSysCharWidth (hWnd)
                                               + pMLEditData->leftMargin);
                                                if(!edtIsACCharFromBegin(temp->buffer,temp->dataEnd,
                                                                pMLEditData->dispPos))
                                                {
                                                        bScroll = TRUE;
                                                        pMLEditData->dispPos--;
                                                      newStartPos = edtGetOffset(hWnd, pMLEditData,temp,
                                                       pMLEditData->caretPos * GetSysCharWidth (hWnd)
                                                   + pMLEditData->leftMargin+GetSysCharWidth(hWnd)/2);
                                                }
                                       pMLEditData->editPos = newStartPos + pMLEditData->dispPos;
                                       pMLEditData->caretPos = newStartPos;
                                        }
                    SetCaretPos (pMLEditData->caretPos * GetSysCharWidth (hWnd)
                            + pMLEditData->leftMargin,
                                            (pMLEditData->editLine - pMLEditData->StartlineDisp) * GetSysCharHeight(hWnd)
                            + pMLEditData->topMargin);
                                        if(bScroll)
                                                InvalidateRect(hWnd,NULL,FALSE);

                                }
                                break;
                case VK_INSERT: /* SCANCODE_INSERT: */
                                        dw = GetWindowAdditionalData(hWnd);
                    dw ^= EST_REPLACE;
                                        SetWindowAdditionalData(hWnd,dw);
                break;

                case VK_DELETE: /* SCANCODE_REMOVE: */
                                {
                                        PLINEDATA temp;
                                        int leftLen;
                                        pLineData = GetLineData(pMLEditData,pMLEditData->editLine);
                    if ((GetWindowAdditionalData(hWnd) & EST_READONLY) ){
#if 0        /* fix: no ping() */
                        ping ();
#endif
                        return 0;
                    }
                           temp = pLineData->next;
                                        if (pLineData->dataEnd == pMLEditData->editPos && temp)
                                        {
                                                if(pLineData->dataEnd + temp->dataEnd <= LEN_MLEDIT_BUFFER)
                                                {
                                                        memcpy(pLineData->buffer+pLineData->dataEnd,temp->buffer,temp->dataEnd);

⌨️ 快捷键说明

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