用Windows API 画太极图

重要的API函数

Ellipse() : 画椭圆
API原型
 BOOL Ellipse(
      HDC hdc,
      int xLeft,
      int yTop,
      int xRight,
      int yBottom,
 );

 
Arc() : 画圆弧
API原型
 BOOL Arc(
      HDC hdc,
      int xLeft,
      int yTop,
      int xRight,
      int yBottom,
      int xStart,
      int yStart,
      int xEnd,
      int yEnd,
 );

 
Chord() : 画圆弧将两个端点并连线
 BOOL Chord(
      HDC hdc,
      int xLeft,
      int yTop,
      int xRight,
      int yBottom,
      int xStart,
      int yStart,
      int xEnd,
      int yEnd,
 );

代码

#include<windows.h>
#include<math.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow)
{static TCHAR szAppName[] = TEXT("MyWindows");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)){MessageBox(NULL,TEXT("这个程序需要在Windows NT才能运行!"),szAppName,MB_ICONERROR);return 0;}hwnd = CreateWindow(szAppName,TEXT("太极图"),WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,600,600,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;RECT rect;HBRUSH hBrush;HBRUSH hOldBrush;HPEN hPen;switch(message){case WM_PAINT:hdc = BeginPaint(hwnd,&ps);GetClientRect(hwnd,&rect);hBrush = CreateSolidBrush(RGB(255, 255, 255));   hOldBrush = (HBRUSH)SelectObject(hdc,hBrush);  Chord(hdc,100,100,500,500,300,500,300,100);     SelectObject(hdc, hOldBrush);DeleteObject(hBrush);//画右边半圆(白色)hBrush = CreateSolidBrush(RGB(0, 0, 0));   hOldBrush = (HBRUSH)SelectObject(hdc,hBrush);Chord(hdc,100,100,500,500,300,100,300,500);    SelectObject(hdc, hOldBrush);DeleteObject(hBrush);//画左边半圆(黑色)hBrush = CreateSolidBrush(RGB(0, 0, 0));   hOldBrush = (HBRUSH)SelectObject(hdc,hBrush);   Ellipse(hdc,200,100,400,300);       SelectObject(hdc, hOldBrush);DeleteObject(hBrush);//画太极图阴块大头hPen = CreatePen(PS_SOLID, 1, RGB(255,255,255));SelectObject(hdc, hPen);hBrush = CreateSolidBrush(RGB(255, 255, 255));   hOldBrush = (HBRUSH)SelectObject(hdc,hBrush);Chord(hdc,200,300,400,500,300,300,300,500);    SelectObject(hdc, hOldBrush);DeleteObject(hBrush);//画太极图阳块大头hPen = CreatePen(PS_SOLID, 1, RGB(0,0,0));SelectObject(hdc, hPen);Arc(hdc,200,300,400,500,300,300,300,500);//描边hBrush = CreateSolidBrush(RGB(0, 0, 0));   hOldBrush = (HBRUSH)SelectObject(hdc,hBrush);   Ellipse(hdc,270,370,330,430);       SelectObject(hdc, hOldBrush);DeleteObject(hBrush);//阴小点hBrush = CreateSolidBrush(RGB(255, 255, 255));   hOldBrush = (HBRUSH)SelectObject(hdc,hBrush);   Ellipse(hdc,270,170,330,230);       SelectObject(hdc, hOldBrush);DeleteObject(hBrush);//阳小点EndPaint(hwnd,&ps);return 0;case WM_DESTROY:PostQuitMessage(0);return 0;}return DefWindowProc(hwnd,message,wParam,lParam);
}

知识点:

给形状上色

hBrush = CreateSolidBrush(RGB(0, 0, 0));  //设置画刷的RGB颜色值为(0,0,0)---黑色;
hOldBrush = (HBRUSH)SelectObject(hdc,hBrush);
/*画形状,填充的颜色是黑色*/
SelectObject(hdc, hOldBrush);
DeleteObject(hBrush);

改变形状线条颜色

hPen = CreatePen(PS_SOLID, 1, RGB(255,255,255));   //设置画笔的RGB颜色值为(255,255,255)---白色
SelectObject(hdc, hPen);
/*画形状,线条的颜色是白色*/

Windows编程画太极图相关推荐

  1. windows编程之画五角星

    这边我们介绍一下利用windows编程如何来画五角星,下面主要介绍了3种与五角星相关图形的画法: 1.正常的五角星 代码如下: #include<windows.h> #include&l ...

  2. Windows 编程,画笔画刷以及几何图形的绘制

    Windows编程,画笔画刷的介绍 画笔,可以用以下代码新建一个画笔对象: HPEN hpen = CreatePen(PS_SOLID, 1, RGB(255,0,0)); 可以看到,画笔的Crea ...

  3. windows编程之画刷

    windows编程之画刷 文章目录 windows编程之画刷 @[toc] 涉及到的函数 GetStockObject CreateSolidBrush CreateHatchBrush Create ...

  4. python怎么画简单图片-python中简单易学的绘图:用turtle画太极图

    为什么想画太极图呢?因为我儿子不知道是看了哪本书还是哪个电视,竟然特地打印出一张太极图要挂在大门口,我赶紧说祖宗这挂在门外,别人看见了还以为咱家出什么事了,你喜欢就挂自己卧室门口吧,于是这张图就成了他 ...

  5. 怎么用python画简单的图-python中简单易学的绘图:用turtle画太极图

    为什么想画太极图呢?因为我儿子不知道是看了哪本书还是哪个电视,竟然特地打印出一张太极图要挂在大门口,我赶紧说祖宗这挂在门外,别人看见了还以为咱家出什么事了,你喜欢就挂自己卧室门口吧,于是这张图就成了他 ...

  6. 【Windows编程】系列第三篇:文本字符输出

    2019独角兽企业重金招聘Python工程师标准>>> 上一篇我们展示了如何使用Windows SDK创建基本控件,本篇来讨论如何输出文本字符. 在使用Win32编程时,我们常常要输 ...

  7. 一个物理学家学习Windows编程的感受

    最近学习用Visual C++ 作为平台的Windows 编程,感觉到学习这种编程技术的过程与学习物理的思维差异非常大.最明显的,比如对于物理课本,在学习的时候值得一个字一个词的认真去读,有时候需要读 ...

  8. python画简便的图-python中简单易学的绘图:用turtle画太极图

    为什么想画太极图呢?因为我儿子不知道是看了哪本书还是哪个电视,竟然特地打印出一张太极图要挂在大门口,我赶紧说祖宗这挂在门外,别人看见了还以为咱家出什么事了,你喜欢就挂自己卧室门口吧,于是这张图就成了他 ...

  9. python怎么画简单图-python中简单易学的绘图:用turtle画太极图

    为什么想画太极图呢?因为我儿子不知道是看了哪本书还是哪个电视,竟然特地打印出一张太极图要挂在大门口,我赶紧说祖宗这挂在门外,别人看见了还以为咱家出什么事了,你喜欢就挂自己卧室门口吧,于是这张图就成了他 ...

最新文章

  1. 超干货!一位博士生80篇机器学习相关论文及笔记下载
  2. oracle /+append/好用吗,ORACLE-insert /*+append*/提高性能
  3. 取得前九条之后的数据
  4. eclipse+scala+java+maven 整合实践
  5. python函数修饰参数_Python 函数参数的填坑之路
  6. POJ 2886 Who Gets the Most Candies?
  7. 幻方c语言程序,幻方算法 C语言描述
  8. 多个路由指向同一个页面_Flutter路由导航
  9. Delphi控件大全
  10. 浅析高速公路网络数据集制作
  11. 如何将docx文件制作为ftl模板
  12. uniapp 定位服务_uniapp使用高德地图定位
  13. html5光线传感器,光线传感器是什么 光线传感器分类
  14. Android程序员二本出身,阿里架构师经验分享
  15. VS Code 报Windows找不到文件‘chrome‘. 请确定文件名是否正确后,再试一次。八种解决办法
  16. ZOJ-1005-Jugs
  17. 2016中国软件行业发展趋势及网络化发展分析【图】
  18. 管理故事:保罗与小男孩
  19. Kafka之四:Kafka与Streaming集成
  20. 小学生python游戏编程arcade----基本知识1

热门文章

  1. MATLAB resample函数
  2. response.sendError() 和 response.setStatus()的区别
  3. 通俗易懂说:snprintf scnprintf
  4. git push错误failed to push some refs to的解决
  5. 欧拉折线法解常微分方程C语言,第五章:常微分方程数值解法第一节欧拉法
  6. 你们要的网页版matlab来了,速领!
  7. Python不用声明变量吗
  8. 有监督,无监督,半监督,弱监督、自监督学习
  9. LSTM时间序列预测MATLAB代码模板(无需调试)
  10. python3.7安装完成pip无法使用