vc中实现所画风车的旋转,我用vc++6.0 cpp画了一个风车 怎么才能让它能旋转起来

vc中实现所画风车的旋转,我用vc++6.0 cpp画了一个风车 怎么才能让它能旋转起来,第1张

//源程序,示例代码:

// Instance_3_1_.cpp : Defines the entry point for the application.

//

/*************************************************************************

窗口中画一个旋转的风车,风车中有三个叶片,颜色分别为红黄和蓝,

叶片外侧有一个外接圆。

*************************************************************************/

#include <windows.h>

#include <math.h>

// 回调函数声明巧销

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)

// 初始化窗口类声明

BOOL InitWindowsClass(HINSTANCE hInstance, char *lpszClassName)

// 初始化窗口声明

BOOL InitWindows(HINSTANCE hInstance, 谈宽int nCmdShow, char *lpszClassName, char *lpTitle)

WNDCLASS wndclass // 定义一个窗口类

HWND hwnd         // 定义一个窗口句柄

const double Pi = 3.1415926

int nMaxNumber = 20 // 叶片循环一周中绘图的次数

int nNum = 0 // 记录当前的顺序

int WINAPI WinMain(HINSTANCE hInstance,

                   HINSTANCE hPrevInstance,

                   LPSTR     lpCmdLine,

                   int       nCmdShow)

{

MSG Msg                      // 定义消息

char lpszClassName[] = "风车" // 窗口的类名

char lpTitle[] = "基本绘图-旋转的风车"   // 窗口标题名

// 初始化窗口类

if (!InitWindowsClass(hInstance, lpszClassName))

{

return FALSE

}

// 初始化窗口

if (!InitWindows(hInstance, nCmdShow, lpszClassName, lpTitle))

{

return FALSE

}

//消息循环

while(GetMessage(&Msg, NULL, 0, 0))

{

TranslateMessage(&Msg)

DispatchMessage(&Msg)

}

return Msg.wParam // 程序终止时将信息返回系统

}

// 初始化窗口类定义

BOOL InitWindowsClass(HINSTANCE hInstance, char *lpszClassName)

{

//1、窗口类定义

wndclass.style = 0             // 窗口类型为默认类型

wndclass.lpfnWndProc = WndProc // 窗口处理函数为 WNDPROC

wndclass.cbClsExtra = 0        // 窗口类无扩展

wndclass.cbWndExtra = 0        // 窗口实例无扩展

wndclass.hInstance = hInstance // 当前实例句柄

wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION) // 窗口的最小化图标为默认图标

wndclass.hCursor = LoadCursor(NULL, IDC_ARROW)   // 窗口采用箭头光标

wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH) // 窗口采用白色孝侍游背景

    wndclass.lpszMenuName = NULL // 窗口中无菜单

wndclass.lpszClassName = lpszClassName //类名为 lpClassName

//2、注册窗口类

if (!RegisterClass(&wndclass))

{ // 如果注册失败则发出警告声音

MessageBeep(0)

return FALSE

}

return TRUE

}

// 初始化窗口声明

BOOL InitWindows(HINSTANCE hInstance, int nCmdShow, char *lpszClassName, char *lpTitle)

{

//3、创建窗口

hwnd = CreateWindow(

lpszClassName, 

lpTitle, 

WS_OVERLAPPEDWINDOW,

CW_USEDEFAULT, 

0, 

600, 

450, 

NULL, 

NULL, 

hInstance, 

NULL

)

//4、显示窗口

ShowWindow(hwnd, nCmdShow)

UpdateWindow(hwnd)

return TRUE

}

// 回调函数定义

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)

{

HDC         hDC          // 定义设备环境句柄

HPEN        hPen         // 定义画笔句柄

HBRUSH      hBrush       // 定义画刷句柄

PAINTSTRUCT PtStr        // 定义包含绘制信息的结构体变量

POINT       pCenterPoint // 定义一个圆尽心点的坐标

int         nRadious = 50// 定义圆的半径

double      fAngle       // 叶片的直边与水平轴的夹角

switch(message)

{

case WM_PAINT:

{ // 处理绘图消息

hDC = BeginPaint(hwnd, &PtStr)        // 得到设备句柄

SetMapMode(hDC, MM_ANISOTROPIC)       // 设置映像模式

SetWindowExtEx(hDC, 400, 300, NULL)   // 设置窗口区域(逻辑单位)

SetViewportExtEx(hDC, 600, 450, NULL) // 设置视口区域(物理单位)

SetViewportOrgEx(hDC, 300, 200, NULL) // 设置视口原点坐标为(300, 200)

// 绘制外圆

hPen = (HPEN)GetStockObject(BLACK_PEN)

SelectObject(hDC, hPen)

Ellipse(hDC, -100, -100, 100, 100)

// 绘制风车的叶片

// 1、画红色叶片

hBrush = CreateSolidBrush(RGB(255, 0, 0)) 

SelectObject(hDC, hBrush)

fAngle = 2 * Pi / nMaxNumber * nNum

pCenterPoint.x = (int)(nRadious * cos(fAngle))

pCenterPoint.y = (int)(nRadious * sin(fAngle))

Pie(

hDC, 

pCenterPoint.x - nRadious, pCenterPoint.y - nRadious, 

pCenterPoint.x + nRadious, pCenterPoint.y + nRadious, 

(int)(pCenterPoint.x + nRadious * cos(fAngle)),

(int)(pCenterPoint.y + nRadious * sin(fAngle)), 

(int)(pCenterPoint.x + nRadious * cos(fAngle + Pi)), 

(int)(pCenterPoint.y + nRadious * sin(fAngle + Pi))

)

// 2、画天蓝色叶片

hBrush = CreateSolidBrush(RGB(255, 255, 0)) 

SelectObject(hDC, hBrush)

pCenterPoint.x = (int)(nRadious * cos(fAngle + 2 * Pi / 3))

pCenterPoint.y = (int)(nRadious * sin(fAngle + 2 * Pi / 3))

Pie(

hDC, 

pCenterPoint.x - nRadious, pCenterPoint.y - nRadious, 

pCenterPoint.x + nRadious, pCenterPoint.y + nRadious, 

(int)(pCenterPoint.x + nRadious * cos(fAngle + 2 * Pi / 3)), 

(int)(pCenterPoint.y + nRadious * sin(fAngle + 2 * Pi / 3)), 

(int)(pCenterPoint.x + nRadious * cos(fAngle + Pi + 2 * Pi / 3)),

(int)(pCenterPoint.y + nRadious * sin(fAngle + Pi + 2 * Pi / 3))

)

// 2、画黄色叶片

hBrush = CreateSolidBrush(RGB(0, 255, 255)) 

SelectObject(hDC, hBrush)

pCenterPoint.x = (int)(nRadious * cos(fAngle + 4 * Pi / 3))

pCenterPoint.y = (int)(nRadious * sin(fAngle + 4 * Pi / 3))

Pie(

hDC, 

pCenterPoint.x - nRadious, pCenterPoint.y - nRadious, 

pCenterPoint.x + nRadious, pCenterPoint.y + nRadious, 

(int)(pCenterPoint.x + nRadious * cos(fAngle + 4 * Pi / 3)), 

(int)(pCenterPoint.y + nRadious * sin(fAngle + 4 * Pi / 3)), 

(int)(pCenterPoint.x + nRadious * cos(fAngle + Pi + 4 * Pi / 3)),

(int)(pCenterPoint.y + nRadious * sin(fAngle + Pi + 4 * Pi / 3))

)

nNum++ // 当前充数增加1

Sleep(50) //等待0.1秒

InvalidateRect(hwnd, NULL, 1) // 重绘窗口区域

DeleteObject(hPen)

DeleteObject(hBrush)

EndPaint(hwnd, &PtStr)

break

}

case WM_DESTROY:

{

// 调用 PostQuitMessage 发出 WM_QUIT 消息

PostQuitMessage(0)

}

default:

{

return DefWindowProc(hwnd, message, wParam, lParam)

}

}

return 0

}

VS旋枝槐散转大风车是一款能够帮助你快速编写代码的工具,它提供了许多便捷的功能来加速开发流程。下面详细介绍如何使用VS旋转大风车。

第一步,安装VS旋转大风车。在Visual Studio软件商店中搜索VS旋转大风车插件并下载安装。

第二步,启动VS旋转大风车。在Visual Studio中单击“工具”菜单,在下拉菜单中选择“VS旋转大风车”选项,即可启动该插件。

第三步,配置VS旋转大风车。在d出的对话框中,选择要配置的项目类型和语言,并根据需要配置其他选项。完成配置后,单击“确定”按钮。

第四步,使用VS旋转大风车。在代码编辑器中右键单击任何一个方法名,然后在d出的菜单中选择“旋转大风车”,VS旋转大风车将会自动生成该方法的测试代码并打开测试文件。

第五步,运行测试代码。在测试文件中编写完测试用例后,点击“运行所有测试”按钮或使用快捷键Ctrl+R, A运行测试代码。测试框架将自动运行测试用例并输出测试结果。

总之,VS旋转大风车是一款非常实用的工具,能够猛氏极大地提高编码效率,减少开发时的重复劳动。上述步骤只是一个简单的使用教程,如果想要更深入地了解该插件的功能明春和用法,建议参考相关文档或查阅其他资料。

由于现在电脑没有组态王软件 我没法验证。告诉你下面几个方面

1 这个图形的动画链接是否有旋转属性。有的话就按照普通旋转处理。参考前面你看到的我的回答

2 利用隐藏属性。将好几个风车旋转角度的画面重叠放在一起,然后显示条件为变量“显示”分别局中为1,2,3,4.等行培等。建档腊唯立一个变量“开始旋转”及其控制按钮, 在动画连接里面的“d起”里 编写

if(\\本站点\开始旋转==0)

\\本站点\开始旋转=1

else

\\本站点\开始旋转=0

然后在画面属性里命令语言里编写

if( \\本站点\显示<=4&&\\本站点\开始旋转==1)

\\本站点\显示= \\本站点\显示+1

if( \\本站点\显示>4)

\\本站点\显示= 0

注意,命令语言里时间最好选择100毫秒 这样旋转的快一点


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12337917.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存