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

📄 ebedit.c

📁 基于minigui开发的一套图形控件系统
💻 C
📖 第 1 页 / 共 4 页
字号:
			SetPenColor(hdc, pEBEditData->bordercolor);				
			MoveTo(hdc, rect.left, rect.top + 1);
			LineTo(hdc, rect.right - 1, rect.top +1);
			LineTo(hdc, rect.right - 1, rect.bottom - 1);

			MoveTo(hdc, rect.left, rect.top + 1);
			LineTo(hdc, rect.left, rect.bottom - 1);
			LineTo(hdc, rect.right - 1, rect.bottom - 1);
		}
	}
	else if ((dwStyle & EES_STYLESMASK) == EES_USEUNDERLINE)
	{
		RECT		rect;

		GetClientRect(hWnd, &rect);
		if (pEBEditData->bordercolor != PIXEL_invalid)
		{		
			SetPenColor(hdc, pEBEditData->bordercolor);
			MoveTo(hdc, rect.left, rect.bottom-1);
			LineTo(hdc, rect.right, rect.bottom-1);
		}
	}
	
    if (fGetDC)
		ReleaseDC (hdc);
	
}

static int EBEditCtrlProc (HWND hWnd, int message, WPARAM wParam, LPARAM lParam)
{   
    DWORD       dwStyle= GetWindowStyle (hWnd);
    const char* spCaption;
    PEBEDITDATA2 pEBEditData =(PEBEDITDATA2)GetWindowAdditionalData2 (hWnd);
    int id = GetDlgCtrlID (hWnd);  

    switch (message)
    {
        case MSG_CREATE:
        {

			BITMAP	bmp;
			HDC		hdc;
		
            int fheight = GetSysCharHeight();
	    	PLOGFONT pfont = GetSystemFont (SYSLOGFONT_WCHAR_DEF);
	    	if(pfont)
	    		fheight = pfont->size;
	    	
            if (!(pEBEditData = (PEBEDITDATA2)malloc (sizeof (EBEDITDATA2)))) {
			
                fprintf (stderr, "EDIT: malloc error!\n");
                return -1;
            }
#if 0			
			hdc = GetClientDC(hWnd);
			
			if ( LoadBitmap(hdc , &bmp, "res/mycaret.gif")<0 )
			{
				printf("___Err: LoadBitmap failed!\n");
				break;
			}
			printf("____________debug width=%d,height=%d!\n",bmp.bmWidth, bmp.bmHeight);
			
			if( !CreateCaret(hWnd, &bmp, bmp.bmWidth, bmp.bmHeight))
			{
				printf("___Err: CreateCaret failed!\n");
				break;
			}
			ReleaseDC(hdc);
			ChangeCaretSize(hWnd,2,10);
#else
            if (!CreateCaret (hWnd, NULL, 5, 36))
            {
                fprintf (stderr, "EDIT: Create Caret error!\n");
                free (pEBEditData);
                return -1;
            }
            ChangeCaretSize(hWnd,1,fheight+2);
			
			if (dwStyle & EES_VCENTER)//add by tjb 2005-6-15 当文字居中时,光标也居中
			{
				RECT rc;
				GetWindowRect(hWnd, &rc);
				SetCaretPos (hWnd, pEBEditData->leftMargin, (RECTH(rc)-fheight)/2-1);;
			}
#endif            
            pEBEditData->status         = 0;
            pEBEditData->bufferLen      = LEN_EBEDIT_BUFFER;
            pEBEditData->editPos        = 0;
            pEBEditData->caretOff       = 0;
            pEBEditData->startPos       = 0;
            
            pEBEditData->selStart       = 0;
            pEBEditData->selEnd         = 0;
            pEBEditData->passwdChar     = '*';
            pEBEditData->leftMargin     = MARGIN_EDIT_LEFT;
            pEBEditData->topMargin      = MARGIN_EDIT_TOP;
            pEBEditData->rightMargin    = MARGIN_EDIT_RIGHT;
            pEBEditData->bottomMargin   = MARGIN_EDIT_BOTTOM;
            pEBEditData->textcolor = PIXEL_black;
			pEBEditData->bordercolor = PIXEL_lightgray;		//默认是没有边框或下划线的

            pEBEditData->hardLimit      = -1;
            pEBEditData->data = GetWindowAdditionalData (hWnd);
            spCaption = GetWindowCaption (hWnd);
            pEBEditData->dataEnd        = strlen (spCaption);
                       
            SetWindowFont(hWnd,pfont);
			
            if(spCaption)
            {       
            	int fontsize = GetSysCharWidth();  
	            memcpy (pEBEditData->buffer,  spCaption, 
	                    MIN (LEN_EBEDIT_BUFFER, pEBEditData->dataEnd));
	            
	            
	            pEBEditData->editPos = strlen(spCaption);
	            pEBEditData->caretOff = pEBEditData->editPos;
	                
	            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);
				
	    	}
	    	SetWindowAdditionalData2 (hWnd, (DWORD)pEBEditData);
		}
        break;
		case EEM_SETUSERCARET:
			{
				PBITMAP	pbmp;
				HDC		hdc;

				if (!lParam)
					break;
				
				pbmp = malloc(sizeof(BITMAP));
				hdc = GetClientDC(hWnd);

				printf("_____debug: EbEdit filename=%s!\n",(char*)lParam);
				
				if ( LoadBitmap(hdc , pbmp, (char*)lParam)<0 )
				{
					printf("___Err: LoadBitmap failed!\n");
					break;
				}
				DestroyCaret(hWnd);
				
				if( !CreateCaret(hWnd, pbmp, pbmp->bmWidth, pbmp->bmHeight))
				{
					printf("___Err: CreateCaret failed!\n");
					break;
				}
				ReleaseDC(hdc);
			}
			return 0;
        case MSG_DESTROY:
        {
            DestroyCaret (hWnd);
            if(pEBEditData)
            	free ((void*)pEBEditData);
        }
        break;

        case MSG_ERASEBKGND:
        {
        /*  BOOL hidden = HideCaret (hWnd);
            edtOnEraseBackground (hWnd, dwStyle, (HDC)wParam, (const RECT*)lParam);
            if (hidden)
                ShowCaret (hWnd);
         *///修改者,唐建斌 2004-8-16
         //修改原因:当包含该控键的窗口隐藏后重新显示时,该控键不能正常显示,注释以上代码则无该问题
            return 0;
        }

        case MSG_FONTCHANGED:
        {   
			
            int fheight = GetSysCharHeight();
	 	    PLOGFONT pfont = GetWindowFont(hWnd);
		    if(pfont)
		    {
		    	fheight = pfont->size;
		    }
			
	    	ChangeCaretSize(hWnd,1,fheight+2);
			
			if (dwStyle & EES_VCENTER)
			{
				RECT rc;
				GetWindowRect(hWnd, &rc);
				SetCaretPos(hWnd, pEBEditData->leftMargin, (RECTH(rc)-fheight)/2-1);
			}			
            InvalidateRect (hWnd, NULL, TRUE);
            return 0;
        }
      	break;
        case MSG_SETCURSOR:
            if (dwStyle & WS_DISABLED) 
			{
                SetCursor (GetSystemCursor (IDC_ARROW));
                return 0;
            }
        break;

        case MSG_KILLFOCUS:
            pEBEditData->status &= ~EEST_FOCUSED;
            HideCaret (hWnd);
            NotifyParent (hWnd, id, EEN_KILLFOCUS);
        break;
        
        case MSG_SETFOCUS:
        {
            int fsize = GetSysCharWidth();
 	    	PLOGFONT pfont = GetWindowFont(hWnd);
		    if(pfont)
		    {
		    	fsize = GetFontCharWidth(pfont);
		    }
             	
             if (pEBEditData->status & EEST_FOCUSED)
                return 0;
            
            pEBEditData->status |= EEST_FOCUSED;

            // only implemented for ES_LEFT align format.
            fsize = New_GetStrDispWidth(hWnd,&(pEBEditData->buffer[pEBEditData->startPos]),
                    	pEBEditData->caretOff);
			
			if (dwStyle & EES_VCENTER)//add by tjb 2005-6-15 当文字居中时,光标也居中
			{
				RECT rc;
				GetWindowRect(hWnd, &rc);
				SetCaretPos (hWnd, fsize + pEBEditData->leftMargin, (RECTH(rc)-pfont->size)/2-1);;
			}
			else
				SetCaretPos (hWnd, fsize + pEBEditData->leftMargin, pEBEditData->topMargin);
                //pEBEditData->caretOff * fsize 
                          
            ShowCaret (hWnd);
            ActiveCaret (hWnd);

            NotifyParent (hWnd, id, EEN_SETFOCUS);
        }
        break;
        
        case MSG_ENABLE:
            /*if ( (!(dwStyle & WS_DISABLED) && !wParam)
                    || ((dwStyle & WS_DISABLED) && wParam) ) {
                if (wParam)
                    pCtrl->dwStyle &= ~WS_DISABLED;
                else
                    pCtrl->dwStyle |=  WS_DISABLED;

                InvalidateRect (hWnd, NULL, TRUE);
            }
            */
        return 0;

        case MSG_NCPAINT:
          	return 0;
		  
		case MSG_PAINT:
        {
		    HDC     hdc; 
            int     dispLen;
            char*   dispBuffer;
            RECT    rect;
 	    	PLOGFONT pfont = GetWindowFont(hWnd);
			UINT 	uFormat;
						
            hdc = BeginPaint (hWnd);
            if (pfont)
                SelectFont (hdc, pfont);

            GetClientRect (hWnd, &rect);
		
            if (dwStyle & WS_DISABLED) 
			{
                SetBrushColor (hdc, PIXEL_lightgray);
                SetBkColor (hdc, PIXEL_lightgray);
            }
            else 
			{
                SetBrushColor (hdc, GetWindowBkColor(hWnd));
                SetBkColor (hdc, GetWindowBkColor(hWnd));
            }
			
			if(dwStyle & EES_BKTRANSPARENT)
		    {
		    //	SetBrushColor(hdc, RGBA2Pixel(hdc, 0, 0, 0, 255));
		    	SetBkMode(hdc, BM_TRANSPARENT);
				FillBox(hdc, 0, 0, RECTW(rect), RECTH(rect));
		    }
			else
				FillBox(hdc, rect.left, rect.top, RECTW(rect), RECTH(rect));

			if ((dwStyle & EES_STYLESMASK) == EES_USEBORDER)
			{			
				if (pEBEditData->bordercolor != PIXEL_invalid)
				{
					SetPenColor(hdc, pEBEditData->bordercolor);
					#if 0
					MoveTo(hdc, rect.left , rect.top+1);
					LineTo(hdc, rect.right - 1, rect.top+1);
					LineTo(hdc, rect.right - 1, rect.bottom - 1);

					MoveTo(hdc, rect.left, rect.top +1);
					LineTo(hdc, rect.left, rect.bottom - 1);
					LineTo(hdc, rect.right - 1, rect.bottom - 1);
					#else
					MoveTo(hdc, rect.left , rect.top);
					LineTo(hdc, rect.right , rect.top);
					MoveTo(hdc, rect.right-1, rect.top);
					LineTo(hdc, rect.right-1 , rect.bottom);

					MoveTo(hdc, rect.left, rect.top);
					LineTo(hdc, rect.left, rect.bottom);
					MoveTo(hdc, rect.left, rect.bottom-1);
					LineTo(hdc, rect.right, rect.bottom-1);
					
					#endif
					
				}
			}
			else if ((dwStyle & EES_STYLESMASK) == EES_USEUNDERLINE)
			{
				SetPenColor(hdc, pEBEditData->bordercolor);
				MoveTo(hdc, rect.left, rect.bottom -1);
				LineTo(hdc, rect.right, rect.bottom -1);
			}
			
			if(dwStyle & EES_BKIMAGEMASK)
			{
				BITMAP 	bmp;

				memset(&bmp,0,sizeof(BITMAP));
				
			    if(pEBEditData && pEBEditData->data)
			    {
			        switch(dwStyle & EES_BKIMAGEMASK)
			        {
			        	case EES_BKBITMAP:
			        	{
			         		FillBoxWithBitmap(hdc, 0, 0, 0, 0,(PBITMAP)(pEBEditData->data));
			        	}
			        	break;
			        	case EES_BKBMPFILE:
			        	{
			        		char * szimage = (char *)(pEBEditData->data);
			        		if(!LoadBitmap( HDC_SCREEN, &bmp, szimage))
			        		{
					            	if(dwStyle &EES_BKALPHA)
				            	{
				            		unsigned char r,g,b,a;
				            		Pixel2RGBA(HDC_SCREEN,GetWindowBkColor (hWnd),&r,&g,&b,&a);	
				            		bmp.bmType |= BMP_TYPE_ALPHACHANNEL;
				            		bmp.bmAlpha = a;
									FillBoxWithBitmap(hdc, 0, 0, 0, 0,&bmp);
				            	}
				            	else
				            		FillBoxWithBitmap(hdc, 0, 0, 0, 0,&bmp);
								
				            	UnloadBitmap(&bmp);
			        		}
			        	}
			        	break;
			        	case EES_BKICON:
			        	{
			        		DrawIcon (hdc, 0, 0, 0, 0, (HICON)(pEBEditData->data));
			        	}
			        	break;

⌨️ 快捷键说明

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