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. mysql ACID与四种隔离级别归纳总结

    关于数据库的ACID特性已经有很多的介绍,这里再重新归纳总结一下:   A(atomicity)原子性: 即事务要么全部做完,要么全部不做,不会出现只做一部分的情形,如A给B转帐,不会出现A的钱少了, ...

  2. 【oneday_onepage】——Ten Changes To Make A Difference In Your Life

    When you want to change something in your life, it can feel overwhelming. Whether it’s losing 50lbs ...

  3. LibreOffice openoffice 区别

    LibreOffice的初始版本号码被设置为与OpenOffice.org一致,故初始发布(2010年)即为第三版,并不存在第二版.第一版. 后来,甲骨文宣布停止OpenOffice.org的商业支持 ...

  4. AutoCAD 导入 Altium Designer 10 教程

    http://www.geek-workshop.com/thread-5478-1-1.html

  5. Sword protobuf学习一

    protobuf简介 Protocol Buffers,是Google公司开发的一种数据描述语言,类似于XML能够将结构化数据序列化,可用于数据存储.通信协议等方面. 它不依赖于语言和平台并且可扩展性 ...

  6. Ubuntu 安装软件方法

    Ubuntu软件安装有几种方式,常用的是deb包的安装方式,deb是debian系列的Linux包管理方式,Ubuntu软件安装属于debian的派生,也默认支持这种软件安装方式,当下载到一个deb格 ...

  7. Java 之 File

    11.3 I/O类使用 由于在IO操作中,需要使用的数据源有很多,作为一个IO技术的初学者,从读写文件开始学习IO技术是一个比较好的选择.因为文件是一种常见的数据源,而且读写文件也是程序员进行IO编程 ...

  8. QMDP-Net: Deep Learning for Planning under Partial Observability

    一篇用deep neural network做POMDP的论文

  9. SAP HR模块的基础数据表和增强配置

    信息类型是SAP HR模块数据单元,用于对人员数据的记录和维护,是HR的基础.信息类型按照其创建方式的不同可以分为:人事信息类型.组织信息类型.信息类型数据的维护主要在事物码PA30.PA40.po1 ...

  10. Spring JMS 官方文档学习

    最后部分的XML懒得写了,因为个人更倾向于JavaConfig形式. 为知笔记版本见这里,带格式~ 做了一个小demo,放到码云上了,有兴趣的点我. 说明:需要先了解下JMS的基础知识. 1.介绍 S ...