Windows应用程序:

WinMain函数(入口函数):

1。

设计窗体类,注冊窗体类。WNDCLASS

2。

创建窗体,显示及更新窗体。

3。

消息循环。

窗体过程函数(回调函数):WindowProc

PS:Dos程序入口函数为main,Windows程序入口为WinMain,都是由系统直接调用。

windows程序执行过程

#include<windows.h>
#include<stdio.h> LRESULT CALLBACK WinSunProc( //窗体过程函数(回调函数)声明
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
); int WINAPI WinMain( //WinMain函数。windows应用程序的入口
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
)
{
WNDCLASS wndcls; //实例化一个窗体类对象,并设置各个属性
wndcls.cbClsExtra = 0;
wndcls.cbWndExtra = 0;
wndcls.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
wndcls.hCursor = LoadCursor(NULL,IDC_CROSS);
wndcls.hIcon = LoadIcon(NULL,IDI_ERROR);
wndcls.hInstance = hInstance;
wndcls.lpfnWndProc = WinSunProc;
wndcls.lpszClassName = "hepengtao";
wndcls.lpszMenuName = NULL;
wndcls.style = CS_HREDRAW | CS_VREDRAW; RegisterClass(&wndcls); //注冊窗体类 HWND hwnd;
hwnd = CreateWindow("hepengtao","窗体标题",WS_OVERLAPPEDWINDOW, //创建窗体
0,0,600,400,NULL,NULL,hInstance,NULL); ShowWindow(hwnd,SW_SHOWNORMAL); //显示窗体
UpdateWindow(hwnd); //更新窗体 MSG msg;
while(GetMessage(&msg,NULL,0,0)) //从消息队列中取出消息,当得到 WM_QUIT 消息时返回0
{
TranslateMessage(&msg);//按下键盘按键时。系统得到 WM_KEYDOWN 和 WM_KEYUP 消息。经过该函数转变为 WM_CHAR 消息
DispatchMessage(&msg); //将得到的消息传递给回调函数
}
return 0;
} LRESULT CALLBACK WinSunProc( //定义窗体过程函数(回调函数)
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
)
{
switch(uMsg)
{
case WM_CHAR: //键盘按下字母后,发送 WM_CHAR 消息
char szChar[20];
sprintf(szChar,"char is %d",wParam);
MessageBox(hwnd,szChar,"弹窗标题",0);
break;
case WM_LBUTTONDOWN: //鼠标左键按下后。发送 WM_LBUTTONDOWN 消息
MessageBox(hwnd,"mouse clicked","弹窗标题",0);
HDC hdc;
hdc = GetDC(hwnd);
TextOut(hdc,0,50,"I am hepengtao.",strlen("I am hepengtao."));
ReleaseDC(hwnd,hdc);
break;
case WM_PAINT: //窗体重绘时,发送 WM_PAINT 消息
HDC hDC;
PAINTSTRUCT ps;
hDC = BeginPaint(hwnd,&ps);
TextOut(hDC,0,0,"Hello,world!",strlen("Hello,world!"));
EndPaint(hwnd,&ps);
break;
case WM_CLOSE: //关闭button按下后,发送 WM_CLOSE 消息
if(IDYES == MessageBox(hwnd,"确定要关闭窗体?" ,"弹窗标题",MB_YESNO))
{
DestroyWindow(hwnd); //销毁窗体,并发送 WM_DESTORY 消息
}
break;
case WM_DESTROY: //运行DestoryWindow()函数时。发送 WM_DESTORY 消息
PostQuitMessage(0); //程序请求退出,发送 WM_QUIT 消息
break;
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam); //用户不关心的消息,由操作系统缺省处理
}
return 0;
}

Windows程序执行过程的更多相关文章

  1. MFC程序执行过程剖析

    一 MFC程序执行过程剖析 1)我们知道在WIN32API程序当中,程序的入口为WinMain函数,在这个函数当中我们完成注册窗口类,创建窗口,进入消息循环,最后由操作系统根据发送到程序窗口的消息调用 ...

  2. MFC程序执行过程剖析(转)

    一 MFC程序执行过程剖析 1)我们知道在WIN32API程序当中,程序的入口为WinMain函数,在这个函数当中我们完成注册窗口类,创建窗口,进入消息循环,最后由操作系统根据发送到程序窗口的消息调用 ...

  3. Java程序执行过程及内存机制

    本讲将介绍Java代码是如何一步步运行起来的,其中涉及的编译器,类加载器,字节码校验器,解释器和JIT编译器在整个过程中是发挥着怎样的作用.此外还会介绍Java程序所占用的内存是被如何管理的:堆.栈和 ...

  4. Android入门学习:Android 系统框架及应用程序执行过程

    Android基础知识学习 新手上路,还请多多帮助.由于初学,博客内容难免有不正确的地方,还请各位多多指教,相互学习! 主要内容: 1.Android层次架构及主要功能 2.Android编程模型,程 ...

  5. 通过DT10获取程序执行过程中的实时覆盖率

    DT10是新一代的动态测试工具,可以长时间跟踪记录目标程序执行情况,获取目标程序动态执行数据,帮助进行难于重现的Bug错误分析,覆盖率检测,性能测试,变量跟踪等等功能. 系统测试覆盖率,通常是用于判断 ...

  6. php程序执行过程--非宏观和微观而是写的程序一行一行的路径----利用xdebug了解一段程序的执行过程----覆盖率

    1.xdebug_start_code_coverage();//在需要开始跟踪程序执行路径时使用 2.var_dump(xdebug_get_code_coverage());//在结尾使用打印程序 ...

  7. 【JAVA】【基础知识】Java程序执行过程

    1. Java程序制作过程 使用文本编辑器进行编辑 2. 编译源文件,生成class文件(字节码文件) javac源文件路径. 3.运行程序class文件.

  8. MFC学习之程序执行过程梳理

    *首先利用全局变量对象theApp启动应用程序.这是由于这个全局对象,基类CWinApp中this的指针才干指向这个对象.假设没有这个全局对象,程序在编译时不会出错,但在执行时就会出错. *调用全局应 ...

  9. 了解 MVC 应用程序执行过程

    发送给基于 ASP.NET MVC 的 Web 应用程序的请求首先通过 UrlRoutingModule 对象(一个 HTTP 模块)进行传递. 此模块将分析请求并执行路由选择. UrlRouting ...

随机推荐

  1. java IO【转】

    Java 流在处理上分为字符流和字节流.字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符.字符数组或字符串,而字节流处理单元为 1 个字节,操作字节和字节数组. Java 内用 U ...

  2. hbase源码系列(五)Trie单词查找树

    在上一章中提到了编码压缩,讲了一个简单的DataBlockEncoding.PREFIX算法,它用的是前序编码压缩的算法,它搜索到时候,是全扫描的方式搜索的,如此一来,搜索效率实在是不敢恭维,所以在h ...

  3. android 自定义流布局。实现热门标签。开源库SimpleFlowLayout

    前言 实际项目中需要实现一个 热门搜索 的栏目,类似下图: 由于 子项(子view) 中的文字是可变的,一行能显示的 子项 的个数也无法确定.需要支持自动换行和计算位置. 开源类库 我自己写了个 自定 ...

  4. 解决mysql开启GTID主从同步出现1236错误问题

    解决mysql开启GTID主从同步出现1236错误问题     最近遇到mysql开启gtid做复制时,从库出现1236错误,导致同步无法进行,本文就这问题记录下处理步骤,有关gtid知识在这里不做介 ...

  5. git操作:在CentOS7上面搭建GitLab服务器

    在这篇文章中将要讲解如何在CentOS7上面搭建本地的GitLab服务器. 一.安装并配置必要的依赖关系 首先要在CentOS系统上面安装所需的依赖:ssh.防火墙.postfix(用于邮件通知).w ...

  6. spring mvc中关于url中传递中文乱码的解决方法

    在传值过程中,也是乱码出现的频繁地.先不说到底是什么场景了,通常常用的方案有如下几个 配置指定的filter <!-- 配置请求过滤器,编码格式设为UTF-8,避免中文乱码--> < ...

  7. 树莓派3 U盘启动 配置 & 即 MSD启动 总结

    树莓派3添加了一个新特性:允许USB启动.现在我们既可以从SD卡启动,也可以从USB启动.USB设备可以是U盘,带USB适配器的SSD硬盘,甚至是移动硬盘. 本文介绍怎么从U盘启动树莓派3.   1. ...

  8. [转]Android开源测试框架学习

    近期因工作需要,分析了一些Android的测试框架,在这也分享下整理完的资料. Android测试大致分三大块: 代码层测试 用户操作模拟,功能测试 安装部署及稳定性测试 代码层测试 对于一般java ...

  9. (笔记)如何安装Arm-linux-gcc

      如何安装Arm-linux-gcc   安装交叉编译工具链: 1.首先以root用户登入 2.复制arm-linux-gcc-4.3.2.tgz到根目录下tmp文件夹里 3.解压命令tar xvz ...

  10. 第三百二十二节,web爬虫,requests请求

    第三百二十二节,web爬虫,requests请求 requests请求,就是用yhthon的requests模块模拟浏览器请求,返回html源码 模拟浏览器请求有两种,一种是不需要用户登录或者验证的请 ...