Windows程序执行过程
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程序执行过程的更多相关文章
- MFC程序执行过程剖析
一 MFC程序执行过程剖析 1)我们知道在WIN32API程序当中,程序的入口为WinMain函数,在这个函数当中我们完成注册窗口类,创建窗口,进入消息循环,最后由操作系统根据发送到程序窗口的消息调用 ...
- MFC程序执行过程剖析(转)
一 MFC程序执行过程剖析 1)我们知道在WIN32API程序当中,程序的入口为WinMain函数,在这个函数当中我们完成注册窗口类,创建窗口,进入消息循环,最后由操作系统根据发送到程序窗口的消息调用 ...
- Java程序执行过程及内存机制
本讲将介绍Java代码是如何一步步运行起来的,其中涉及的编译器,类加载器,字节码校验器,解释器和JIT编译器在整个过程中是发挥着怎样的作用.此外还会介绍Java程序所占用的内存是被如何管理的:堆.栈和 ...
- Android入门学习:Android 系统框架及应用程序执行过程
Android基础知识学习 新手上路,还请多多帮助.由于初学,博客内容难免有不正确的地方,还请各位多多指教,相互学习! 主要内容: 1.Android层次架构及主要功能 2.Android编程模型,程 ...
- 通过DT10获取程序执行过程中的实时覆盖率
DT10是新一代的动态测试工具,可以长时间跟踪记录目标程序执行情况,获取目标程序动态执行数据,帮助进行难于重现的Bug错误分析,覆盖率检测,性能测试,变量跟踪等等功能. 系统测试覆盖率,通常是用于判断 ...
- php程序执行过程--非宏观和微观而是写的程序一行一行的路径----利用xdebug了解一段程序的执行过程----覆盖率
1.xdebug_start_code_coverage();//在需要开始跟踪程序执行路径时使用 2.var_dump(xdebug_get_code_coverage());//在结尾使用打印程序 ...
- 【JAVA】【基础知识】Java程序执行过程
1. Java程序制作过程 使用文本编辑器进行编辑 2. 编译源文件,生成class文件(字节码文件) javac源文件路径. 3.运行程序class文件.
- MFC学习之程序执行过程梳理
*首先利用全局变量对象theApp启动应用程序.这是由于这个全局对象,基类CWinApp中this的指针才干指向这个对象.假设没有这个全局对象,程序在编译时不会出错,但在执行时就会出错. *调用全局应 ...
- 了解 MVC 应用程序执行过程
发送给基于 ASP.NET MVC 的 Web 应用程序的请求首先通过 UrlRoutingModule 对象(一个 HTTP 模块)进行传递. 此模块将分析请求并执行路由选择. UrlRouting ...
随机推荐
- Eclipse调试Java的10个技巧【转】
clipse调试Java的10个技巧 先提三点 不要使用System.out.println作为调试工具 启用所有组件的详细的日志记录级别 使用一个日志分析器来阅读日志 1.条件断点 想象一下我们平时 ...
- Entity Framework应用:使用EF的DataBase First模式实现数据库的增删改查
在上一篇文章中讲解了如何生成EF的DBFirst模式,接下来讲解如何使用DBFirst模式实现数据库数据的增删改查 一.新增数据 新增一个Student,代码如下: static void Add() ...
- SpringBoot2 @validated 自定义效验类型
项目参考:详细参见:<Spring Boot 2精髓:从构建小系统到架构分布式大系统> 第三章 3.5.3节 自定义校验 项目结构 WorkTime package com.archibl ...
- Could not autowire field: private java.lang.Integer com.taotao.sso.service.impl.UserServiceImpl.SSO_
@Value("REDIS_USER_SESSION_KEY") private String REDIS_USER_SESSION_KEY; 1 2 改正: @Value(&qu ...
- 6、Qt Meta Object system 学习
原文地址:http://blog.csdn.net/ilvu999/article/details/8049908 使用 meta object system 继承自 QOject 类定义中添加 Q_ ...
- 《FPGA全程进阶---实战演练》第二十一章之 几种常用电平分析及特性
TTL,CMOS以及LVTTL,LVCMOS TTL和CMOS是数字电路中两种常见的逻辑电平,LVTTL和LVCMOS是两者低电平版本.TTL是流控器件,输入电阻小,TTL电平器件速度快,驱动能力大, ...
- android地址位置
有精度纬度确定地理位置 latitude: 23.1352888---longitude: 113.3297445 调用Google API接口: URL: http://maps.google.cn ...
- Relu的理解
ReLU上的花样 CNN出现以来,感觉在各个地方,即便是非常小的地方都有点可以挖掘.比如ReLU. ReLU的有效性体现在两个方面: 克服梯度消失的问题 加快训练速度 而这两个方面是相辅相成的,因为克 ...
- PDFSharp生成PDF.
在上面用OpenXML生成word后,原来利用Word2010里的导出成PDF功能就不能用. 然后找开源组件生成PDF,最开始用的是iTextSharp,做完导出报表了才发现,这个开源协议用的是AGP ...
- python公司内部语言规范与语言风格
一.python语言规范 1.1导入 Tip: 仅对包和模块使用导入 定义: 模块间共享代码的重用机制. 优点: 命名空间管理约定十分简单.每个标识符的源都用一种一致的方式指示.x.obj 表示obj ...