当前位置:编程学习 > 网站相关 >>

绘制正弦函数曲线

#include<windows.h>
#include<math.h>
 
 
#define NUM 1000
#define TWOPI (2*3.14159)
 
 
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
 
 
int WINAPI WinMain(  HINSTANCE hInstance,      // handle to current instance
  HINSTANCE hPrevInstance,  // handle to previous instance
  LPSTR lpCmdLine,          // command line
  int nCmdShow              // show state
  )
{
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,nCmdShow);
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;
POINT apt[NUM];
 
 
switch(message)
{
case WM_SIZE:
cxClient = LOWORD (lParam);
cyClient = HIWORD (lParam);
return 0;
 
 
case WM_PAINT:
hdc = BeginPaint(hwnd,&ps);
 
 
MoveToEx(hdc,0,cyClient/2,NULL);
LineTo(hdc,cxClient,cyClient/2);
 
 
for(i=0; i < NUM; i++)
{
apt[i].x = i * cxClient/NUM;
apt[i].y = (int)(cyClient/2 * (1-sin(TWOPI*i/NUM)));
}
 
 
Polyline(hdc,apt,NUM);
EndPaint(hwnd,&ps);
return 0;
 
 
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc (hwnd, message ,wParam ,lParam);
 
 
}
 
 
运行结果如下:
 
 
下面的代码从窗口的左上角开始,在客户区画一个网格,线与线之间相距100个像素。变量 hwnd 是一个窗口句柄,hdc 是一个设备环境句柄, x 和 y 都是整数 :
GetClientRect(hwnd,&rect);
for(x=0; x<rect.right; x+=100)
{
MoveToEx(hdc,x,0,NULL);
LineTo(hdc,x,rect.bottom);
}
 
 
for(y=0; y<rect.bottom; y+=100)
{
MoveToEx(hdc,0,y,NULL);
LineTo(hdc,rect.right,y);
}
用以上的代码替换 BeginPaint 和 EndPaint 之间的内容就可以得到以下效果 :
 
补充:综合编程 , 其他综合 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,