吐血共享, 这个圆形按钮控件, 不会弄都不好意思说是大牛!?





 这个圆形按钮控件, 不会弄都不好意思说是大牛!?

有没有人开发过这个控件

31 个解决方案

#1


#2


PS一个图,定位按钮的不同功能区,根据鼠标位置确定功能

#3


搜一下MFC界面库,也可以自绘

#4


贴图,获取区域

#5


#6


如果你用纯MFC 那就各种自绘好了 做下来会是一头大汗 但相信你会学到不少东西。 但一般这种东西 如果你用一套比较好的DUI库的话 都不会比较轻松的搞定

#7


使用GDI+自绘。

#8


垃圾控件,都不入流

#10


#11


干脆做一个能全真模拟各品牌手机的控件。

#12


我不是大牛,我是来学习的

#13


10楼惊现高清无码大图!

#14


9楼有具体做法,可以参考下。

#15


9楼不是教你如何PS吗。。。

#16


vc6 使用pen的 部分代码:

#include <math.h>
void MetallicButton(HDC hDC, int OrigX, int OrigY, int Radius, 
  BYTE cStart, BYTE cEnd)
{
int g;
BYTE dg=cEnd-cStart;
for (double i=0; i<360; i+=0.1)
{
if(i>270)
{
g=(int)(cEnd-dg*(i-270.0)/90.0);
}
else if(i>180)
{
g=(int)(cStart+dg*(i-180.0)/90.0);
}
else if(i>90)
{
g=(int)(cEnd-dg*(i-90)/90.0);
}
else
{
g=(int)(cStart+dg*i/90.0);
}
if(g>cEnd)   g=cEnd;
if(g<cStart) g=cStart;
//
HPEN hpen=CreatePen(PS_SOLID,2,RGB(g,g,g));
HPEN old=(HPEN)SelectObject(hDC,hpen);
double x=OrigX-Radius*cos(i*3.1415926/180);
double y=OrigY-Radius*sin(i*3.1415926/180);
MoveToEx(hDC,OrigX,OrigY,0);
LineTo(hDC,(int)(x+0.5),(int)(y+0.5));
SelectObject(hDC,old);
DeleteObject(hpen);
}
}



#17


我还是考虑资绘这条路吧。 这条路比较近。呵呵

另外有人说 VS已经集成了 这个功能?  到底是哪个版本,我用的VS2013应该没有这个功能的吧。

#18


8楼的 gz_qmc 说 ”垃圾控件,都不入流“    是不是他本人比较垃圾,是不入流的货色?




#19


我都被这个控件困扰了一个多月了! 别这样落井下石吧。老大

#20


GDI+ 的齿轮

//
void GearRotate(HDC hdc, int OrigX,int OrigY,int Radius,int GearHeigh)
{
Graphics graphics(hdc);
//
Pen pen(Color(255,240,240,240),2.0f);
Matrix matrix;// identity matrix
PointF Center((float)OrigX,(float)OrigY);//
for(float angle=0;angle<360;angle+=4)
{
matrix.Reset();
matrix.RotateAt(angle, Center , MatrixOrderPrepend);// matrix is on the right
// arrow
PointF pt0(Center.X,(float)OrigY-(float)Radius-(float)GearHeigh);
PointF pt1(Center.X-1,pt0.Y+4);
PointF pt2(Center.X+1,pt0.Y+4);
graphics.SetTransform(&matrix);
graphics.DrawLine(&pen,pt1,pt0);
graphics.DrawLine(&pen,pt2,pt0);
}
Pen pen1(Color(255,200,200,200),6.0f);
RectF rc((float)(OrigX-Radius-3),(float)(OrigY-Radius-3),
     (float)(2*Radius+6), (float)(2*Radius+6));
graphics.DrawEllipse(&pen1,rc);
}

#21


#23


这种控件肯定是要自绘了.

一张景图, 没有那圈进度的.

然后就是饼形裁剪 进度图,    再叠加到背景图上.

#24


#25


二货,居然敢瞧不起我

极坐标该懂?不懂去 http://download.csdn.net/download/gz_qmc/7541693下来看看

所谓扇形,就是两个半径不同的圆所夹的部分

设PAI=3.14159265
设角度为float  th;
圆心坐标为 float  x, y;
两圆半径为   float  r1,r2;

画图代码为

          贴图片;就是9楼处理好的图片;
         for(th=4*PAI/3;th>=当前角度;th-=0.0157)
        {
                float  x1=x+r1*cos(th);
                float  y1=y+r1*sin(th);
                float  x2=x+r2*cos(th);
                float  y2=y+r2*sin(th);
                COLORREF  co=蓝色;(如果要体现过度色,用th代入计算颜色即可,不会就去死)
                用co创建画笔
                line(x1,y1,x2,y2);
        }
}

#26


绘刻度

DrawScaleArc(dc.m_hDC,OrigX,OrigY,170,230,102);

///
//
void DrawScaleArc(HDC hdc ,int OrigX,int OrigY,int inR,int outR,int StopAngle)
{
HPEN hpen=CreatePen(PS_SOLID,2,RGB(0,200,255));
HPEN hpen1=CreatePen(PS_SOLID,3,RGB(0,0,0));
HPEN old=(HPEN)SelectObject(hdc,hpen);
for (double i=-30; i<StopAngle; i+=0.1)
{
double Ix=OrigX-inR*cos(i*3.1415926/180);
double Iy=OrigY-inR*sin(i*3.1415926/180);
double Ox=OrigX-outR*cos(i*3.1415926/180);
double Oy=OrigY-outR*sin(i*3.1415926/180);
MoveToEx(hdc,(int)(Ix+0.5),(int)(Iy+0.5),0);
LineTo(hdc,(int)(Ox+0.5),(int)(Oy+0.5));
}
SelectObject(hdc,old);
DeleteObject(hpen);

old=(HPEN)SelectObject(hdc,hpen1);
int arc1Sx,arc1Sy,arc1Ex,arc1Ey;
int arc2Sx,arc2Sy,arc2Ex,arc2Ey;
for(int k=-30;k<=210;k+=4)
{
double Ix=OrigX-inR*cos(k*3.1415926/180);
double Iy=OrigY-inR*sin(k*3.1415926/180);
double Ox=OrigX-outR*cos(k*3.1415926/180);
double Oy=OrigY-outR*sin(k*3.1415926/180);
if(k==-30)
{
arc1Sx=(int)Ox;
arc1Sy=(int)Oy;
arc2Sx=(int)Ix;
arc2Sy=(int)Iy;
}
if(k==210)
{
arc1Ex=(int)Ox;
arc1Ey=(int)Oy;
arc2Ex=(int)Ix;
arc2Ey=(int)Iy;
}
MoveToEx(hdc,(int)(Ix+0.5),(int)(Iy+0.5),0);
LineTo(hdc,(int)(Ox+0.5),(int)(Oy+0.5));
}
//
Arc(hdc,OrigX-outR,OrigY-outR,OrigX+outR,OrigY+outR,arc1Ex,arc1Ey,arc1Sx,arc1Sy);
Arc(hdc,OrigX-inR, OrigY-inR, OrigX+inR, OrigY+inR, arc2Ex,arc2Ey,arc2Sx,arc2Sy);
//
SelectObject(hdc,old);
DeleteObject(hpen1);
}


#27


设计和代码不是一个概念的。

#28


显丑了

#29


#30


果然比较“丑”。
为什么感觉中间的旋转渐变上下错位了那么几个像素?

#31


谁用OpenGL或DX直接导入3DS Max或Maya模型实时渲染出一个装装B?
智能推荐

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号  

赞助商广告