圆形热点按钮的制作
2012-03-24 11:39
387 查看
说明:
绘制一个圆形的按钮,如果鼠标悬停在圆里面时,边框变成黑色,否则为白色。
过程:
思路如下:首先在对话框中绘制一个圆形,然后处理WM_MOUSEMOVE消息,计算出当前鼠标所停的点是否在圆里面。如果在,那么就在绘制时把边框变成黑色的。再处理WM_LBUTTONUP,如果鼠标在圆里面,就弹出一个对话框。
首先先定义类circle
然后再实现。
在对话框头文件中,定义
最后再initDialog中进行初始化
另外,我们还得处理WM_MOUSEMOVE和WM_LBUTTONUP
不一定是最好看,但是,这或许是用于的。这篇文章如有不足之处,请多多指教
绘制一个圆形的按钮,如果鼠标悬停在圆里面时,边框变成黑色,否则为白色。
过程:
思路如下:首先在对话框中绘制一个圆形,然后处理WM_MOUSEMOVE消息,计算出当前鼠标所停的点是否在圆里面。如果在,那么就在绘制时把边框变成黑色的。再处理WM_LBUTTONUP,如果鼠标在圆里面,就弹出一个对话框。
首先先定义类circle
class circle : public CWnd { DECLARE_DYNAMIC(circle) private: CPoint center; .//圆心所在点 int radium;//半径 public: circle(); virtual ~circle(); void draw(int radium,CPoint center,CDC *pDC,int mode,CString text);//绘制圆形按钮 bool isInCricle(CPoint point);//判断是否在圆里面 void click(CPoint point); protected: DECLARE_MESSAGE_MAP() };
然后再实现。
void circle::draw(int radium,CPoint center,CDC *pDC,int mode,CString text) { CPen pen = CPen(PS_SOLID,5,RGB(255,255,255)); CPen selected = CPen(PS_SOLID,5,RGB(0,0,0)); CFont font; font.CreatePointFont(196,_T("黑体")); if (mode == 0)//在圆外面 { pDC->SelectObject(pen); pDC->Ellipse(center.x - radium,center.y - radium,center.x + radium,center.y + radium);//计算圆的区域 pDC->SelectObject(font); pDC->TextOutW(center.x - text.GetLength() * 7,center.y - text.GetLength() * 5,text);//7 = sqrt(196)/2 this->radium = radium; this->center = center; } else//在圆里面 { pDC->SelectObject(selected); pDC->Ellipse(center.x - radium,center.y - radium,center.x + radium,center.y + radium); pDC->SelectObject(font); pDC->TextOutW(center.x - text.GetLength() * 7,center.y - text.GetLength() * 5,text); this->radium = radium; this->center = center; } } bool circle::isInCricle(CPoint point) { int m,n; m = static_cast<int>(point.x) - this->center.x;//计算这个点是否在圆里面 n = static_cast<int>(point.y) - this->center.y; if (m * m + n * n <= this->radium * this->radium) { return TRUE; } else { return FALSE; } } void circle::click(CPoint point) { if (this->isInCricle(point)) { MessageBoxW(_T("成功了!"),_T("消息")); } }
在对话框头文件中,定义
circle myCircle; CDC *pDC;//绘图上下文
最后再initDialog中进行初始化
myCircle.draw(50,CPoint(100,100),pDC,0,_T("ABC"));
另外,我们还得处理WM_MOUSEMOVE和WM_LBUTTONUP
void CcirclebuttonDlg::OnMouseMove(UINT nFlags, CPoint point) { // TODO: 在此添加消息处理程序代码和/或调用默认值 if (myCircle.isInCricle(point)) { myCircle.draw(50,CPoint(100,100),pDC,1,_T("ABC")); } else { myCircle.draw(50,CPoint(100,100),pDC,0,_T("ABC")); } CDialogEx::OnMouseMove(nFlags, point); } //处理WM_MOUSEMOVE
void CcirclebuttonDlg::OnLButtonUp(UINT nFlags, CPoint point) { // TODO: 在此添加消息处理程序代码和/或调用默认值 myCircle.click(point); CDialogEx::OnLButtonUp(nFlags, point); } //处理WM_LBUTTONUP
不一定是最好看,但是,这或许是用于的。这篇文章如有不足之处,请多多指教
相关文章推荐
- 用PPT制作圆形水晶按钮
- 制作圆形Swing按钮(中文版)
- 追求极致--纯css制作三角、圆形按钮,兼容ie6
- 超简单:三秒钟搞定 Axure制作圆形头像或按钮图标!!
- 圆形、椭圆形 按钮控件的制作
- 如何制作一个圆形的按钮
- Java制作圆形按钮
- silverlight 如何编辑控件模板?以制作圆形按钮为例
- [原译]一步步教你制作WPF圆形玻璃按钮
- 制作圆形Swing按钮[转载]
- CSS3制作的一个圆形精美按钮
- 制作圆形Swing按钮(中文版)
- iOS小项目中的一些小拾遗(关于UIColor颜色以及UIButton制作圆形按钮)
- 利用:before和:after伪类制作CSS3 圆形按钮 含demo
- 纯css制作三角、圆形按钮,兼容ie6
- 一步步教你制作WPF圆形玻璃按钮
- 用热点链接做圆形按钮。
- 循序渐进实现仿QQ界面(四):圆形按钮与工具栏自绘(转载)
- 利用CAShapeLayer可以制作出任意的几何图形,把它作为UIImageView的遮罩,达到把图片做成圆形效果。
- 关于分别使用CSS3和JQ制作IOS7开关按钮的方法