388上位机VC MFC实现抽奖转盘特效
实现抽奖转盘特效
功能展示
现实中商家商品推广都会有转盘抽奖活动,转动转盘,指针指向什么物品就可获得此物品,我们当前例程也实现抽奖转盘功能,效果如图,点击<开始>按钮,转盘会开始旋转,然后逐步减速至停止,例程仅通过单线程实现,读者可新开线程,将旋转功能放到线程中实现
要点提示
例程也是通过GDI+加载PNG类型图片实现转盘的绘制功能,在VC6.0中使用GDI+也是分为三步进行。包含头文件,初始化环境,清理环境;
//使用GDI+第一步
#define UNICODE
#ifndef ULONG_PTR
#define ULONG_PTR unsigned long*
#endif
#include "Include\\gdiplus.h"
using namespace Gdiplus;
#pragma comment(lib, "Include\\gdiplus.lib")
//GDI+第二步
ULONG_PTR diplusToken;
GdiplusStartupInput gdiplusStartupInput;
GdiplusStartup(&diplusToken, &gdiplusStartupInput, NULL);
//GDI+第三步
GdiplusShutdown(diplusToken);
另外例程中并无 开始 按钮控件,是通过判断鼠标点击位置是否在指定矩形内来实现<开始>按钮功能;如例程代码 :CRect rc(310,270,370,350); if(rc.PtInRect(point)) Rotate();其中point为鼠标点击的位置,Crect类的成员函数PtInRect()判断指定点是否在矩形内,是返回真,不是返回0;
实现功能
1.新建基于对话框的应用程序
2.复制例程根目录GDI+文件夹Include及res文件夹下的PNG图片到自己工程根目录,分并三步使用GDI+及载入四幅PNG图片IDR_BK,IDR_DISK,IDR_START,IDR_STARTED
3.在主对话框头文件中添加成员变量及函数,函数体可打开例程复制使用
public:
void Rotate();//旋转转盘
private:
Image *m_pImageDisk;
Image *m_pImageBk;
Image *m_pImageStart;
Image *m_pImageStarted;
BLENDFUNCTION m_Blend;//窗口透明度设置
int m_iRand;
int m_Angle;
int m_StartWidth;
int m_StartHeight;
bool m_bStart;
typedef BOOL (WINAPI *MYFUNC)(HWND,HDC,POINT*,SIZE*,HDC,POINT*,COLORREF,BLENDFUNCTION*,DWORD);
MYFUNC UpdateLayeredWindow;
BOOL ImageFromIDResource(UINT nID, LPCTSTR sTR,Image * &pImg);//图片ID转为Image*
void DrawDisk();//绘制转盘
void IntVariable();//初始化变量
4.在初始化函数OnInitDialog()中调用函数IntVariable();初始化变量,在鼠标点击函数OnLButtonDown()中实现转盘旋转
void CGkbc8Dlg::OnLButtonDown(UINT nFlags, CPoint point)
{
if(m_bStart)
return;
CRect rc(310,270,370,350);
if(rc.PtInRect(point))
Rotate();
CDialog::OnLButtonDown(nFlags, point);
}
我们来演示下功能实现的整个过程
如果您认可,可联系功能定制! 如果您着急,充值会员可直接联系发您资料!
|