windows窗口创建的过程(具体步骤,都是固定的)。在回调函数中画了一个图案,但这不是本程序的重点。重点在于创建窗口的过程,下面是代码

这是非常重要的一步,对于理解有windowsAPI架设的框架是非常必要的,例如MFC框架

//
// Win32 Application
//
//#include<windows.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#define Pi 3.1415926
/*
1.定义WNDCLASS对象并初始化;
2.将WNDCLASS注册到windows系统中;
3.创建WNDCLASS对象模样的窗口并显示;
4.进入消息回环;
*/BOOL InitWindowsClass(HINSTANCE hInstance);
unsigned short InitWindowsRegister(const WNDCLASS *lpWndClass);
BOOL InitWindowsCreate(HINSTANCE HInstance,int nCmdShow);
long __stdcall WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam);int __stdcall WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{MSG Message;if(!InitWindowsClass(hInstance))return FALSE;if(!InitWindowsCreate(hInstance,nCmdShow))return FALSE;while(GetMessage(&Message,0,0,0)){TranslateMessage(&Message);DispatchMessage(&Message);}return Message.wParam;
}BOOL InitWindowsCreate(HINSTANCE hInstance,int nCmdShow)
{HWND hWnd;hWnd=CreateWindow("Polygon","五边形",  // lpClassName lpWindowNameWS_OVERLAPPEDWINDOW,             // dwStyleCW_USEDEFAULT,0,CW_USEDEFAULT,0,  // x y nWidth nHeightNULL,      // hWndParentNULL,      // hMenuhInstance,  // hInstanceNULL);      // lpParamif(!hWnd)return FALSE;ShowWindow(hWnd,nCmdShow);UpdateWindow(hWnd);return TRUE;
}BOOL InitWindowsClass(HINSTANCE hInstance)
{WNDCLASS WndClass;WndClass.cbClsExtra      =0;WndClass.cbWndExtra     =0;WndClass.hbrBackground  =(HBRUSH)(GetStockObject(WHITE_BRUSH));WndClass.hCursor        =LoadCursor(NULL,IDC_ARROW);WndClass.hIcon         =LoadIcon(NULL,IDI_APPLICATION);WndClass.hInstance     =hInstance;WndClass.lpfnWndProc    =WndProc;WndClass.lpszClassName    ="Polygon";WndClass.lpszMenuName =NULL;WndClass.style           =0;return InitWindowsRegister(&WndClass);
}unsigned short InitWindowsRegister(const WNDCLASS *lpWndClass)
{return RegisterClass(lpWndClass);
}long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam)
{HDC hDC;HPEN hPen;HBRUSH hBrush;   PAINTSTRUCT PtStr;  // 绘图信息结构体POINT lpTriangle[3];// 三角形点结构数组double dfOuterRadious=200.0,dfInnerRadious;// 外部、内部正五边形外接圆半径POINT  lpOuterPoints[5],  lpInnerPoints[5];// 外部、内部正五边形点结构数组dfInnerRadious=dfOuterRadious*sin(0.1*Pi)/sin(126.0/180*Pi);// 计算内外正五边形坐标点for(int i=0;i<5;i++){lpOuterPoints[i].x=(long)(dfOuterRadious*cos(i*72.0/180*Pi));lpOuterPoints[i].y=(long)(dfOuterRadious*sin(i*72.0/180*Pi));lpInnerPoints[i].x=(long)(dfInnerRadious*cos(i*72.0/180*Pi+36.0/180*Pi));lpInnerPoints[i].y=(long)(dfInnerRadious*sin(i*72.0/180*Pi+36.0/180*Pi));      }switch(iMessage){case WM_PAINT:{hDC=BeginPaint(hWnd,&PtStr);      // 得到设备环境句柄SetMapMode(hDC,MM_ANISOTROPIC);      // 设置映射模式SetWindowOrgEx(hDC,-200,-200,NULL);    // 设置坐标原点// 绘制正五边形hPen=CreatePen(PS_SOLID,2,RGB(255,0,0));// redSelectObject(hDC,hPen);Polygon(hDC,lpOuterPoints,5);// 绘制 5+5个三角形for(i=0;i<5;i++){lpTriangle[0]=lpOuterPoints[i%5];lpTriangle[1]=lpInnerPoints[i%5];lpTriangle[2]=lpOuterPoints[(i+1)%5];hBrush=CreateSolidBrush(RGB(0,255,0));// greenSelectObject(hDC,hBrush);Polygon(hDC,lpTriangle,3);lpTriangle[2]=lpInnerPoints[(i+4)%5];hBrush=CreateSolidBrush(RGB(0,0,255));// blueSelectObject(hDC,hBrush);Polygon(hDC,lpTriangle,3);}// 绘制内五边形hBrush=CreateSolidBrush(RGB(012,123,234));SelectObject(hDC,hBrush);Polygon(hDC,lpInnerPoints,5);//     将五角星的五个顶点连接(呵呵 算的不对)MoveToEx(hDC,lpOuterPoints[0].x,lpOuterPoints[0].y,NULL); for (i=1;i<3;i++){hPen=CreatePen(PS_SOLID,5,RGB(0,44,0));SelectObject(hDC,hPen);LineTo(hDC,lpOuterPoints[(i+2)%5].x,lpOuterPoints[(i+2)%5].y);              }hPen=(HPEN)(GetStockObject(PS_NULL));// DeleteObject(hPen);DeleteObject(hBrush);EndPaint(hWnd,&PtStr);return 0;}case WM_DESTROY:{PostQuitMessage(0);return 0;}default:{return(DefWindowProc(hWnd,iMessage,wParam,lParam));}}
}

程序运行的结果

呵呵

windows程序窗体创建流程模型A--利用基本数据类型相关推荐

  1. windows程序窗体创建流程模型A--发送自定义消息逻辑上出现Bug

    创建windows窗体的基本框架中,定义一个消息宏,发送自定义消息,代码如下 #include<windows.h>#define CustomMessages WM_USER+10 HW ...

  2. ETH:Windows搭建ETH(区块链技术)利用Web端和小程序端两种方式调用ETH上的SC智能合约

    ETH:Windows搭建ETH(区块链技术)利用Web端和小程序端两种方式调用ETH上的SC智能合约 目录 1.Geth安装.配置文件.与ETH节点交互 1.1.下载并安装好geth客户端 1.2. ...

  3. Windows消息循环理解及窗体创建步骤

    首先理解一句话:"Windows"向应用程序发送了一条消息.这里是指Windows调用了该程序内部的一个函数. 当UpdateWindow被调用后,新建的窗口在屏幕便完全可见了.此 ...

  4. java添加窗体中_java中利用JFrame创建窗体 【转】

    Java代码 publicclassTest(){ publicstaticvoidmain(String[] args){ JFrame frame = newJFrame(); JPanel pa ...

  5. 启动盘安装windows系统时提示:“windows安装程序无法创建新的分区,也找不到现有分区”的解决方法

    在使用启动盘安装Windows系统时有时会遇到无法安装的问题,选定主分区或新建主分区出现"windows安装程序无法创建新的分区,也找不到现有分区"的提示信息,导致安装失败.提示信 ...

  6. 关于linuxC语言中创建进程,利用execlp函数执行.c程序问题

    关于linuxC语言中创建进程,利用execlp函数执行.c程序问题 对于一个小白来说,这个系统调用真的太难了,完全摸不着头脑啊,一搜execlp函数,全是执行的命令,什么传参硬是没懂. 不过说到底, ...

  7. 2013 Mac Air 装Win7双系统问题-安装程序无法创建新的分区,也无法定位系统 Windows无法安装所需的文件,错误代码0x80070570

    此非主讲安装过程,主说明过程中遇到的两个问题自己的解决方式. 准备: 准备以下Win7纯净版iso镜像,用Boot Camp方式安装Windows到16GU盘. Win7纯净版资源 问题一: Boot ...

  8. t430服务器安装系统,戴尔Dell T430安装Windows 2008 R2教程,解决安装程序无法创建新的系统分区,也无法定位现有系统分区。...

    图文教程 https://www.dell.com/support/article/zh-cn/SLN307187/ 安装系统时所需的磁盘阵列卡驱动 SAS RAID驱动, https://www.d ...

  9. 获取windows程序界面数据

    文章目录 结论 可以尝试的其他方向 最后的挣扎 基础知识 win7/win10查看某个进程的句柄数 句柄的概念 Windows MFC.SDK和API的区别和联系 Windows MFC(C++开发) ...

最新文章

  1. 在Ubuntu 16.10 安装 git 并上传代码至 git.oschina.net
  2. 读写EEPROM遇到的问题:16位地址的内容都是最后写入的数据。
  3. Mysql实现企业级日志管理、备份与恢复
  4. python学习(字典、用户输入和while循环)
  5. 十进制负数的二进制表示法
  6. Redis5.0重量级特性Stream尝鲜
  7. 2016年1月20日总结
  8. mysqli.php,PHP: MySQLi - Manual
  9. ClickHouse大数据分析技术与实战
  10. html5交互设计,国外五个交互设计很棒的酷站推荐,酷毙了
  11. 上界通配符、下界通配符
  12. Even-Odd Increments
  13. 练习22,密码锁【广搜BFS】
  14. 两国的“微”与“博”——Twitter与新浪微博的功能差异化探究
  15. 开源工业缺陷数据集汇总,持续更新中(已更新28个)
  16. webhub123 前端技术社区和技术交流学习网站导航
  17. 范飞龙的博客 | 目录
  18. Find X3系列能实现OPPO的高端破局之梦吗?
  19. P44 单行子查询案例分析
  20. 普通青年 文艺青年 2B青年

热门文章

  1. 系列有什么区别_哈弗的F系列和H系列,有什么区别?
  2. python zope 工作流_使用C语言来扩展Python程序和Zope服务器的教程
  3. PHP编译参数 --prefix=/usr/local/php 的“深远”影响
  4. 南开大学计算机考研2019分数线,2019年南开大学考研复试分数线已公布
  5. python 近期用到的基础知识汇总(四)
  6. matlablib显示图片
  7. Spring MVC提供http接口供下载文件
  8. 【转】认识 C++ 中的 explicit 关键字
  9. VMware ESXI 5.0群集+ISCSI存储
  10. tomcat启动时报下面的错