首页 > 编程语言 >Win32编程之绘图编程(四)

Win32编程之绘图编程(四)

时间:2023-09-12 22:22:05浏览次数:41  
标签:绘图 300 hWnd 编程 Win32 hdc HDC 100

一、绘图基础

  • 绘图设备DC(Device Context),绘图上下文/绘图描述表
  • HDC:DC句柄,表示绘图设备
  • GDI:Windows graphics device interface(Win32提供的绘图API)
  • 颜色的使用:COLORREF:实际DWORD;例如:COLORREF nColor = 0;
  • 赋值使用RGB宏:例如:nColor = RGB(0,0, 255)
  • 获取RGB值:GetRValue/GetGValue/GetBValue;例如:BYTE nRed = GetRValue(nColor)

计算机使用红、绿、蓝:

  R:0~255

  G:0~255

  B:0~255

每一个颜色是3个字节24位,保存范围:0~2^24-1

二、基本图形绘制

(1).SetPixel设置指定点的颜色

COLORREF SetPixel(
    HDC hdc, //DC句柄
    int x,//X坐标
    int y,//Y坐标
    COLORREF crColor//设置的颜色
);        
返回指定点原来的颜色

示例代码: 

void OnDrawPoint(HDC hdc) {
	for (int i = 0; i < 256; i++) {
		for (int j = 0; j < 256; j++) {
			SetPixel(hdc, i, j, RGB(i, j, 0));
		}
	}
}

void OnPaint(HWND hWnd) {
	PAINTSTRUCT ps = { 0 };
	HDC hdc = BeginPaint(hWnd, &ps);
	OnDrawPoint(hdc);
	EndPaint(hWnd, &ps);
}

//窗口处理函数(自定义,处理消息)
LRESULT CALLBACK WindProc(HWND hWnd, UINT msgID, WPARAM wParam, LPARAM lParam) {
	switch (msgID) {
	case WM_PAINT: {
		OnPaint(hWnd);
		break;
	}
	default:
		break;
	}

	return DefWindowProc(hWnd, msgID, wParam, lParam);
}

(2).线的使用(直接,弧线)  

  • MoveToEx:指名窗口当前点
  • LineTo:从窗口当前点到指定点绘制一条直线
  • 当前点:上一次绘图时最后一点,初始为(0,0)点

示例代码:

void OnDrawLine(HDC hdc) {
	//改变窗口当前点坐标
	MoveToEx(hdc, 100, 100, NULL);
	LineTo(hdc, 300, 300);
	LineTo(hdc, 0, 300);
}

(3).封闭图形:能够用画刷填充的图形(Rectangle/Ellipse)

示例代码:

void OnDrawRect(HDC hdc) {
	Rectangle(hdc, 100, 100, 300, 300);
}

void OnDrawEll(HDC hdc) {
	Ellipse(hdc, 100, 100, 300, 300);
}

  

标签:绘图,300,hWnd,编程,Win32,hdc,HDC,100
From: https://www.cnblogs.com/TechNomad/p/17697985.html

相关文章

  • 面向对象编程一(类和对象的应用)
    1.类是什么?类是对具有相同属性的和行为的事物/物体的总称。又来描述同一事物的属性和行为。2.什么叫对象?客观存在的事物皆称为对象,具体一点说就是某一类事物的具体体现。3.类与对象的关系:类是对对象的描述,对象是类的具体体现。案例一:#定义一个Person类:#构建属性:姓名/年龄/性......
  • 怒赞了,阿里P8面试官推荐的Java高并发核心编程文档
    文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录博客园版为您奉上珍贵的学习资源:免费赠送:《尼恩Java面试宝典》持续更新+史上最全+面试必备2000页+面试必备+大厂必备+涨薪必备免费赠送:《尼恩技术圣经+高并发系列PDF》,帮你实现技术自由,完成职业升级,薪......
  • day七-Python之路 - 面向对象学习编程进阶
    Python之路,Day7-面向对象编程进阶 本节内容:面向对象高级语法部分经典类vs新式类静态方法、类方法、属性方法类的特殊方法反射异常处理Socket开发基础作业:开发一个支持多用户在线的FTP程序面向对象高级语法部分经典类vs新式类把下面代码用python2......
  • PLC中ST编程的定时器
     PLC中ST编程的定时器TON(IN:=,PT:=,Q=>,ET=>);PT:定时时间,ET:当前累计时间,当IN为TURE,延时到定时时间后,Q为TURE;......
  • 在.NET中实现事件驱动编程模式
    当在.NET中实现事件驱动编程模式时,你可以创建自定义事件和委托,然后让对象触发事件,以便其他对象可以订阅并响应这些事件。这种模式常用于构建可扩展和松散耦合的应用程序。以下是一个基本示例,演示如何在C#中实现事件驱动编程。步骤1:创建一个C#控制台应用程序首先,创建一个新的C#控......
  • 系统编程 文件描述符重定向
    open打开一个文件,返回的是该文件文件描述符程序中用文件描述符表管理文件描述符 默认1024个【0-1023】0 1 2 被系统占用 0是标准输入,1是标准输出,2是标准错误#include<stdio.h>#include<unistd.h>#include<sys/types.h>#include<sys/stat.h>#include<fcntl......
  • 零代码编程:用ChatGPT批量合并ts文件
    文件夹中有很多个ts后缀的视频文件,要合并成一个视频文件,在ChatGPT中可以这样输入提示词:你是一个Python编程专家,要完成一个批量合并ts文件的任务,具体步骤如下:打开文件夹:C:\Users\dell\Pictures\CameraRoll\index-f1-v1-a1_20230825221408\Part_0按照文件名称的顺序将文件夹中所有.t......
  • 《Java编程思想第四版》学习笔记27
    //:DirList2.java//UsesJava1.1anonymousinnerclassesimportjava.io.*;publicclassDirList2{publicstaticFilenameFilterfilter(finalStringafn){//Creationofanonymousinnerclass:returnnewFilenameFilter(){St......
  • JUC并发编程
    JUC并发编程1.什么是JUCjava.util工具包,包,分类业务:普通的线程代码ThreadRunable没有返回值,效率相比Callable相对较低!2.线程和进程线程、进程、如果不能使用一句话说出来的技术,不扎实!进程:一个程序,例如qq.exe,代表一个程序的集合一个进程往往包含多个线程,而一个进......
  • 详解Java多线程编程中线程的启动、中断或终止操作
    ​在Java中start和tun方法可用被用来启动线程,而用interrupt方法来中断或终止线程,以下我们就来详解Java多线程编程中线程的启动、中断或终止操作 线程启动: 1.start()和run()的区别说明start():它的作用是启动一个新线程,新线程会执行相应的run()方法。start()不能被......