| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5045 人关注过本帖
标题:[求助]在窗口中画一个旋转的风车,风车中有三个叶片,颜色分别为红、黄和蓝 ...
只看楼主 加入收藏
john520
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2007-5-25
收藏
 问题点数:0 回复次数:10 
[求助]在窗口中画一个旋转的风车,风车中有三个叶片,颜色分别为红、黄和蓝,叶片外
题目:在窗口中画一个旋转的风车,风车中有三个叶片,颜色分别为红、黄和蓝,叶片外侧有一个外接圆。
谁能帮我解答哈。。用VC++解决。。。
搜索更多相关主题的帖子: 叶片 黄和蓝 中画 风车 窗口 
2007-05-28 12:36
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
给你转移下,会有更多人帮你!

Fight  to win  or  die...
2007-05-28 12:42
john520
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2007-5-25
收藏
得分:0 

谢谢拉。。。。。希望能帮我把代码发给我下。。非常感谢~~~~

2007-05-28 12:46
john520
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2007-5-25
收藏
得分:0 
转移怎么没人答啊???
版主。。难道上面没人做这样的题目么??
2007-05-30 05:50
dragonfly
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:1024
专家分:0
注 册:2006-3-20
收藏
得分:0 
设置一个Timer,每隔设定的时间让风车旋转一定的角度,画。。。

2007-05-30 13:54
john520
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2007-5-25
收藏
得分:0 

是用VC++做...不知道怎么设置.......

2007-05-30 14:14
dragonfly
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:1024
专家分:0
注 册:2006-3-20
收藏
得分:0 
CWnd::SetTimer
UINT SetTimer( UINT nIDEvent, UINT nElapse, void (CALLBACK EXPORT* lpfnTimer)(HWND, UINT, UINT, DWORD) );

Return Value

The timer identifier of the new timer if the function is successful. An application passes this value to the KillTimer member function to kill the timer. Nonzero if successful; otherwise 0.

Parameters

nIDEvent

Specifies a nonzero timer identifier.

nElapse

Specifies the time-out value, in milliseconds.

lpfnTimer

Specifies the address of the application-supplied TimerProc callback function that processes the WM_TIMER messages. If this parameter is NULL, the WM_TIMER messages are placed in the application’s message queue and handled by the CWnd object.

Remarks

Installs a system timer. A time-out value is specified, and every time a time-out occurs, the system posts aWM_TIMER message to the installing application’s message queue or passes the message to an application-defined TimerProc callback function.

The lpfnTimer callback function need not be named TimerProc, but it must be defined as follows:

void CALLBACK EXPORT TimerProc(
HWND hWnd, // handle of CWnd that called SetTimer
UINT nMsg, // WM_TIMER
UINT nIDEvent // timer identification
DWORD dwTime // system time
);

Timers are a limited global resource; therefore it is important that an application check the value returned by the SetTimer member function to verify that a timer is actually available.


2007-05-31 09:46
john520
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2007-5-25
收藏
得分:0 

这是吗???????主要的那个风扇转动和那个叶子的设置没呢....用VC++里的Win32.....

2007-06-01 20:04
suibian1234
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2007-10-5
收藏
得分:0 

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

#include "stdafx.h"
#include "resource.h"
#include <iostream.h>
#include <math.h>
#include <stdlib.h>
#include <stdio.h>

#define MAX_LOADSTRING 100
#define pi 3.1415926535


int Num=2,MaxNum=20;
// Global Variables:
HINSTANCE hInst; // current instance
TCHAR szTitle[MAX_LOADSTRING]; // The title bar text
TCHAR szWindowClass[MAX_LOADSTRING]; // The title bar text

// Foward declarations of functions included in this code module:
ATOM MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM);

int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.
MSG msg;
HACCEL hAccelTable;

// Initialize global strings
LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
LoadString(hInstance, IDC_LX4_8_1, szWindowClass, MAX_LOADSTRING);
MyRegisterClass(hInstance);

// Perform application initialization:
if (!InitInstance (hInstance, nCmdShow))
{
return FALSE;
}

hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_LX4_8_1);

// Main message loop:
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}

return msg.wParam;
}

//
// FUNCTION: MyRegisterClass()
//
// PURPOSE: Registers the window class.
//
// COMMENTS:
//
// This function and its usage is only necessary if you want this code
// to be compatible with Win32 systems prior to the 'RegisterClassEx'
// function that was added to Windows 95. It is important to call this function
// so that the application will get 'well formed' small icons associated
// with it.
//
ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEX wcex;

wcex.cbSize = sizeof(WNDCLASSEX);

wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = (WNDPROC)WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_LX4_8_1);
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = (LPCSTR)IDC_LX4_8_1;
wcex.lpszClassName = szWindowClass;
wcex.hIconSm = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL);

return RegisterClassEx(&wcex);
}

//
// FUNCTION: InitInstance(HANDLE, int)
//
// PURPOSE: Saves instance handle and creates main window
//
// COMMENTS:
//
// In this function, we save the instance handle in a global variable and
// create and display the main program window.
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;

hInst = hInstance; // Store instance handle in our global variable

hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

if (!hWnd)
{
return FALSE;
}

ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);

return TRUE;
}

//
// FUNCTION: WndProc(HWND, unsigned, WORD, LONG)
//
// PURPOSE: Processes messages for the main window.
//
// WM_COMMAND - process the application menu
// WM_PAINT - Paint the main window
// WM_DESTROY - post a quit message and return
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
HPEN hPen;
HBRUSH hBrush;
int CentreX,CentreY,CentreX1,CentreY1,CentreX2,CentreY2;
double flag;
PAINTSTRUCT ps;
HDC hdc;
TCHAR szHello[MAX_LOADSTRING];
LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING);

switch (message)
{
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// Parse the menu selections:
switch (wmId)
{
case IDM_ABOUT:
DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: Add any drawing code here...]

SetWindowExtEx(hdc,650,540,NULL);
SetViewportExtEx(hdc,650,540,NULL);
SetViewportOrgEx(hdc,350,250,NULL);
hPen=CreatePen(PS_SOLID,2,RGB(255,255,255));
SelectObject(hdc,hPen);
Ellipse(hdc,-200,-200,200,200);
DeleteObject(hPen);
hBrush=CreateSolidBrush(RGB(255,0,0));
SelectObject(hdc,hBrush);
hPen=CreatePen(PS_SOLID,0.1,RGB(255,0,0));
SelectObject(hdc,hPen);
flag=2*pi/MaxNum*Num;
CentreX=(int)(100*cos(flag));
CentreY=(int)(100*sin(flag));
Pie(hdc,CentreX-100,CentreY-100,
CentreX+100,CentreY+100,
(int)(CentreX+100*cos(flag)),(int)(CentreY+100*sin(flag)),
(int)(CentreX+100*cos(flag+pi)),(int)(CentreY+100*sin(flag+pi))
);

DeleteObject(hBrush);
DeleteObject(hPen);
hBrush=CreateSolidBrush(RGB(0,255,0));
SelectObject(hdc,hBrush);
hPen=CreatePen(PS_SOLID,0.1,RGB(0,255,0));
SelectObject(hdc,hPen);
CentreX1=(int)(100*cos(flag+2*pi/3));
CentreY1=(int)(100*sin(flag+2*pi/3));
Pie(hdc,CentreX1-100,CentreY1-100,
CentreX1+100,CentreY1+100,
(int)(CentreX1+100*cos(flag+2*pi/3)),(int)(CentreY1+100*sin(flag+2*pi/3)),
(int)(CentreX1+100*cos(flag+2*pi/3+pi)),(int)(CentreY1+100*sin(flag+2*pi/3+pi))
);

DeleteObject(hBrush);
DeleteObject(hPen);
hBrush=CreateSolidBrush(RGB(0,0,255));
SelectObject(hdc,hBrush);
hPen=CreatePen(PS_SOLID,0.1,RGB(0,0,255));
SelectObject(hdc,hPen);
CentreX2=(int)(100*cos(flag+4*pi/3));
CentreY2=(int)(100*sin(flag+4*pi/3));
Pie(hdc,CentreX2-100,CentreY2-100,
CentreX2+100,CentreY2+100,
(int)(CentreX2+100*cos(flag+4*pi/3)),(int)(CentreY2+100*sin(4*pi/3)),
(int)(CentreX2+100*cos(flag+pi+4*pi/3)),(int)(CentreY2+100*sin(flag+pi+4*pi/3))
);
DeleteObject(hBrush);
DeleteObject(hPen);
RECT rt;
GetClientRect(hWnd, &rt);
DrawText(hdc, szHello, strlen(szHello), &rt, DT_CENTER);
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}

// Mesage handler for about box.
LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:
return TRUE;

case WM_COMMAND:
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
{
EndDialog(hDlg, LOWORD(wParam));
return TRUE;
}
break;
}
return FALSE;
}

2007-10-05 11:17
suibian1234
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2007-10-5
收藏
得分:0 
接上文,其实不想直接喂你的,但是我现在正好做到这个题目,所以顺带把代码发出来,大家研究研究,因为我的这个程序还有些需要微调的地方。为了发这个帖子,至少写了10个垃圾回贴,此处不表。
别看上面的程序1大串,真正手写的部分只有一点点
首先:新建1个WIN32工程,(我用的是老土的C++)
创建1个"hello world!"
打上常用的头文件
宏定义PI(圆周率)
在LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)函数中定义画笔Hpen
画刷hBrush
算法是找到风车轴线中点,调用椭圆函数 Ellipse()和画饼函数Pie();
至于你说的风车“转”,由Num,MaxNum两个控制变量控制,实际起作用的是Flag这个参数,
其他如定义SetWindowExtEx SetViewportExtEx SetViewportOrgEx不明白或是忘了,自己去翻书。
我吃饭去了
2007-10-05 11:26
快速回复:[求助]在窗口中画一个旋转的风车,风车中有三个叶片,颜色分别为红、黄 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.041873 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved