画图函数——点,线,矩形等等

矩形应用,画一个3行3列的矩形组合

#include <windows.h>
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
#define edge 30 //矩形边长
HBRUSH hbrush[2];//刷子数组
void paint(HDC hdc);//画图声明

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow)
{
     static TCHAR szAppName[] = TEXT ("HelloWin") ;
     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))return 0 ;            
     hwnd = CreateWindow (szAppName,                  
                          TEXT ("一个简单的Win32程序"), 
                          WS_OVERLAPPEDWINDOW,        
                          CW_USEDEFAULT,              
                          CW_USEDEFAULT,              
                          CW_USEDEFAULT,             
                          CW_USEDEFAULT,              
                          NULL,                      
                          NULL,                       
                          hInstance,                  
                          NULL) ;                     
     
     ShowWindow (hwnd, iCmdShow) ;         
     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)
{

     HDC hdc;
     PAINTSTRUCT ps;
     switch (message)
     {          
     case WM_PAINT:
      hdc=BeginPaint(hwnd,&ps);
      paint(hdc);
      EndPaint(hwnd,&ps);
      return 0;
      
     case WM_DESTROY:
         DeleteObject(hbrush[0]);
         DeleteObject(hbrush[1]);
          PostQuitMessage (0) ; //在消息队列中插入一条“退出”消息
          return 0 ;
     }
     return DefWindowProc (hwnd, message, wParam, lParam);//执行默认的消息处理
}
void paint(HDC hdc)
{    
    int i,j;
    hbrush[0]=CreateSolidBrush(RGB(255,0,0));
    hbrush[1]=CreateSolidBrush(RGB(255,255,0));      
        for(j=0;j<3;j++) //
            for(i=0;i<3;i++)//
        {
                if(j%2==0)
                {

                Sleep(50);
                SelectObject(hdc,hbrush[0]);    
                Rectangle(hdc,i*edge,j*edge,(i+1)*edge,(j+1)*edge);    
                }
                else
                {    
                Sleep(100);
                SelectObject(hdc,hbrush[1]);    
                Rectangle(hdc,i*edge,j*edge,(i+1)*edge,(j+1)*edge);    
                }

        }
}
View Code

 

转载于:https://www.cnblogs.com/tinaluo/p/5429229.html

### 关于C++画图函数或图形库的使用方法 在C++中实现绘图功能可以通过多种方式完成,具体取决于目标平台和需求复杂度。以下是几种常见的方法及其对应的教程: #### Windows 平台下的 GDI 绘图 在 Windows 系统下,可以利用 GDI(Graphics Device Interface)来绘制简单的图形。GDI 提供了一系列 API 函数用于处理设备上下文 (Device Context, DC),从而实现在窗口上绘制线条、矩形、圆等形状。 例如,在创建一个基本的绘图程序时,通常会定义 `PAINTSTRUCT` 结构体并获取设备上下文句柄 (`HDC`) 来执行具体的绘图操作[^1]: ```cpp PAINTSTRUCT ps; HDC hdc = BeginPaint(hWnd, &ps); // 执行绘图命令... EndPaint(hWnd, &ps); ``` 这种技术适合初学者学习基础的二维绘图概念,但对于更复杂的场景可能显得不够灵活。 #### EGE 库支持下的简易绘图 EGE 是 Easy Graphics Library 的缩写,它提供了一套简单易用的功能接口帮助开发者快速构建具有视觉效果的应用程序。下面是一个典型的例子展示如何通过调用 `pieslice()` 方法绘制扇形区域[^2]: ```cpp #include <bits/stdc++.h> #include <ege.h> using namespace std; using namespace ege; int main(){ initgraph(640, 480); // 初始化图形模式 pieslice(100, 100, 45, 210, 50); // 参数分别为中心位置(x,y), 起始角度,终止角度以及半径大小 getch(); closegraph(); // 清理资源退出 return 0; } ``` 此代码片段展示了如何初始化一个固定尺寸的布,并在其上面渲染特定几何形态的过程。 #### Matplotlib-CPP —— 类似 Python 的解决方案 尽管原生 C++ 缺乏像 Python 那样强大而直观的数据可视化工具链,但借助第三方扩展如 **Matplotlib-CPP** ,我们可以在一定程度上弥补这一差距。该项目旨在移植 Pyplot 功能至纯 C/C++环境中运行,允许用户按照熟悉的风格编写脚本生成高质量图表[^3]: 然而值得注意的是,由于依赖关系较为复杂加上跨语言绑定特性等原因,实际部署过程中可能会遇到兼容性障碍或者编译错误等问题亟待解决。 另外还有其他选项比如 JKQtPlotter 它们各自具备独特优势同时也伴随着一定局限性因此需根据具体情况权衡选用最合适的方案。 #### Cairo 图形库简介 对于那些寻求更高层次抽象而又不愿受限于单一操作系统环境的人来说,Cairo 可能是个不错的选择.Cairo 是一个多平台开源软件库,提供了矢量图形引擎用来制作高品质输出无论是屏幕显示还是打印文档皆可胜任.其中一个常用功能便是加载外部图片素材作为背景层的一部分呈现给最终用户查看[^4]. 示例演示了怎样从本地磁盘载入 PNG 格式的图像文件: ```cpp cairo_surface_t *surface = cairo_image_surface_create_from_png("example.png"); if(surface == nullptr){ fprintf(stderr,"Failed to load image\n"); }else{ cairo_t *cr = cairo_create(surface); /* Perform drawing operations here */ cairo_destroy(cr); cairo_surface_destroy(surface); } ``` 以上介绍了几个不同方向上的可能性供大家参考实践. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值