学习windows编程 day3 之窗口绘画一:点线绘制
#include <windows.h>
#include <math.h> LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam); #define PI 3.1415926
#define NUM 1000 int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
//声明全局数据:类名
static TCHAR szClassName[] = TEXT("MyWindows");
HWND hwnd;
MSG msg; //注册窗口类
WNDCLASS wndclass; wndclass.hInstance = hInstance;
wndclass.lpszClassName = szClassName;
wndclass.cbClsExtra = ;
wndclass.cbWndExtra = ;
wndclass.lpfnWndProc = WndProc;
wndclass.lpszMenuName = NULL;
wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.style = CS_HREDRAW; if (!RegisterClass(&wndclass))
{
MessageBox(NULL, TEXT("this program must run in Windows NT!"), szClassName, MB_ICONERROR);
return ;
} hwnd = CreateWindow(
szClassName,
TEXT("MyFirstPractice"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL
); ShowWindow(hwnd, nShowCmd);
UpdateWindow(hwnd); while (GetMessage(&msg, NULL, , ))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
} return msg.wParam;
} LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
RECT rect;
int i;
static int padding;
static int xCount, yCount; //线条数
static int xClient, yClient;//窗口大小 switch (message)
{
case WM_CREATE:
padding = ;
break;
case WM_SIZE:
xClient = LOWORD(lParam);
yClient = HIWORD(lParam); xCount = xClient / padding - ;
yCount = yClient / padding - ;
break;
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps); GetClientRect(hwnd, &rect);
//1 //画点
// for (i = rect.left; i < rect.right;i++)
// {
// //画像素点--->成线
// //setpixel返回的是个颜色rgb,因为系统有时候会自动用相近颜色替换,效率不高
// //setpixelv返回bool类型,效率更高
// //但是当用这些函数绘制图形,会快速出入栈,效率不高
// SetPixel(hdc, i, 100, RGB(255, 0, 0));
// } //2 //画线
//movetoex将当前绘图位置移动到某个具体的点,可以获得之前的位置坐标
// POINT pt;
// MoveToEx(hdc, 100, 50, &pt); //默认起点是左上角
// //LineTo(hdc, pt.x, pt.y);
// LineTo(hdc, 150, 100);
// LineTo(hdc, 300, 400);
//
// //getcurrentpositionex获取当前绘图点坐标
// GetCurrentPositionEx(hdc, &pt); //3 //绘制一个网格
//先绘制上到下
//获取线条数量
// for (i = 1; i <= xCount;i++)
// {
// MoveToEx(hdc, i*padding, 0, NULL);
// LineTo(hdc, i*padding, yClient);
// }
//
// //再绘制左到右
// for (i = 1; i <= yCount;i++)
// {
// MoveToEx(hdc, 0, i*padding, NULL);
// LineTo(hdc, xClient, i*padding);
// } //4 //绘制网格2
//rect就是客户区矩形......
// for (int x = 0; x < rect.right;x+=50)
// {
// MoveToEx(hdc, x, 0, NULL);
// LineTo(hdc, x, rect.bottom);
// }
//
// for (int x = 0; x < rect.bottom; x += 50)
// {
// MoveToEx(hdc, 0, x, NULL);
// LineTo(hdc, rect.right, x);
// } //5. //画一个五角星
// MoveToEx(hdc, 30, 10,NULL);
// LineTo(hdc, 20, 50);
// LineTo(hdc, 50, 20);
// LineTo(hdc, 10, 20);
// LineTo(hdc, 40, 50);
// LineTo(hdc, 30, 10); //6. //折线绘制五角星
// POINT apt[] = { 30, 10, 20, 50, 50, 20, 10, 20, 40, 50, 30, 10 };
// Polyline(hdc, apt, 6);
// PolylineTo(hdc, apt, 6); //会重当前位置为起点开始向顶点绘制 //7. //同时绘制多个图像
// POINT apt2[] = {
// 30, 10, 20, 50, 50, 20, 10, 20, 40, 50, 30, 10, //五角星
// 120, 120, 180, 120, 120, 180,120,120, //直角三角形
// 300, 300, 300, 400, 400, 400, 400, 300,300,300 //矩形
// }; // DWORD count[] = { 6, 4, 5 };
// PolyPolyline(hdc, apt2, count, 3);; // MoveToEx(hdc, 100, 100, NULL);
// LineTo(hdc, 500, 100);
//8. //绘制sin曲线
// POINT apt3[400];
// double x, y,rad;
// for (int i = 0; i < 400;i+=1)
// {
// x = i;
// rad = PI / 180.0 * (360.0 / 400.0)*i;
// y = sin(rad);
//
// apt3[i].x = x+100;
// apt3[i].y = y*100+100;
// }
// Polyline(hdc, apt3, 400); //9. //h绘制sin曲线,规范
POINT apt4[NUM];
MoveToEx(hdc, , yClient / , NULL);
LineTo(hdc, xClient, yClient / ); for (int j = ; j < NUM;j++)
{
apt4[j].x = j*xClient/NUM;
apt4[j].y = (int)(( - sin(PI * / NUM*j)) / * yClient);
}
Polyline(hdc, apt4, NUM); DrawText(hdc, L"this is my first pragram win32", -, &rect, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
break;
case WM_DESTROY:
PostQuitMessage();
return ;
} return DefWindowProc(hwnd, message, wParam, lParam);
}
学习windows编程 day3 之窗口绘画一:点线绘制的更多相关文章
- 学习windows编程 day3 之窗口绘画二:边框绘制函数
#include <windows.h> LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM l ...
- 学习windows编程 day3 之滚动条完善
1.不再使用setscrollrange,setscrollpos,getscrollrange,getscrollpos这些函数,这只是有助于理解其中运行原理 2.改用setscrollinfo,g ...
- 学习windows编程 day3 之 设置当前的背景颜色
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRU ...
- 学习windows编程 day3 之 自定义画笔的两种方法
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRU ...
- 有一定基础的 C++ 学习者该怎样学习 Windows 编程?
人的心理有个奇异的特性:一项知识一旦学会之后,学习过程中面临的困惑和不解非常快就会忘得干干净净,似乎一切都是自然而然,本来就该这种.因此,关于「怎样入门」这类问题,找顶尖高手来回答,未必能比一个刚入门 ...
- 我为什么学习Windows编程
前一段时间在看TCP/IP,在图书馆里面找了不少的书,其中有几本书还是不错的.比如: <Windows网络与通信程序设计(第二版)> 王艳平著 <WinSock网络编程经络> ...
- 学习windows编程 day4 之视口和窗口
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRU ...
- Windows编程___创建窗口
创建Windows窗口不难,可以简要的概括为: 1,# 注册一个窗口类 填充WNDCLASS结构 书写窗口消息处理函数WinProc 2,# 创建一个窗口 填写基本的窗口信息 3,# 显示窗口 4,# ...
- 学习windows编程 day2 之滚动条使用
相关函数: setscrollrange,setscrollpos,getscrollrange,getscrollpos 使用滚动条时我们需要进行的操作: 1.初始化滚动条范围和位置 在窗口创建时W ...
随机推荐
- 响应数据传出(springMVC)
1. SpringMVC 输出模型数据概述 提供了以下几种途径输出模型数据: ModelAndView: 处理方法返回值类型为 ModelAndView 时, 方法体即可通过该对象添加模型数据 ...
- Export OracleDB Schema To Doc
叶正盛先生做的mini工具. https://github.com/rgqancy/DBExportDoc 使用中遇到过两个小问题: 1.数据库的表名不能带.(我一个很初级的同事建立的数据库是demo ...
- MyBatis自动生成Java/C#的Bean(Entity)的等价MYSQL实现函数
这是单元测试代码:TESTTITLECASE.sql SELECT TITLECASE('ABC_DEF_hgk') as BEANNAME FROM DUAL; SELECT TITLECASE(' ...
- Mysql8 连接提示 Client does not support authentication protocol requested by server; consider upgrading MySQL client 解决方法
USE mysql;ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';FLUSH PR ...
- 关于flask自带web应用服务器Werkzeug 使用requests请求时出现的错误。
先说明一下当时的情况,下午遇到一个需求需要先从jd那边拿到图片然后上传到本地的cdn服务器来获取对应的ident 和地址. 于是就需要首先拿到京东的图片url,然后按照图片url去请求图片到内存然后再 ...
- 在保存Bitmap的时候出现“GDI出现一般性错误”
今天开发的时候出现过一个非常奇怪的问题,在保存最终的Bitmap图片的时候,明明使用Directory.Exist(filePath)函数判断当前路径的时候,这些路径都是有用的并且都是合法的,但是就是 ...
- Struts2 Intercepter 笔记
以前一直对Struts2的自定义拦截器(intercepter)不是很清楚,今天仔细研究了下,终于搞懂了,现在记录对拦截器的总结如下: 1:自定义拦截器的作用一般就是用来实现系统权限控制比较多: 2: ...
- Web Scraper爬取就是这么简单
这应该是最全的一个文档了 https://www.jianshu.com/p/e4c1561a3ea7 所以我就不介绍了,大家直接看就可以了,有问题可以提出来,我会针对问题对文章进行补充~
- eclipse中用maven创建web项目
上一节中完成了本地的maven环境搭建,在eclipse中怎么创建一个maven项目呢 一.eclipse中配置maven环境 eclipse版本4.3 1.打开菜单Help->Eclipse ...
- Codeforces 1106F Lunar New Year and a Recursive Sequence | BSGS/exgcd/矩阵乘法
我诈尸啦! 高三退役选手好不容易抛弃天利和金考卷打场CF,结果打得和shi一样--还因为queue太长而unrated了!一个学期不敲代码实在是忘干净了-- 没分该没分,考题还是要订正的 =v= 欢迎 ...