Windows程序之滚动的正弦曲线(一)
#include <windows.h>
#include <math.h>
#define ID_TIMER 1
#define NUM 1000
#define STEP 10
#define TWOPI (2 * 3.14159)
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
int WINAPI WinMain ( HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT ("SineWave") ;
HWND hwnd ;
MSG msg ;
WNDCLASS wndclass ;
wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc= 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 = szAppName ;
if (!RegisterClass (&wndclass)){
MessageBox ( NULL, TEXT ("Program requires Windows NT!"),
szAppName, MB_ICONERROR) ;
return 0 ;
}
hwnd = CreateWindow ( szAppName, TEXT ("Sine Wave Using Polyline"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance, NULL) ;
ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;
while (GetMessage (&msg, NULL, 0, 0)){
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return msg.wParam ;
}
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static int cxClient, cyClient ;
HDC hdc ;
int i;
PAINTSTRUCT ps ;
static POINT apt [NUM] ;
static HPEN hPen1,hPen2;
static int step;
int copyApt[STEP];
switch (message)
{
case WM_SIZE:
cxClient = LOWORD(lParam);
cyClient = HIWORD(lParam);
for(i = 0; i < NUM; i++)
{
apt[i].x = (int)(i * cxClient / NUM);
apt[i].y = (int) (cyClient * (1 - sin(TWOPI * i / NUM)) / 2);
}
return 0;
case WM_CREATE:
hPen1 = CreatePen(PS_SOLID,4,RGB(255,0,0));
hPen2 = CreatePen(PS_SOLID,2,RGB(0,255,0));
SetTimer(hwnd,ID_TIMER,100,NULL);
return 0;
case WM_TIMER:
for(i = 0; i < STEP; i++)
{
copyApt[i] = apt[i].y;
}
for(i = 0; i < NUM-STEP; i++)
{
apt[i].y = apt[i+STEP].y;
}
for(i = 0; i < STEP; i++){
apt[i + NUM - STEP].y = copyApt[i];
}
InvalidateRect(hwnd,NULL,true);
UpdateWindow(hwnd);
return 0;
case WM_PAINT:
hdc = BeginPaint(hwnd,&ps);
SelectObject(hdc,hPen1);
MoveToEx(hdc,0,cyClient/2,NULL);
LineTo(hdc,cxClient,cyClient/2);
SelectObject(hdc,hPen2);
Polyline (hdc, apt, NUM) ;
EndPaint(hwnd,&ps);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
KillTimer(hwnd,ID_TIMER);
DeleteObject(hPen1);
DeleteObject(hPen2);
return 0;
}
return DefWindowProc(hwnd,message,wParam,lParam);
}
分享到:
相关推荐
Windows程序之滚动的正弦曲线(一)
(1)Windows 函数查找; (2)Windows程序实现的步骤,相应函数的用法; (3)绘制简单的正弦曲线;
屏幕显示移动的正弦曲线图像,为Windows课程设计之用。
2.10 控件数组典型实例 cc实例076 向窗体中动态添加控件 cc 实例077 公交线路模拟 第3章 图形技术 3.1 绘制图形 cc实例078 绘制正弦曲线 cc实例079 绘制艺术图案 cc实例080 画图程序 cc实例081 ...
cc实例078 绘制正弦曲线 cc实例079 绘制艺术图案 cc实例080 画图程序 cc实例081 绘制立体模型 cc实例082 利用IFS算法绘制自然景物 3.2 图像预览 cc实例083 图片自动预览程序 ...
cc实例078 绘制正弦曲线 cc实例079 绘制艺术图案 cc实例080 画图程序 cc实例081 绘制立体模型 cc实例082 利用IFS算法绘制自然景物 3.2 图像预览 cc实例083 图片自动预览程序 ...
实例078 绘制正弦曲线 实例079 绘制艺术图案 实例080 画图程序 实例081 绘制立体模型 实例082 利用IFS算法绘制自然景物 3.2 图像预览 实例083 图片自动预览程序 实例084 图片批量浏览 实例085 浏览大幅BMP...
实例078 绘制正弦曲线 实例079 绘制艺术图案 实例080 画图程序 实例081 绘制立体模型 实例082 利用IFS算法绘制自然景物 3.2 图像预览 实例083 图片自动预览程序 实例084 图片批量浏览 实例085 浏览大幅BMP...
没法下载,到这里折腾一把试试。 本文由abc2253130贡献 doc文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。 C#(WINFORM)学习 一、 C#基础 基础 类型和变量 类型和变量 类型 C# 支持两...
分别介绍了C#语言基础、Windows窗体及常用控件、Windows高级控件、控件公共属性、方法及事件、数据库开发、文件、数据流与注册表、GDI+绘图技术和C#高级编程,共包含562个C#编程中常用的属性、方法、类和各种技术,...