雷火电竞-中国电竞赛事及体育赛事平台

歡迎來到入門教程網(wǎng)!

C語言

當(dāng)前位置:主頁 > 軟件編程 > C語言 >

C語言控制臺(tái)應(yīng)用程序GDI繪制正弦曲線

來源:本站原創(chuàng)|時(shí)間:2020-01-10|欄目:C語言|點(diǎn)擊:

出于本科教學(xué)的目的,需要使用C語言在Visual Studio下控制臺(tái)應(yīng)用程序中動(dòng)態(tài)繪制曲線,在此查閱了一些資料,制作了一個(gè)繪制動(dòng)態(tài)正弦曲線的Demo,大家可根據(jù)這個(gè)例子查閱GDI、GDI+手冊,根據(jù)需求豐富自己的繪圖程序。

#include <windows.h>//引入wingdi.h
#include <stdio.h>
#include <math.h>
#include <time.h>
#include <conio.h>
 
#define PI 3.1416
 
#define ORIGINX 0 //曲線起點(diǎn)X坐標(biāo)
#define ORIGINY 200 //曲線起點(diǎn)Y坐標(biāo)
#define LENGTHX 800 //X坐標(biāo)軸長度
#define LENGTHY 300 //Y坐標(biāo)軸長度
#define XDATALEN 300//X坐標(biāo)數(shù)據(jù)量
 
HDC hdc = 0;//控制臺(tái)繪圖設(shè)備描述句柄 HDC
HPEN hPen, hPen2;//畫筆變量
HPEN hPenOld;
TCHAR title[256];//控制臺(tái)程序標(biāo)題
int times = 0;//繪制次數(shù)變量
double datay[XDATALEN];//曲線縱坐標(biāo)數(shù)組
 
  //繪制清屏矩形
void ClearWind(HDC hdc)
{
 HPEN hPen;
 HBRUSH hBrush;
 hBrush = CreateSolidBrush(RGB(0, 0, 0));
 hPen = CreatePen(PS_SOLID, 0, RGB(0, 0, 0));
 SelectObject(hdc, hBrush);
 SelectObject(hdc, hPen);
 //繪制黑色矩形,范圍可根據(jù)需要自行更改
 Rectangle(hdc, ORIGINX, 0, ORIGINX + LENGTHX + 1, ORIGINY + LENGTHY + 1);
}
 
int main()
{
 //獲取控制臺(tái)標(biāo)題
 GetConsoleTitle(title, 256);
 //先通過FindWindow函數(shù)借助標(biāo)題獲取窗口句柄HWND,之后再利用GetDC函數(shù)借助HWND獲取HDC
 hdc = GetDC(FindWindow(0, title));
 hPen = CreatePen(PS_SOLID, 3, RGB(255, 0, 0));//設(shè)置曲線畫筆,紅色
 hPen2 = CreatePen(PS_SOLID, 3, RGB(0, 0, 255));//設(shè)置X軸畫筆,藍(lán)色
 hPenOld = (HPEN)SelectObject(hdc, hPen);
 
 while (1)
 {
 ClearWind(hdc);//清屏
 hPenOld = (HPEN)SelectObject(hdc, hPen);//選擇畫筆
 MoveToEx(hdc, ORIGINX, ORIGINY, NULL);//移動(dòng)到起點(diǎn)
 
 for (int i = 0; i < XDATALEN; i++)
 {
 datay[i] = sin(0.1*i + times);//生成曲線縱坐標(biāo)數(shù)組
 }
 
 for (int i = 0; i < XDATALEN; i++)
 {
 //繪制線段,連接前一個(gè)點(diǎn)與下一個(gè)點(diǎn),第二個(gè)參數(shù)為目標(biāo)點(diǎn)x坐標(biāo),第三個(gè)參數(shù)為y坐標(biāo)
 LineTo(hdc, LENGTHX * i / XDATALEN + ORIGINX, 0.5 * LENGTHY * datay[i] + ORIGINY);
 }
 //創(chuàng)建繪制x軸的pen并將其選入設(shè)備上下文
 hPenOld = (HPEN)SelectObject(hdc, hPen2);//選擇畫筆
 MoveToEx(hdc, ORIGINX, ORIGINY, NULL);//移動(dòng)到起點(diǎn)
 LineTo(hdc, ORIGINX + LENGTHX, ORIGINY);//繪制X軸直線
 times++;
 Sleep(100);//延時(shí)100ms
 
 if (kbhit())//檢查是否有按鍵按下
 {
 if (_getch() == 0x1b)//若按下ESC鍵跳出循環(huán)
 {
 break;
 }
 }
 }
 
 DeleteObject(hPen);//刪除畫筆
 DeleteObject(hPen2);//刪除畫筆
 return 0;
}

運(yùn)行結(jié)果如下所示:

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持我們。

上一篇:C++ Eigen庫計(jì)算矩陣特征值及特征向量

欄    目:C語言

下一篇:C++實(shí)現(xiàn)數(shù)據(jù)文件存儲(chǔ)與加載

本文標(biāo)題:C語言控制臺(tái)應(yīng)用程序GDI繪制正弦曲線

本文地址:http://www.jygsgssxh.com/a1/Cyuyan/267.html

網(wǎng)頁制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語言數(shù)據(jù)庫服務(wù)器

如果侵犯了您的權(quán)利,請與我們聯(lián)系,我們將在24小時(shí)內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有