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

📄 ebedit.c

📁 基于minigui开发的一套图形控件系统
💻 C
📖 第 1 页 / 共 4 页
字号:
                        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 + -