WinAPI——模拟正弦波
/***************************
*
* 程序名称 : 模拟正弦波
* 作 者 : doodle777
* 版 本 : 1.1
* 日 期 : 2012-10-19
* 说 明 : 1.1--解决了闪屏问题
*
***************************/ #include<Windows.h>
#include<math.h> #define NUM 1000
#define PI 3.14159 LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM) ;
void Draw(HWND, float, float) ; static int cxClient, cyClient, xOffset, yOffset;
POINT apt[NUM] ;
static int A = ;
static float w = , g = ; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT("模拟正弦波") ;
HWND hwnd ;
MSG msg ;
WNDCLASS wndclass ; wndclass.cbClsExtra = NULL ;
wndclass.cbWndExtra = NULL ;
wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH) ;
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW) ;
wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION) ;
wndclass.hInstance = hInstance ;
wndclass.lpfnWndProc = WndProc ;
wndclass.lpszClassName = szAppName ;
wndclass.lpszMenuName = NULL ;
wndclass.style = CS_HREDRAW | CS_VREDRAW ; if(!RegisterClass(&wndclass))
{
MessageBox(NULL, TEXT("This Program Requires Windows NT !"), szAppName, MB_ICONERROR) ;
return ;
} hwnd = CreateWindow(szAppName, TEXT("模拟正弦波(上下左右控制)"), WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,CW_USEDEFAULT,
NULL, NULL, hInstance, NULL) ;
ShowWindow(hwnd, iCmdShow) ;
UpdateWindow(hwnd) ; while(TRUE)
{
if(PeekMessage(&msg, NULL, , , PM_REMOVE))
{
if(msg.message == WM_QUIT)
break ;
TranslateMessage(&msg) ;
DispatchMessage(&msg) ;
}
else
{
Draw(hwnd, w, g) ;
// w += 1 ;
// g += PI / 6 ; }
}
return msg.wParam ;
} LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
RECT rect ; rect.bottom = cyClient ;
rect.left = ;
rect.right = cxClient ;
rect.top = ; switch(message)
{
case WM_SIZE :
cxClient = LOWORD(lParam) ;
cyClient = HIWORD(lParam) ;
xOffset = cxClient / ;
yOffset = cyClient / ;
A = cyClient / ; return ; case WM_KEYDOWN :
InvalidateRect(hwnd, &rect, TRUE) ;
switch(wParam)
{
case VK_UP :
g += PI / ;
break ;
case VK_DOWN :
g -= PI / ;
break ;
case VK_LEFT :
w -= ;
break ;
case VK_RIGHT :
w += ;
break ;
}
return ; case WM_DESTROY :
PostQuitMessage() ;
return ;
}
return DefWindowProc(hwnd, message, wParam, lParam) ;
} void Draw(HWND hwnd, float w, float g)
{
HDC hdc ;
PAINTSTRUCT ps ;
int t ; hdc = GetDC(hwnd) ; MoveToEx(hdc, , yOffset, NULL) ;
LineTo(hdc, cxClient, yOffset) ;
MoveToEx(hdc, xOffset, , NULL) ;
LineTo(hdc, xOffset, cyClient) ; apt[].x = ;
apt[].y = yOffset + A * sin(g) ;
MoveToEx(hdc, apt[].x, apt[].y, NULL) ;
for(t = ; t < NUM ; t++)
{
apt[t].x = cxClient * t / NUM ;
apt[t].y = yOffset + A * sin(w * t / NUM + g ) ;
LineTo(hdc, apt[t].x, apt[t].y) ;
MoveToEx(hdc, apt[t].x, apt[t].y, NULL) ;
} ReleaseDC(hwnd, hdc) ;
}
WinAPI——模拟正弦波的更多相关文章
- 如何使用C#操作WinAPI
Windows API是对Windows操作系统的API函数,在C#中调用Windows API的实质是托管代码对非托管代码的调用. 主要使用的格式就是: using System.Runtime.I ...
- Model-Agnostic Meta-Learning for Fast Adaptation of Deep Networks(用于深度网络快速适应的元学习)
摘要:我们提出了一种不依赖模型的元学习算法,它与任何梯度下降训练的模型兼容,适用于各种不同的学习问题,包括分类.回归和强化学习.元学习的目标是在各种学习任务上训练一个模型,这样它只需要少量的训练样本就 ...
- 使用WinAPI全局热键注册和全局模拟按键
一.全局热键注册 1.先引用DLL [System.Runtime.InteropServices.DllImport("user32.dll")] //导入WinAPI publ ...
- STM32 使用DMA+DAC+TIMER 输出正弦波
之前已经简单论述过,根据我个人菜鸟的了解与认识,对之前的知识进行整理回顾: DMA:我的理解就是一个通道,或者是一座桥梁.在静态内存到静态内存,或者外设到静态内存间的一个通讯的通道.建立这个通道的好处 ...
- WinAPI【远程注入】三种注入方案【转】
来源:http://www.cnblogs.com/okwary/archive/2008/12/20/1358788.html 导言: 我 们在Code project(www.codeprojec ...
- WINIO64位模拟键鼠操作
最近玩游戏有点入迷,心急升级经验,于是某天开始"挂尸体",一系列手动操作之后决定写一个外挂,模拟一系列键盘和鼠标操作,没做过游戏winform也用得少,开始以为只要简单调用winA ...
- 我用Cocos2d-x模拟《Love Live!学院偶像祭》的Live场景(四)
[前言和思路整理] 千呼万唤Shǐ出来!最近莫名被基友忽悠着进舰坑了,加上要肝LL活动,又碰上公司项目紧张经常加班,这一章发得比以往时候来得更晚一些,抱歉啊. 上一章我们实现了BeatObjectMa ...
- WINAPI实现简易扫雷游戏
//扫雷 #include <windows.h> #include <windowsx.h> #include <strsafe.h> #include < ...
- 用C代码简要模拟实现一下RPC(远程过程调用)并谈谈它在代码调测中的重要应用【转】
转自:http://blog.csdn.net/stpeace/article/details/44947925 版权声明:本文为博主原创文章,转载时请务必注明本文地址, 禁止用于任何商业用途, 否则 ...
随机推荐
- lua学习-1
最近打算学习quick cocos2dx,所以首先打算学习一下lua这门语言,Lua 是一个小巧的脚本语言,轻量级,便于扩展. Lua脚本基本的数据类型:nil.boolean.number.stri ...
- 折半插入排序(Binary Insertion Sort)的C语言实现
原创文章,转载请注明来自钢铁侠Mac博客http://www.cnblogs.com/gangtiexia 折半插入排序(Binary Insertion Sort)的基本思想是将新记录插入到已经 ...
- 周赛A题
A Time Limit:2000MS Memory Limit:32768KB 64bit IO Format:%lld & %llu Description By d ...
- jQuery全选、反选、全不选
原文链接:https://yq.aliyun.com/articles/33443 HTML内容部分: <ul id="items"> <li> <l ...
- iOS证书快要过期怎么办?
说法一: 1.先revoke你的Certificate,重新生成一个新的. 2.Edit一下你的证书,选择新的Certificate. 3.下载覆盖之前的证书,就可以了. 这个帐号发布的产品不会受到影 ...
- 构建高可用web站点学习(二)
web站点的缓存学习 缓存在web应用里面十分常见,也有各种各样的缓存,从请求开始一直到代码处理的阶段都可以采取缓存.下面就逐一介绍: 一.客户端缓存(浏览器和http方面) 前端页面缓存主要遵循ht ...
- ExtJs MVC应用架构示例
项目目录结构 (源码)2. app.js Ext.Loader.setConfig({ enabled : true, paths : { 'Ext' : 'extjs', 'App' : 'app' ...
- [转]C# FileSystemWatcher监控指定文件或目录的文件的创建、删除、改动、重命名等活动
觉得这个很常用..比如一些软件. http://www.rabbit8.cn/DoNet/407.html FileSystemWatcher控件主要功能: 监控指定文件或目录的文件的创建.删 ...
- gnu cc扩展和ABI
gnc cc扩展标准c的语法,非常强大!!!详情请见: http://uw714doc.sco.com/cgi-bin/info2html?%28gcc.info%29C%2520Extensions ...
- 配置Session变量的生命周期
在Web.config文件中配置Session变量的生命周期是在<sessionState></sessionState>节中完成的,在配置Session的生命周期时,可以设置 ...