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

📄 ebprogressbar.c

📁 基于minigui开发的一套图形控件系统
💻 C
📖 第 1 页 / 共 2 页
字号:
    }

    if (pData->nPos < pData->nMin) {
        if (fNotify)
            NotifyParent (hWnd, GetDlgCtrlID(hWnd), PBN_REACHMIN);
        pData->nPos = pData->nMin;
    }
}

static int ProgressBarCtrlProc (HWND hwnd, int message, WPARAM wParam, LPARAM lParam)
{
    HDC           hdc;
    PROGRESSDATA* pData;

    switch (message)
    {
        case MSG_CREATE:
        {
        	DWORD		pAddData= (DWORD)GetWindowAdditionalData(hwnd);
		DWORD		dwStyle = GetWindowStyle(hwnd);
		
		if (!(pData = malloc (sizeof (PROGRESSDATA)))) 
		{
			fprintf(stderr, "Create progress bar control failure!\n");
                	return -1;
                }
            
            pData->nMax     = 100;
            pData->nMin     = 0;
            pData->nPos     = 0;
            pData->nStepInc = 10;
			pData->bkColor = PIXEL_invalid;
			pData->FillColor = PIXEL_invalid;
			pData->borderwidth = 0;
			
			SetWindowAdditionalData2(hwnd, (DWORD)pData);
	   if(dwStyle &EPBS_FASTFILLLINE)
	   {
	   	char 	bmpfile[MAX_PATH + 1];

		memset(&Bkbmp,0,sizeof(BITMAP));
		memset(&Fillbmp,0,sizeof(BITMAP));
		PrefixFileName((const char *)pAddData,"nm",bmpfile,MAX_PATH);
		HE_DEBUG("\n Bkbmp LoadBitmap:%s\n",bmpfile);
		if(LoadBitmap( HDC_SCREEN, &Bkbmp, bmpfile))
		{
			HE_DEBUG("\n Bkbmp LoadBitmap error:%s\n",bmpfile);
		}
		memset(bmpfile,0,MAX_PATH+1);
		PrefixFileName((const char *)pAddData,"cu",bmpfile,MAX_PATH);
		HE_DEBUG("\nFillbmp LoadBitmap:%s\n",bmpfile);
		if(LoadBitmap( HDC_SCREEN, &Fillbmp, bmpfile))
		{
			HE_DEBUG("\nFillbmp LoadBitmap error:%s\n",bmpfile);
		}
	   }
	   else
	   {
	   	HE_DEBUG("\n dwStyle not EPBS_FASTFILLLINE\n");
	   }
	}
        	break;
    
        case MSG_DESTROY:
        {
        	DWORD		dwStyle = GetWindowStyle(hwnd);
        	
        	if(dwStyle &EPBS_FASTFILLLINE)
        	{
        		UnloadBitmap(&Bkbmp);
        		UnloadBitmap(&Fillbmp);
        	}
            free ((void *)GetWindowAdditionalData2(hwnd));
        }
        	break;

        case MSG_NCPAINT:
		case MSG_ERASEBKGND:
        	return 0;
        
        case MSG_GETDLGCODE:
            return DLGC_STATIC;

        case MSG_GETTEXTLENGTH:
        case MSG_GETTEXT:
        case MSG_SETTEXT:
            return -1;
        case MSG_PAINT:
        {
            RECT 		rcClient;
            PBITMAP 	pbmp=NULL;
			DWORD		pAddData= (DWORD)GetWindowAdditionalData(hwnd);
			DWORD		dwStyle = GetWindowStyle(hwnd);
			
			pData=(PPROGRESSDATA)GetWindowAdditionalData2(hwnd);
			
            GetClientRect (hwnd, &rcClient);			
            hdc = BeginPaint (hwnd);
			
			if (dwStyle & EPBS_BKBMPFILE)
			{
				if(pAddData)
				{
					char 	bmpfile[MAX_PATH + 1];

					if(dwStyle &EPBS_FASTFILLLINE)
					{
						//HE_DEBUG("\nMSG_PAINT FASTFILLLINE.\n");
						FillWithPicture(hwnd, hdc, NULL, &Bkbmp, BMP_TYPE_ALPHAVALUE, dwStyle & EPBS_BKALPHA);
						//break;
					}
					else
					{
						PrefixFileName((const char *)pAddData,"nm",bmpfile,MAX_PATH);					
					//	FillWithBmpAlphaValue(hwnd, hdc, bmpfile, dwStyle & EPBS_BKALPHA);
						FillWithPicture(hwnd, hdc, bmpfile, NULL, BMP_TYPE_ALPHAVALUE, dwStyle & EPBS_BKALPHA);
					}
				}
			}
			else if (dwStyle & EPBS_BKBITMAP)
			{
				pbmp = (PBITMAP)pAddData;
				FillBoxWithBitmap(hdc, rcClient.left, rcClient.top, 
							RECTW(rcClient),RECTH(rcClient), pbmp);
			}
			else if(dwStyle & EPBS_BKCOLOR)
			{
				gal_pixel old;

				if(pData->bkColor)
					old = SetBrushColor(hdc, pData->bkColor);
				else
					old = SetBrushColor(hdc, PIXEL_lightgray);
				
				FillBox(hdc, rcClient.left, rcClient.top, 
					RECTW(rcClient),RECTH(rcClient));
				SetBrushColor(hdc, old);
			}
			else
			{
				Draw3DDownFrame (hdc, rcClient.left, rcClient.top, 
                             rcClient.right - 1, rcClient.bottom - 1, 
                             PIXEL_invalid);
			}
						
			pbarDrawPicPos(hwnd, hdc, dwStyle & EPBS_VERTICAL);
		
            EndPaint (hwnd, hdc);
		}
        break;
		
        case EPBM_SETRANGE:
		{
            pData = (PROGRESSDATA *)GetWindowAdditionalData2(hwnd);
            pData->nMin = MIN (wParam, lParam);
            pData->nMax = MAX (wParam, lParam);
            if (pData->nPos > pData->nMax)
                pData->nPos = pData->nMax;
            if (pData->nPos < pData->nMin)
                pData->nPos = pData->nMin;
			InvalidateRect (hwnd, NULL, FALSE);
        	break;
        }
        case EPBM_GETRANGE:
		{
			int * imin;
			int * imax;
			if (wParam != 0 )
			{
				imin = (int *)wParam;
				*imin= pData->nMin;
			}
			if (lParam != 0)
			{
				imax = (int *)lParam;
				*imax = pData->nMax;
			}
			return ;
        }
        case EPBM_SETSTEP:
            pData = (PROGRESSDATA *)GetWindowAdditionalData2(hwnd);
            pData->nStepInc = wParam;
        	break;
        case EPBM_GETPOS:
			pData = (PROGRESSDATA *)GetWindowAdditionalData2(hwnd);
			return pData->nPos;
			
        case EPBM_SETPOS:
        {
        	RECT 	rcClient,updateRect;
        	int     oldpos;
        	DWORD	dwStyle;
        	
            pData = (PROGRESSDATA *)GetWindowAdditionalData2(hwnd);
            
            if (pData->nPos == wParam)
                break;

	    	oldpos =pData->nPos;
            pData->nPos = wParam;
            pbarNormalizeParams (hwnd, pData, GetWindowStyle(hwnd) & PBS_NOTIFY);
            
            if( (dwStyle & EPBS_FILLLINE) ||(dwStyle & EPBS_FASTFILLLINE))
            {
            	dwStyle = GetWindowStyle(hwnd);
            	GetClientRect (hwnd, &rcClient);
            	updateRect.top =rcClient.top;
            	updateRect.bottom =rcClient.bottom;
            	if(oldpos > pData->nPos)
            	{
            		updateRect.left =RECTW(rcClient)*pData->nPos/(pData->nMax -pData->nMin);
            		updateRect.left =(updateRect.left -10) >0?(updateRect.left -10):updateRect.left;
            		updateRect.right =RECTW(rcClient)*oldpos/(pData->nMax -pData->nMin) +10;
            	}
            	else
            	{
            		updateRect.left =RECTW(rcClient)*oldpos/(pData->nMax -pData->nMin);
            		updateRect.left =(updateRect.left -10) >0?(updateRect.left -10):updateRect.left;
            		updateRect.right =RECTW(rcClient)*pData->nPos/(pData->nMax -pData->nMin) +10;
            	}
            	wndInvalidateRect (hwnd, &updateRect, FALSE);
            }
            else
            {
            	//InvalidateRect (hwnd, NULL, FALSE);
                wndInvalidateRect (hwnd, NULL, FALSE);
            }

            SendMessage (hwnd, MSG_PAINT, 0, 0);
        }
        	break;
        
        case EPBM_DELTAPOS:
            pData = (PROGRESSDATA *)GetWindowAdditionalData2(hwnd);

            if (wParam == 0)
                break;
            
            pData->nPos += wParam;
            pbarNormalizeParams (hwnd, pData, GetWindowStyle(hwnd) & PBS_NOTIFY);
                
//          InvalidateRect (hwnd, NULL, FALSE);
			wndInvalidateRect (hwnd, NULL, TRUE);
    	    SendMessage (hwnd, MSG_PAINT, 0, 0);
        	break;
        
        case EPBM_STEPIT:
            pData = (PROGRESSDATA *)GetWindowAdditionalData2(hwnd);
            
            if (pData->nStepInc == 0)
                break;

            pData->nPos += pData->nStepInc;
            pbarNormalizeParams (hwnd, pData, GetWindowStyle(hwnd) & PBS_NOTIFY);

            InvalidateRect (hwnd, NULL, FALSE);
        	break;
            
        case MSG_FONTCHANGED:
            InvalidateRect (hwnd, NULL, FALSE);
        	return 0;
		//add by tjb 2004-4-16
		case EPBM_SETCOLOR:
		{
			pData=(PPROGRESSDATA)GetWindowAdditionalData2(hwnd);
			if (wParam != PIXEL_invalid)
				pData->bkColor = (DWORD)wParam;
			if (lParam != PIXEL_invalid)
				pData->FillColor = (DWORD)lParam;
			break;
		}
		case EPBM_SETBORDERWIDTH:
		{
			pData=(PPROGRESSDATA)GetWindowAdditionalData2(hwnd);
			if (lParam != PIXEL_invalid)
				pData->borderwidth= (int)lParam;
			break;
		}
        default:
        	break;
    }
    
    return DefaultControlProc (hwnd, message, wParam, lParam);
}

⌨️ 快捷键说明

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