📄 medit.c
字号:
- edtGetOutWidth (hWnd)/4) == -1)
pMLEditData->vdispPos = 0;
else {
pMLEditData->vdispPos = edtGetNewvPos (hWnd,
GetLineData(pMLEditData,pMLEditData->editLine),
pMLEditData->dx_chars[pMLEditData->veditPos]
- edtGetOutWidth (hWnd)/4);
}
bScroll = TRUE;
}else {
pMLEditData->veditPos--;
}
}
pMLEditData->dispPos = pMLEditData->dx_chars[pMLEditData->vdispPos];
edtSetCaretPos (hWnd);
//FIXME
if (bScroll) {
edtSetScrollInfo (hWnd, pMLEditData, TRUE);
InvalidateRect (hWnd, NULL, TRUE);
}
if (pMLEditData->bSCROLL)
InvalidateRect (hWnd, NULL, TRUE);
return 0;
}
static int edtKeyCursorblockRight (HWND hWnd)
{
DWORD dwStyle = GetWindowStyle(hWnd);
PMLEDITDATA pMLEditData =(PMLEDITDATA) GetWindowAdditionalData2(hWnd);
BOOL bScroll = FALSE;
int line, wrapline;
PLINEDATA temp;
PLINEDATA pLineData;
if (dwStyle & ES_AUTOWRAP)
{
edtGetLineNums (pMLEditData, pMLEditData->editLine, &line, &wrapline);
pLineData = GetLineData(pMLEditData, line);
}
else
pLineData = GetLineData(pMLEditData,pMLEditData->editLine);
if (dwStyle & ES_AUTOWRAP)
{
if (!(temp = pLineData->next)
&& pMLEditData->veditPos == pMLEditData->fit_chars) return 0;
edtGetLineInfo (hWnd, pLineData);
if (pMLEditData->veditPos == pMLEditData->fit_chars)
{
if (pMLEditData->editLine == pMLEditData->EndlineDisp) {
bScroll = TRUE;
pMLEditData->StartlineDisp++;
pMLEditData->EndlineDisp++;
}
edtGetLineInfo (hWnd, temp);
pMLEditData->editLine++;
pMLEditData->veditPos = 0;
}else if (pMLEditData->veditPos == pLineData->wrapStartPos[wrapline+1]-1)
{
if (pMLEditData->veditPos <
pLineData->wrapStartPos[pLineData->nwrapline]-1)
{
if (pMLEditData->editLine == pMLEditData->EndlineDisp) {
bScroll = TRUE;
pMLEditData->StartlineDisp++;
pMLEditData->EndlineDisp++;
}
pMLEditData->editLine++;
}
pMLEditData->veditPos++;
}
else
pMLEditData->veditPos++;
pMLEditData->linesDisp = pMLEditData->EndlineDisp
- pMLEditData->StartlineDisp + 1;
edtSetCaretPos (hWnd);
if (bScroll)
{
edtSetScrollInfo (hWnd, pMLEditData, TRUE);
InvalidateRect(hWnd,NULL,TRUE);
}
if (pMLEditData->bSCROLL)
InvalidateRect (hWnd, NULL, TRUE);
return 0;
}
if (pMLEditData->veditPos == pMLEditData->fit_chars)
{
temp = pLineData->next;
if (temp && pMLEditData->editLine == pMLEditData->EndlineDisp) {
bScroll = TRUE;
pMLEditData->StartlineDisp++;
pMLEditData->EndlineDisp++;
}
if(temp)
{
pMLEditData->editLine++;
edtGetLineInfo (hWnd, GetLineData (pMLEditData, pMLEditData->editLine));
pMLEditData->veditPos = 0;
if(pMLEditData->vdispPos !=0)
{
pMLEditData->vdispPos = 0;
bScroll = TRUE;
}
} else
return 0;
} else {
// caret is at the end of the display rect
if ((pMLEditData->dx_chars[pMLEditData->veditPos]
- pMLEditData->dx_chars[pMLEditData->vdispPos]
< edtGetOutWidth (hWnd))
&& (pMLEditData->dx_chars[pMLEditData->veditPos + 1]
- pMLEditData->dx_chars[pMLEditData->vdispPos]
> edtGetOutWidth (hWnd))) {
bScroll = TRUE;
pMLEditData->veditPos++;
if (edtGetNewvPos (hWnd,
GetLineData(pMLEditData,pMLEditData->editLine),
pMLEditData->dx_chars[pMLEditData->veditPos]
- edtGetOutWidth (hWnd)/4) == -1)
pMLEditData->vdispPos = 0;
else
pMLEditData->vdispPos = edtGetNewvPos (hWnd,
GetLineData(pMLEditData,pMLEditData->editLine),
pMLEditData->dx_chars[pMLEditData->veditPos]
- edtGetOutWidth (hWnd)/4);
if (pMLEditData->dx_chars[pMLEditData->vdispPos]
+ edtGetOutWidth (hWnd)
> pMLEditData->sz.cx)
pMLEditData->vdispPos =
edtGetStartDispPosAtEnd (hWnd, pLineData);
}else
pMLEditData->veditPos++;
}
pMLEditData->dispPos = pMLEditData->dx_chars[pMLEditData->vdispPos];
edtSetCaretPos (hWnd);
//FIXME
if (bScroll) {
edtSetScrollInfo (hWnd, pMLEditData, TRUE);
InvalidateRect (hWnd, NULL, TRUE);
}
if (pMLEditData->bSCROLL)
InvalidateRect (hWnd, NULL, TRUE);
return 0;
}
static int edtKeyCursorblockUp (HWND hWnd)
{
DWORD dwStyle = GetWindowStyle(hWnd);
PMLEDITDATA pMLEditData =(PMLEDITDATA) GetWindowAdditionalData2(hWnd);
BOOL bScroll = FALSE;
int newStartPos, olddispPos, oldeditPos, line, wrapline;
PLINEDATA temp;
PLINEDATA pLineData;
edtPosProc (hWnd);
olddispPos = pMLEditData->dx_chars[pMLEditData->vdispPos];
oldeditPos = pMLEditData->dx_chars[pMLEditData->veditPos];
if (dwStyle & ES_AUTOWRAP)
{
edtGetLineNums (pMLEditData, pMLEditData->editLine, &line, &wrapline);
pLineData = GetLineData(pMLEditData, line);
}
else
pLineData = GetLineData(pMLEditData,pMLEditData->editLine);
temp = pLineData->previous;
if(pMLEditData->editLine == 0) return 0;
if (pMLEditData->editLine == pMLEditData->StartlineDisp)
{
bScroll = TRUE;
pMLEditData->StartlineDisp--;
if (dwStyle & ES_AUTOWRAP)
pMLEditData->EndlineDisp = MIN (pMLEditData->wraplines - 1,
pMLEditData->StartlineDisp +
pMLEditData->MaxlinesDisp - 1);
else
pMLEditData->EndlineDisp--;
}
pMLEditData->editLine--;
if (dwStyle & ES_AUTOWRAP)
{
oldeditPos = pMLEditData->dx_chars[pMLEditData->veditPos]
- pMLEditData->dx_chars[pLineData->wrapStartPos[wrapline]];
edtGetCaretValid (hWnd, pMLEditData->editLine,
olddispPos, oldeditPos);
pMLEditData->linesDisp = pMLEditData->EndlineDisp
- pMLEditData->StartlineDisp + 1;
edtSetCaretPos (hWnd);
//FIXME
if (bScroll) {
edtSetScrollInfo (hWnd, pMLEditData, TRUE);
InvalidateRect(hWnd,NULL,TRUE);
}
if (pMLEditData->bSCROLL)
InvalidateRect (hWnd, NULL, TRUE);
return 0;
}
edtGetLineInfo (hWnd, temp);
if( olddispPos > pMLEditData->sz.cx )
{
pMLEditData->veditPos = pMLEditData->fit_chars;
newStartPos = edtGetStartDispPosAtEnd (hWnd, temp);
pMLEditData->vdispPos = newStartPos;
bScroll = TRUE;
}
else
{
pMLEditData->veditPos = edtGetNewvPos (hWnd, temp, oldeditPos);
if (pMLEditData->veditPos == -2)
pMLEditData->veditPos = pMLEditData->fit_chars;
pMLEditData->vdispPos = edtGetNewvPos (hWnd, temp, olddispPos);
if (olddispPos != pMLEditData->dx_chars[pMLEditData->vdispPos])
bScroll = TRUE;
}
pMLEditData->dispPos = pMLEditData->dx_chars[pMLEditData->vdispPos];
SetCaretPos (hWnd,
pMLEditData->dx_chars[pMLEditData->veditPos]
- pMLEditData->dx_chars[pMLEditData->vdispPos]
+ pMLEditData->leftMargin,
(pMLEditData->editLine - pMLEditData->StartlineDisp) * pMLEditData->lineHeight
+ pMLEditData->topMargin);
//FIXME
if (bScroll) {
edtSetScrollInfo (hWnd, pMLEditData, TRUE);
InvalidateRect(hWnd,NULL,TRUE);
}
if (pMLEditData->bSCROLL)
InvalidateRect (hWnd, NULL, TRUE);
return 0;
}
static int edtKeyCursorblockDown (HWND hWnd)
{
DWORD dwStyle = GetWindowStyle(hWnd);
PMLEDITDATA pMLEditData =(PMLEDITDATA) GetWindowAdditionalData2(hWnd);
BOOL bScroll = FALSE;
int newStartPos, olddispPos, oldeditPos, line, wrapline;
PLINEDATA temp;
PLINEDATA pLineData;
edtPosProc (hWnd);
oldeditPos = pMLEditData->dx_chars[pMLEditData->veditPos];
olddispPos = pMLEditData->dx_chars[pMLEditData->vdispPos];
if (dwStyle & ES_AUTOWRAP)
{
edtGetLineNums (pMLEditData, pMLEditData->editLine, &line, &wrapline);
pLineData = GetLineData(pMLEditData, line);
}
else
pLineData = GetLineData(pMLEditData,pMLEditData->editLine);
temp = pLineData->next;
if (dwStyle & ES_AUTOWRAP) {
if(pMLEditData->editLine == pMLEditData->wraplines-1) return 0;
}else {
if(pMLEditData->editLine == pMLEditData->lines-1) return 0;
}
if (pMLEditData->editLine == pMLEditData->EndlineDisp)
{
bScroll = TRUE;
pMLEditData->StartlineDisp++;
pMLEditData->EndlineDisp++;
}
pMLEditData->editLine++;
if (dwStyle & ES_AUTOWRAP)
{
oldeditPos = pMLEditData->dx_chars[pMLEditData->veditPos]
- pMLEditData->dx_chars[pLineData->wrapStartPos[wrapline]];
edtGetCaretValid (hWnd, pMLEditData->editLine,
olddispPos, oldeditPos);
edtSetCaretPos (hWnd);
//FIXME
if (bScroll) {
edtSetScrollInfo (hWnd, pMLEditData, TRUE);
InvalidateRect(hWnd,NULL,TRUE);
}
if (pMLEditData->bSCROLL)
InvalidateRect (hWnd, NULL, TRUE);
return 0;
}
edtGetLineInfo (hWnd, temp);
if( olddispPos > pMLEditData->sz.cx )
{
pMLEditData->veditPos = pMLEditData->fit_chars;
newStartPos = edtGetStartDispPosAtEnd (hWnd, temp);
pMLEditData->vdispPos = newStartPos;
bScroll = TRUE;
}
else
{
pMLEditData->veditPos = edtGetNewvPos (hWnd, temp, oldeditPos);
if (pMLEditData->veditPos == -2)
pMLEditData->veditPos = pMLEditData->fit_chars;
pMLEditData->vdispPos = edtGetNewvPos (hWnd, temp, olddispPos);
if (olddispPos != pMLEditData->dx_chars[pMLEditData->vdispPos])
bScroll = TRUE;
}
pMLEditData->dispPos = pMLEditData->dx_chars[pMLEditData->vdispPos];
edtSetCaretPos (hWnd);
//FIXME
if (bScroll) {
edtSetScrollInfo (hWnd, pMLEditData, TRUE);
InvalidateRect(hWnd,NULL,TRUE);
}
if (pMLEditData->bSCROLL)
InvalidateRect (hWnd, NULL, TRUE);
return 0;
}
static int edtKeyRemove (HWND hWnd)
{
DWORD dwStyle = GetWindowStyle(hWnd);
PMLEDITDATA pMLEditData =(PMLEDITDATA) GetWindowAdditionalData2(hWnd);
PLINEDATA pLineData;
PLINEDATA temp;
int leftLen;
int line, wrapline;
int oldnwrapline;
BOOL bScroll=FALSE;
RECT InvRect;
int deleted, i;
GetClientRect (hWnd, &InvRect);
InvRect.left = pMLEditData->leftMargin - 1;
if (dwStyle & ES_READONLY) {
Ping();
return 0;
}
edtPosProc (hWnd);
if (dwStyle & ES_AUTOWRAP)
{
edtGetLineNums (pMLEditData, pMLEditData->editLine, &line, &wrapline);
pLineData = GetLineData(pMLEditData, line);
} else
pLineData = GetLineData(pMLEditData, pMLEditData->editLine);
edtGetLineInfo (hWnd,pLineData);
if (dwStyle & ES_AUTOWRAP)
{
oldnwrapline = pLineData->nwrapline;
InvRect.top = (pMLEditData->editLine - pMLEditData->StartlineDisp)
* pMLEditData->lineHeight
+ pMLEditData->topMargin;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -