📄 ebedit.c
字号:
fontsize = New_GetStrDispWidth(hWnd,&(pEBEditData->buffer[pEBEditData->startPos]),
pEBEditData->caretOff);
}
else
{
fontsize = New_GetStrDispWidth(hWnd,&(pEBEditData->buffer[pEBEditData->startPos]),
pEBEditData->caretOff);
InvRect.left = pEBEditData->leftMargin + fontsize;
//+ pEBEditData->caretOff * fontsize;
InvRect.top = pEBEditData->topMargin;
InvRect.right = rect.right - rect.left;
InvRect.bottom = rect.bottom - rect.top;
}
//pEBEditData->caretOff * fontsize
if (dwStyle & EES_VCENTER)//add by tjb 2005-6-15 当文字居中时,光标也居中
{
POINT oldpos;
GetCaretPos(hWnd, &oldpos);
SetCaretPos (hWnd, fontsize+pEBEditData->leftMargin, oldpos.y);
}
else
SetCaretPos (hWnd, fontsize+pEBEditData->leftMargin, pEBEditData->topMargin);
InvalidateRect (hWnd, &InvRect, TRUE);
}
break;
default:
break;
}
if (bChange)
NotifyParent (hWnd, id, EEN_CHANGE);
return 0;
}
case MSG_CHAR:
{
char charBuffer [2];
int i, chars, scrollStep, inserting;
RECT InvRect;
RECT rect;
int fontsize = GetSysCharWidth();
PLOGFONT pfont = GetWindowFont(hWnd);
if(pfont)
fontsize = GetFontCharWidth(pfont);
if (dwStyle & EES_READONLY)
return 0;
#if 1 //add by liwen 2004-11-24 全角输入时没有测试
if (dwStyle & EES_NUMONLY)
{
if(HIBYTE (wParam) || !isdigit(LOBYTE (wParam)))
return 0;
}
#endif
if (HIBYTE (wParam))
{
charBuffer [0] = LOBYTE (wParam);
charBuffer [1] = HIBYTE (wParam);
chars = 2;
}
else
{
chars = 1;
if ( dwStyle & EES_UPPERCASE)
charBuffer [0] = toupper (LOBYTE (wParam));
else if ( dwStyle & EES_LOWERCASE)
charBuffer [0] = tolower (LOBYTE (wParam));
else
charBuffer [0] = LOBYTE (wParam);
}
if (chars == 1)
{
switch (charBuffer [0])
{
case 0x00: // NULL
case 0x07: // BEL
case 0x08: // BS
case 0x09: // HT
case 0x0A: // LF
case 0x0B: // VT
case 0x0C: // FF
case 0x0D: // CR
case 0x1B: // Escape
return 0;
}
}
if (pEBEditData->status & EEST_REPLACE)
{
if (pEBEditData->dataEnd == pEBEditData->editPos)
inserting = chars;
else if (edtIsACCharAtPosition (pEBEditData->buffer,
pEBEditData->dataEnd, pEBEditData->editPos))
{
if (chars == 2)
inserting = 0;
else
inserting = -1;
}
else
{
if (chars == 2)
inserting = 1;
else
inserting = 0;
}
}
else
inserting = chars;
// check space
if (pEBEditData->dataEnd + inserting > pEBEditData->bufferLen) {
NotifyParent (hWnd, id, EEN_MAXTEXT);
return 0;
}
else if ((pEBEditData->hardLimit >= 0) &&
((pEBEditData->dataEnd + inserting) > pEBEditData->hardLimit))
{
NotifyParent (hWnd, id, EEN_MAXTEXT);
return 0;
}
if (inserting == -1)
{
for (i = pEBEditData->editPos; i < pEBEditData->dataEnd-1; i++)
pEBEditData->buffer [i] = pEBEditData->buffer [i + 1];
}
else if (inserting > 0)
{
for (i = pEBEditData->dataEnd + inserting - 1;
i > pEBEditData->editPos + inserting - 1;
i--)
pEBEditData->buffer[i] = pEBEditData->buffer[i - inserting];
}
for (i = 0; i < chars; i++)
pEBEditData->buffer[pEBEditData->editPos + i] = charBuffer[i];
pEBEditData->editPos += chars;
pEBEditData->caretOff += chars;
pEBEditData->dataEnd += inserting;
GetClientRect(hWnd,&rect);
fontsize = New_GetStrDispWidth(hWnd,&(pEBEditData->buffer[pEBEditData->startPos]),
pEBEditData->caretOff);
//pEBEditData->caretOff * fontsize
if (fontsize > edtGetOutWidth (hWnd,pEBEditData))
{
if (edtIsACCharAtPosition (pEBEditData->buffer,
pEBEditData->dataEnd,
pEBEditData->startPos))
scrollStep = 2;
else
{
if (chars == 2)
{
if (edtIsACCharAtPosition (pEBEditData->buffer,
pEBEditData->dataEnd, pEBEditData->startPos + 1))
scrollStep = 3;
else
scrollStep = 2;
}
else
scrollStep = 1;
}
pEBEditData->startPos += scrollStep;
pEBEditData->caretOff = pEBEditData->editPos - pEBEditData->startPos;
InvRect.left = pEBEditData->leftMargin;
InvRect.top = pEBEditData->topMargin;
InvRect.right = rect.right - rect.left;
InvRect.bottom = rect.bottom - rect.top;
}
else
{
fontsize = New_GetStrDispWidth(hWnd,&(pEBEditData->buffer[pEBEditData->startPos]),
pEBEditData->caretOff-chars);
InvRect.left = pEBEditData->leftMargin + fontsize;
//+ (pEBEditData->caretOff - chars)
// * fontsize;
InvRect.left = pEBEditData->leftMargin;
InvRect.top = pEBEditData->topMargin;
InvRect.right = rect.right - rect.left;
InvRect.bottom = rect.bottom - rect.top;
}
fontsize = New_GetStrDispWidth(hWnd,&(pEBEditData->buffer[pEBEditData->startPos]),
pEBEditData->caretOff);
if (dwStyle & EES_VCENTER)//add by tjb 2005-6-15 当文字居中时,光标也居中
{
POINT oldpos;
GetCaretPos(hWnd, &oldpos);
SetCaretPos (hWnd, fontsize+pEBEditData->leftMargin, oldpos.y);
}
else
SetCaretPos (hWnd, fontsize+pEBEditData->leftMargin, pEBEditData->topMargin); //pEBEditData->caretOff * fontsize
InvalidateRect (hWnd, &InvRect, TRUE);
NotifyParent (hWnd, id, EEN_CHANGE);
}
return 0;
case MSG_GETTEXTLENGTH:
return pEBEditData->dataEnd;
case MSG_GETTEXT:
{
char* buffer = (char*)lParam;
int len;
len = MIN ((int)wParam, pEBEditData->dataEnd);
memcpy (buffer, pEBEditData->buffer, len);
buffer [len] = '\0';
return len;
}
case MSG_SETTEXT:
{
int len;
len = strlen ((char*)lParam);
len = MIN (len, pEBEditData->bufferLen);
if (pEBEditData->hardLimit >= 0)
len = MIN (len, pEBEditData->hardLimit);
pEBEditData->dataEnd = len;
memcpy (pEBEditData->buffer, (char*)lParam, len);
pEBEditData->editPos = 0;
pEBEditData->caretOff = 0;
pEBEditData->startPos = 0;
if (pEBEditData->status & EEST_FOCUSED)
{
if (dwStyle & EES_VCENTER)//add by tjb 2005-6-15 当文字居中时,光标也居中
{
POINT oldpos;
GetCaretPos(hWnd, &oldpos);
SetCaretPos (hWnd, pEBEditData->leftMargin, oldpos.y);
}
else
SetCaretPos (hWnd, pEBEditData->leftMargin, pEBEditData->topMargin);
}
InvalidateRect (hWnd, NULL, TRUE);
return 0;
}
case MSG_LBUTTONDBLCLK:
NotifyParent (hWnd, id, EEN_DBLCLK);
break;
case MSG_LBUTTONDOWN:
{
int newOff;
RECT rect;
int fontsize = GetSysCharWidth();
PLOGFONT pfont = GetWindowFont(hWnd);
if(pfont)
fontsize = GetFontCharWidth(pfont);
newOff = edtGetOffset (hWnd,pEBEditData, LOSWORD (lParam));
if (newOff != pEBEditData->caretOff)
{
pEBEditData->editPos += newOff - pEBEditData->caretOff;
pEBEditData->caretOff = newOff;
fontsize = New_GetStrDispWidth(hWnd,&(pEBEditData->buffer[pEBEditData->startPos]),
pEBEditData->caretOff);
if (dwStyle & EES_VCENTER)//add by tjb 2005-6-15 当文字居中时,光标也居中
{
POINT oldpos;
GetCaretPos(hWnd, &oldpos);
SetCaretPos (hWnd, fontsize+pEBEditData->leftMargin, oldpos.y);
}
else
SetCaretPos (hWnd, fontsize+pEBEditData->leftMargin, pEBEditData->topMargin); //pEBEditData->caretOff * fontsize
}
NotifyParent (hWnd, id, EEN_CLICKED);
}
break;
case MSG_LBUTTONUP:
break;
case MSG_MOUSEMOVE:
break;
case MSG_GETDLGCODE:
return DLGC_WANTCHARS | DLGC_HASSETSEL | DLGC_WANTARROWS;
case EEM_SETREADONLY:
/*if (wParam)
pCtrl->dwStyle |= ES_READONLY;
else
pCtrl->dwStyle &= ~ES_READONLY;
*/
return 0;
case EEM_SETPASSWORDCHAR:
if (pEBEditData->passwdChar != (int)wParam)
{
if (dwStyle & EES_PASSWORD)
{
pEBEditData->passwdChar = (int)wParam;
InvalidateRect (hWnd, NULL, TRUE);
}
}
return 0;
case EEM_GETPASSWORDCHAR:
{
int* passwdchar;
passwdchar = (int*) lParam;
*passwdchar = pEBEditData->passwdChar;
}
return 0;
case EEM_LIMITTEXT:
{
int newLimit = (int)wParam;
if (newLimit >= 0)
{
if (pEBEditData->bufferLen < newLimit)
pEBEditData->hardLimit = -1;
else
pEBEditData->hardLimit = newLimit;
}
}
return 0;
//add by tjb 2004-3-19
//set text color
case EEM_SETTEXTCORLOR:
{
int oldcolor = pEBEditData->textcolor;
if (wParam != 0)
pEBEditData->textcolor = wParam;
InvalidateRect(hWnd, NULL, TRUE);
return oldcolor;
}
case EEM_GETTEXTCORLOR:
return pEBEditData->textcolor;
case EEM_SETBORDERCOL://2004-4-7
{
DWORD oldcolor = pEBEditData->bordercolor;
if (lParam != PIXEL_invalid)
pEBEditData->bordercolor = lParam;
return oldcolor;
}
//end add
default:
break;
}
return DefaultControlProc (hWnd, message, wParam, lParam);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -