📄 zoomosd.c
字号:
BYTE lcolor,dcolor;
BYTE str[16] = {'\0','1','\0','0','\0','0','\0','%','\0','\0',};
BYTE zoomstr[32]=
{
'\0','Z','\0','o',//0-3
'\0','o','\0','m',//4-7
'\0',' ','\0',' ',//8-11
'\0','\0','\0','\0'//12-15
};
BYTE ratio;
BaseRect upBrct=
{
{ZOOM_LEFT,ZOOM_TOP,ZOOM_LEFT+ZOOM_WIDTH,ZOOM_TOP + ZOOM_UP_HEIGHT},
//248,30,30//maggie
//251,113,220 gushun
251,95,197
};
BaseRect downBrct=
{
{ZOOM_LEFT,ZOOM_TOP+ZOOM_UP_HEIGHT+1,ZOOM_LEFT+ZOOM_WIDTH,ZOOM_TOP + ZOOM_UP_HEIGHT+ZOOM_DOWN_HEIGHT+1},
251,95,197
}; //-->Alan, top+1, bottom+1, bug fix for 160
RECT strRect={ZOOM_LEFT+ZOOM_TXT_LEFT,ZOOM_TOP+ZOOM_UP_HEIGHT,ZOOM_LEFT+ZOOM_WIDTH,ZOOM_TOP+ZOOM_UP_HEIGHT+ZOOM_DOWN_HEIGHT};//MAGGIE
ratio=zoomRatio;
if(fromZero)
{
OffsetRect(&upBrct,-ZOOM_LEFT, -ZOOM_TOP);
OffsetRect(&downBrct,-ZOOM_LEFT, -ZOOM_TOP);
OffsetRect(&strRect,-ZOOM_LEFT, -ZOOM_TOP);
}
//draw zoom up portion.
DrawBaseRect(hdc,&upBrct);
//draw the down portion.
DrawBaseRect(hdc,&downBrct);
//for efficiency
if(zoomRatio==4)
{
range = ZOOM_RANGE_4X;
ratio=2;
}
else if(zoomRatio==16)
{
range = ZOOM_RANGE_16X;
ratio=4;
}
//-----------------------------
InflateRect(&upBrct.rect,-(upBrct.rect.right-upBrct.rect.left)*(ratio-1)/(ratio*2),-(upBrct.rect.bottom-upBrct.rect.top)*(ratio-1)/(ratio*2));
//OffsetRect(&br.rect,(br.rect.right-br.rect.left)*xOffset*(zoomRatio-1)/2/range,(br.rect.bottom-br.rect.top)*yOffset*(zoomRatio-1)/2/range);
OffsetRect(&upBrct.rect,(upBrct.rect.right-upBrct.rect.left)*xOffset*(ratio-1)/2/range - 6*xOffset/range,
(upBrct.rect.bottom-upBrct.rect.top)*yOffset*(ratio-1)/2/range -4*yOffset/range);//for let the inside frame not go out
DrawZoomInsideFrame(hdc, &(upBrct.rect));
//draw the arrow
lcolor = 26;//236;//155;//maggie
dcolor = 26;//236;//230;//maggie
SetRect(&r, upBrct.rect.left,upBrct.rect.top,upBrct.rect.right,upBrct.rect.bottom);
DrawZoomArrow(hdc,r.left + (r.right-r.left)/2,r.top,ZOOM_DIR_UP,lcolor,dcolor);
DrawZoomArrow(hdc,r.left + (r.right-r.left)/2,r.bottom,ZOOM_DIR_DOWN,lcolor,dcolor);
DrawZoomArrow(hdc,r.left-2 ,r.top+(r.bottom-r.top)/2,ZOOM_DIR_LEFT,lcolor,dcolor);
DrawZoomArrow(hdc,r.right+1 ,r.top+(r.bottom-r.top)/2,ZOOM_DIR_RIGHT,lcolor,dcolor);
//draw the zoom string at the down portion .
str[1]='0'+zoomRatio%10;
if(zoomRatio>=10)
{
for(i=15;i>1;i--)
{
str[i]=str[i-2];
}
str[0]=0x00;
str[1]='0'+zoomRatio/10;
}
for(i=0,j=12;j<30&&i<16;i++,j++)
{
zoomstr[j]=str[i];
}
zoomstr[j]='\0';
//SetTextColor(hdc,GetColorInDef256Palette(224));//maggie
SetTextColor(hdc,GetColorInDef256Palette(233));//maggie
//DrawText(hdc,str,-1,&strRect,DT_VCENTER | DT_RIGHT | DT_SINGLELINE | DT_CHARCLIP | DT_OPAQUE);//maggie
DrawText(hdc,zoomstr,-1,&strRect,DT_VCENTER | DT_LEFT| DT_SINGLELINE | DT_CHARCLIP | DT_OPAQUE);
}
void DrawZoomInsideFrame(HDC hdc,LPRECT lpR)
{
static BaseRect br=
{
{0,0,0,0},
// 240,230,230//maggie
251,26,26
};
BaseBmp bp ;
HBRUSH hbr;
//adjust
InflateRect(lpR,-2,0);
lpR->left-=2;
lpR->right+=1;
//first fill the back
//hbr=CreateSolidBrush(GetColorInDef256Palette(240));//maggie
hbr=CreateSolidBrush(GetColorInDef256Palette(251));//maggie
FillRect(hdc, lpR,hbr);
//then draw the edge
//SetRect(&br.rect,r->left,r->top,r->right,r->bottom);
CopyRect(&br.rect, lpR);
br.leftEdgeColor=br.rightEdgeColor=26;//236;//230;//maggie
DrawBREdge(hdc,&br);
// br.rect.left--;//maggie
// br.rect.top--;//maggie
// DrawBREdge(hdc,&br);//maggie
// br.leftEdgeColor=br.rightEdgeColor=236;//155;//maggie
// OffsetRect(&br.rect,-1,-1);//maggie
// DrawBREdge(hdc,&br);//maggie
DeleteObject((HGDIOBJ)hbr);
//pen = CreatePen(PS_SOLID, 1, GetColorInDef256Palette(br->leftEdgeColor));
//draw zoom icon
bp.BmpID=IM_GUI_ZOOM;
bp.width=ZOOM_ICON_WIDTH;
bp.height=ZOOM_ICON_HEIGHT;
bp.upperleftx=lpR->left+((lpR->right-lpR->left)-ZOOM_ICON_WIDTH)/2;
bp.upperlefty=lpR->top+ ((lpR->bottom-lpR->top)-ZOOM_ICON_HEIGHT)/2 ;
DrawBaseBmp(hdc,&bp);
}
void DrawZoomArrow(HDC hdc,int ox,int oy,BYTE direction,BYTE lightColor,BYTE DarkColor)
{
HPEN lpen,dpen,oldPen;
POINT p;
BYTE i;
int d=1;
switch(direction)
{
case ZOOM_DIR_RIGHT:
case ZOOM_DIR_DOWN:
d=1;
break;
case ZOOM_DIR_LEFT:
case ZOOM_DIR_UP:
d=-1;
break;
default:
d=1;
}
lpen = CreatePen(PS_SOLID, 1, GetColorInDef256Palette(lightColor));
dpen = CreatePen(PS_SOLID, 1, GetColorInDef256Palette(DarkColor));
oldPen = (HPEN)SelectObject(hdc, (HGDIOBJ)lpen);
if((direction==ZOOM_DIR_RIGHT) || (direction == ZOOM_DIR_LEFT))
{
for(i=0;i<3;i++)
{
MoveToEx(hdc,ox , oy-i,NULL);
LineTo(hdc,ox+6*d-(2*i*d),oy-i);
}
SelectObject(hdc, (HGDIOBJ)dpen);
for(i=0;i<3;i++)
{
MoveToEx(hdc,ox , oy+i+1,NULL);
LineTo(hdc,ox+6*d-(2*i*d),oy+i+1);
}
}
else
{
i=0;
for(i=0;i<3;i++)
{
MoveToEx(hdc,ox-i, oy,NULL);
LineTo(hdc,ox-i,oy+(6 * d)-(2 * i * d));
}
SelectObject(hdc, (HGDIOBJ)dpen);
for(i=0;i<3;i++)
{
MoveToEx(hdc,ox+i+1 , oy,NULL);
LineTo(hdc,ox+i+1,oy+(6 * d)-(2 * i * d));
}
}
SelectObject(hdc, (HGDIOBJ)oldPen);
DeleteObject((HGDIOBJ)lpen);
DeleteObject((HGDIOBJ)dpen);
}
//------
//screen fit
void ShowScreenFitWindow(BYTE stage)
{
//30910 gamble add for ScreenFit blink
HBITMAP hbmp_comp,hbmp_old;
HDC mhdc;
mhdc = CreateCompatibleDC(gui_hdc);
hbmp_comp = CreateCompatibleBitmap(gui_hdc,188,130);
if(hbmp_comp==NULL)
return ;
hbmp_old = (HBITMAP)SelectObject(mhdc,(HGDIOBJ)hbmp_comp);
DrawSFFrame(mhdc);
DrawSFInsideFrame(mhdc);
BitBlt(gui_hdc,
ZOOM_LEFT,ZOOM_TOP,
ZOOM_WIDTH,ZOOM_UP_HEIGHT+ZOOM_DOWN_HEIGHT-1,
mhdc, 0, 0, SRCCOPY);
SelectObject(mhdc,(HGDIOBJ)hbmp_old);
DeleteObject((HGDIOBJ)hbmp_comp);
DeleteDC(mhdc);
//end 30910 gamble add for ScreenFit blink
}
void DrawSFFrame(HDC hdc)
{
RECT r;
BYTE lcolor,dcolor;
static BaseBmp bp =
{
IM_GUI_ZOOM_SCRN_FIT,
ZOOM_ICON_LEFT,
ZOOM_ICON_TOP,
ZOOM_ICON_WIDTH,
ZOOM_ICON_HEIGHT
};
BaseRect br=
{
{0,0,ZOOM_WIDTH,ZOOM_UP_HEIGHT},
248,30,30
};
DrawBaseRect(hdc,&br);
OffsetRect(&br.rect,0,ZOOM_UP_HEIGHT-2);
br.rect.bottom += (ZOOM_DOWN_HEIGHT - ZOOM_UP_HEIGHT);
br.bkColor = 255;
DrawBaseRect(hdc,&br);
//DrawBREdge(hdc,&br);
DrawBaseBmp(hdc,&bp);
}
void DrawSFInsideFrame(HDC hdc)
{
BYTE strLeftArrow[]={0xe0,0x15,0x00,0x00};
BYTE strRightArrow[]={0xe0,0x16,0x00,0x00};
BYTE strUpArrow[]={0xe0,0x17,0x00,0x00};
BYTE strDownArrow[]={0xe0,0x18,0x00,0x00};
BaseRect br;
RECT rect;
HBRUSH hbrush;
rect.left=0;
rect.top=0+ZOOM_UP_HEIGHT;
rect.right = rect.left + ZOOM_WIDTH;
rect.bottom = rect.top + ZOOM_DOWN_HEIGHT-2;
hbrush=CreateSolidBrush(GetColorInDef256Palette(230));
SetTextColor(hdc, GetColorInDef256Palette(30));
InflateRect(&rect,-ZOOM_SF_LEFT,-ZOOM_SF_TOP);
CopyRect(&br.rect,&rect);
//first draw the yellow region
InflateRect(&rect,ZOOM_SF_LEFT*bZoomHRatio/(SCREEN_FIT_SCALE_RANGE + 1),ZOOM_SF_TOP*bZoomVRatio/(SCREEN_FIT_SCALE_RANGE + 1));
FillRect(hdc,&rect,hbrush);
InflateRect(&rect,-ZOOM_SF_LEFT*bZoomHRatio/(SCREEN_FIT_SCALE_RANGE + 1),-ZOOM_SF_TOP*bZoomVRatio/(SCREEN_FIT_SCALE_RANGE + 1));
//----------------
br.leftEdgeColor = 30;
br.rightEdgeColor = 30;
DrawBREdge(hdc,&br);
InflateRect(&rect,-4,-4);
SetTextColor(hdc, GetColorInDef256Palette(30));
DrawText(hdc,strLeftArrow,-1,&rect,DT_LEFT | DT_VCENTER | DT_SINGLELINE);
DrawText(hdc,strUpArrow,-1,&rect,DT_CENTER| DT_TOP| DT_SINGLELINE);
DrawText(hdc,strRightArrow,-1,&rect,DT_RIGHT| DT_VCENTER | DT_SINGLELINE);
DrawText(hdc,strDownArrow,-1,&rect,DT_CENTER| DT_BOTTOM| DT_SINGLELINE);
DeleteObject((HGDIOBJ)hbrush);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -