📄 ebprogressbar.c
字号:
}
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 + -