windows程序窗体创建流程模型A--利用基本数据类型
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--利用基本数据类型相关推荐
- windows程序窗体创建流程模型A--发送自定义消息逻辑上出现Bug
创建windows窗体的基本框架中,定义一个消息宏,发送自定义消息,代码如下 #include<windows.h>#define CustomMessages WM_USER+10 HW ...
- ETH:Windows搭建ETH(区块链技术)利用Web端和小程序端两种方式调用ETH上的SC智能合约
ETH:Windows搭建ETH(区块链技术)利用Web端和小程序端两种方式调用ETH上的SC智能合约 目录 1.Geth安装.配置文件.与ETH节点交互 1.1.下载并安装好geth客户端 1.2. ...
- Windows消息循环理解及窗体创建步骤
首先理解一句话:"Windows"向应用程序发送了一条消息.这里是指Windows调用了该程序内部的一个函数. 当UpdateWindow被调用后,新建的窗口在屏幕便完全可见了.此 ...
- java添加窗体中_java中利用JFrame创建窗体 【转】
Java代码 publicclassTest(){ publicstaticvoidmain(String[] args){ JFrame frame = newJFrame(); JPanel pa ...
- 启动盘安装windows系统时提示:“windows安装程序无法创建新的分区,也找不到现有分区”的解决方法
在使用启动盘安装Windows系统时有时会遇到无法安装的问题,选定主分区或新建主分区出现"windows安装程序无法创建新的分区,也找不到现有分区"的提示信息,导致安装失败.提示信 ...
- 关于linuxC语言中创建进程,利用execlp函数执行.c程序问题
关于linuxC语言中创建进程,利用execlp函数执行.c程序问题 对于一个小白来说,这个系统调用真的太难了,完全摸不着头脑啊,一搜execlp函数,全是执行的命令,什么传参硬是没懂. 不过说到底, ...
- 2013 Mac Air 装Win7双系统问题-安装程序无法创建新的分区,也无法定位系统 Windows无法安装所需的文件,错误代码0x80070570
此非主讲安装过程,主说明过程中遇到的两个问题自己的解决方式. 准备: 准备以下Win7纯净版iso镜像,用Boot Camp方式安装Windows到16GU盘. Win7纯净版资源 问题一: Boot ...
- t430服务器安装系统,戴尔Dell T430安装Windows 2008 R2教程,解决安装程序无法创建新的系统分区,也无法定位现有系统分区。...
图文教程 https://www.dell.com/support/article/zh-cn/SLN307187/ 安装系统时所需的磁盘阵列卡驱动 SAS RAID驱动, https://www.d ...
- 获取windows程序界面数据
文章目录 结论 可以尝试的其他方向 最后的挣扎 基础知识 win7/win10查看某个进程的句柄数 句柄的概念 Windows MFC.SDK和API的区别和联系 Windows MFC(C++开发) ...
最新文章
- 在Ubuntu 16.10 安装 git 并上传代码至 git.oschina.net
- 读写EEPROM遇到的问题:16位地址的内容都是最后写入的数据。
- Mysql实现企业级日志管理、备份与恢复
- python学习(字典、用户输入和while循环)
- 十进制负数的二进制表示法
- Redis5.0重量级特性Stream尝鲜
- 2016年1月20日总结
- mysqli.php,PHP: MySQLi - Manual
- ClickHouse大数据分析技术与实战
- html5交互设计,国外五个交互设计很棒的酷站推荐,酷毙了
- 上界通配符、下界通配符
- Even-Odd Increments
- 练习22,密码锁【广搜BFS】
- 两国的“微”与“博”——Twitter与新浪微博的功能差异化探究
- 开源工业缺陷数据集汇总,持续更新中(已更新28个)
- webhub123 前端技术社区和技术交流学习网站导航
- 范飞龙的博客 | 目录
- Find X3系列能实现OPPO的高端破局之梦吗?
- P44 单行子查询案例分析
- 普通青年 文艺青年 2B青年
热门文章
- 系列有什么区别_哈弗的F系列和H系列,有什么区别?
- python zope 工作流_使用C语言来扩展Python程序和Zope服务器的教程
- PHP编译参数 --prefix=/usr/local/php 的“深远”影响
- 南开大学计算机考研2019分数线,2019年南开大学考研复试分数线已公布
- python 近期用到的基础知识汇总(四)
- matlablib显示图片
- Spring MVC提供http接口供下载文件
- 【转】认识 C++ 中的 explicit 关键字
- VMware ESXI 5.0群集+ISCSI存储
- tomcat启动时报下面的错