[一个好东西]一个自己写的头文件包装-C++简单绘图-draw.h-2.1

[一个好东西]一个自己写的头文件包装-C++简单绘图-draw.h

draw.h里面包含一堆我自制的依赖的头文件,放在最后,可能有一段时间没有更新这些头文件代码了,请去我的主页看最新的依赖文件


这是我自己平常写小程序用的绘图头文件draw.h

//基于Windows的简单绘画当前窗口的头文件draw.h
#ifndef _DRAW_
#define _DRAW_
#include<Windows.h>
#include<math.h>
#include <STDIO.H>
HDC DC=GetDC(GetForegroundWindow());
#include "button.h"
#include "image.h"
#include "strif.h"
#include "windowset.h"
//-------------------------------------------------
void StartDraw(int h,int w);//绘制场景 
void dw_dot(int x,int y,COLORREF rgb);//描点
void dw_rec(int x,int y,int w,int h,COLORREF rgb,bool dr);//矩形
void dw_line(int x1,int y1,int x2,int y2,COLORREF color);//画线
void dw_o(int x,int y,int r,COLORREF color);//圆形
//-------------------------------------------------
void StartDraw(int w,int h){
   
	modeset(w,h);
}
void dw_dot(int x,int y,COLORREF rgb) {
   
	SetPixel(DC,x,y,rgb);
	return;
}
void dw_rec(int x,int y,int w,int h,COLORREF rgb,bool dr/*表示是否实心*/) {
   
	if(dr==true) {
   
		for(int i=0; i<w; i++) {
   
			for(int j=0; j<h; j++) {
   
				SetPixel(DC,x+i,y+j,rgb);
			}
		}
	} else {
   
		dw_line(x,y,x+w,y,rgb);
		dw_line(x,y,x,y+h,rgb);
		dw_line(x+w,y,x+w,y+h,rgb);
		dw_line(x,y+h,x+w,y+h,rgb);
	}
	return;
}
void dw_line(int x1,int y1,int x2,int y2,COLORREF color) {
   
	int dx,dy,n,k;
	double xinc,yinc,x,y;
	dx = x2-x1;
	dy = y2-y1;
	if(abs(dx)-abs(dy)>0)
		n = abs(dx);
	<
C++中,`wxBufferedDC`是一个用于缓存图形操作的设备上下文,它可以在一次绘制操作完成后更新屏幕。下面是一个简单的示例,展示如何使用`wxBufferedDC`来进行多次绘图并在需要时刷新: 首先,你需要包含必要的头文件并设置好窗口环境: ```cpp #include <wx/window.h> #include <wx/dc.h> #include <wx/buffdcdc.h> class MyFrame : public wxFrame { public: MyFrame(const wxString& title) : wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(400, 300)) { } private: void OnPaint(wxPaintEvent& event) { // 创建一个新的缓冲设备上下文 wxBufferedDC bufferedDC(this); bufferedDC.SetBackground(*this->GetBackground()); bufferedDC.Clear(); // 进行多次绘图 for (int i = 0; i < 5; ++i) { DrawSomething(bufferedDC, i); // 如果你想立即显示绘图结果,可以调用Refresh(),但这可能会导致性能下降 // bufferedDC.Refresh(); } // 最后,调用Update()来真正地更新到屏幕上 this->Update(); } void DrawSomething(wxDC& dc, int index) { // 实现你的绘图代码,这里仅作示例 dc.DrawText("Drawing number " + wxString::Format("%d", index), 50, 50); } }; ``` 在这个例子中,我们在`OnPaint`事件处理器中创建了一个`wxBufferedDC`对象,并在循环中多次调用`DrawSomething`函数来绘制内容。注意,`Refresh()`会立即更新视图,但在大型应用中可能会造成不必要的重绘;而`Update()`则是在所有绘图完成后才更新,更高效。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值