从WinMain函数看Windows程序内部运行机制
#include<windows.h>
#include<stdio.h>
/*
以下为定义的回调函数,回调函数的机制:
①定义一个回调函数。
②提供函数实现的一方在初始化的时候,将回调函数的指针注册给调用者。
③当特定的事情或条件发生的时候,调用者使用函数指针调用回调函数对事件进行处理。
针对window的处理机制,窗口过程函数,被调用的过程如下:
①再设计窗口类的时候,将窗口过程函数的地址赋值给lpfnWndProc成员变量;
②调用RegisterClass(&wndclass)注册窗口类,那么系统就有了我们所编写的窗口过程函数的地址。
③当应用程序接收到某一窗口的消息是,调用DispatchMessage(&msg)将消息回传给系统。系统则利用先前注册窗口类是得到的函数指针,调用窗口过程函数对消息进行处理。
*/
LRESULT CALLBACK WinBenProc(
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam);
int WINAPI WinMain(
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=WinBenProc;
wndcls.lpszClassName="bingo2012";
wndcls.lpszMenuName=NULL;
wndcls.style=CS_HREDRAW | CS_VREDRAW;
RegisterClass(&wndcls);
//创建窗口
HWND hwnd;
hwnd=CreateWindow("bingo2012","吾辈何以为战",WS_OVERLAPPEDWINDOW,0,0,600,400,NULL,NULL,hInstance,NULL);
//显示及刷新窗口
ShowWindow(hwnd,SW_SHOWNORMAL);
UpdateWindow(hwnd);
//定义消息结构体,开始消息循环
MSG msg;
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
//编写窗口过程函数
LRESULT CALLBACK WinBenProc(
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
)
{
switch(uMsg)
{
case WM_CHAR:
char szChar[20];
sprintf(szChar,"char code is %d",wParam);
MessageBox(hwnd,szChar,"char",0);
break;
case WM_LBUTTONDOWN:
MessageBox(hwnd,"mouse clicked","message",0);
HDC hdc;
hdc=GetDC(hwnd);
TextOut(hdc,0,50,"斌哥不骗你",strlen("斌哥不骗你"));
//ReleaseDC(hwnd,hdc);
break;
case WM_PAINT:
HDC hDc;
PAINTSTRUCT ps;
hDc=BeginPaint(hwnd ,&ps);
TextOut(hDc,0,0,"http://weibo.com/527712389",strlen("http://weibo.com/527712389"));
EndPaint(hwnd,&ps);
break;
case WM_CLOSE:
if(IDYES==MessageBox(hwnd,"是否真的结束","message",MB_YESNO))
{
DestroyWindow(hwnd);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam);
}
return 0;
}
转载于:https://www.cnblogs.com/mbigger/archive/2012/08/19/2646913.html
从WinMain函数看Windows程序内部运行机制相关推荐
- 孙鑫-MFC笔记一--Windows程序内部运行机制
对于一个初学者来说,常常会用到各种库函数,例如printf等等,这些库函数是由你所使用的编译器厂商提供的,在Windows操作系统下,开发的应用程序, 也有这样的库函数,不同的是,这样的库函数,是有w ...
- VC++的学习(基于VS2008)——windows程序内部运行机制
昨天和今天都在学习windows程序的内部运行机制,再次学习这一章,我明显感到条理清晰了,原来这一章是讲我们所用的电脑,这样一个windows平台下程序运行的内部机制的.windows应用程序下最重要 ...
- 《VC++深入详解》学习笔记 第一章 Windows程序内部运行机制
(金光鳞闪影若茫) 窗口四步走: 设计窗口类 注册窗口类 创建窗口 显示更新窗口 最后创建消息循环和响应函数 设计窗口类: typedef struct {UINT style;//窗口类型 WNDP ...
- 孙鑫VC++LESSON1:Windows程序内部运行原理
视频链接:https://www.bilibili.com/video/BV1Ts411f7fw/?spm_id_from=333.337.search-card.all.click&vd_s ...
- Windows程序内部运行原理
Windows程序内部运行原理 为了理解Visual C++应用程序开发过程,先要理解Windows程序的运行机制.因为 Visual C++是 Windows 开发语言,需要明白在 Window ...
- Windows程序内部运行原理(2)
Windows程序内部运行原理 为了理解Visual C++应用程序开发过程,先要理解Windows程序的运行机制.因为 Visual C++是 Windows 开发语言,需要明白在 Window ...
- VC++学习(1):Windows程序内部运行原理
Windows应用程序,操作系统,计算机硬件之间的相互关系 关于API:向下的箭头③表示应用程序可以通知操作系统执行某个具体的动作,如操作系统能够控制声卡发出声音,但它并不知道应该何时发出何种声音,需 ...
- 【MFC】1.Windows程序内部运行原理
1.原理与内容 Windows应用程序,操作系统,计算机硬件之间的相互关系: 向下的箭头③表示应用程序可以通知操作系统执行某个具体的动作,如操作系统能够控制声卡发出声音,但它并不知道应该何时发出何种声 ...
- XFC演示-使用C语言通过WinAPI函数编写Windows程序
XFC演示-使用C语言通过WinAPI函数编写Windows程序 1,目标效果: 2,代码片段: winMain.c /*!\file winMain.c\version v1.00\date 10/ ...
- 分析内部运行机制,教你解决Redis性能问题
摘要:聚焦Redis的性能分析,思考Redis 可以通过哪些机制来提高性能,当性能瓶颈发生的时候,我们又能做出哪些优化策略,最终确保业务系统的稳定运行. 本文分享自华为云社区<分析内部运行机制, ...
最新文章
- pg GUI Tools
- 抢人饭碗了!推荐一款全自动的机器学习建模神器PyCaret
- C#从excel中将数据导出到datatable
- MyBatis 源码解读-pluginElement()
- c++远征之模板篇——静态数据成员,静态成员函数
- 数据结构(二)冒泡排序
- python小白教程-面向小白的Python教程:入门篇(六)
- 翻翻git之---炫酷的自己定义翻滚View TagCloudView
- SpringBoot java配置类@Configuration 的两种写法
- momentum、Adagrad、RMSProp、Adam梯度下降总结
- find命令日常用法和文件名后缀
- 图论(5)邻接谱,邻接代数,图空间,托兰定理
- 转 - DataGuard中如何配置LOG_ARCHIVE_DEST_n参数
- 盘点无线互联网战国七雄
- h5案例分享:王中军个人画展:藝術東西,玄如藝術
- 荣耀 MagicBook V 14 2022款评测
- js 百度地图选择某个位置(选点),获取经纬度信息。
- 离散数学程序实践——判断是否(反)自反,(反)对称,可传递——c
- Alternate Realities大赛作品引发的思考(二)——如何完全按照自己的思路制作一个toon shader
- reading 摘录二
热门文章
- [新闻]华为发布最高端核心路由器NE5000E集群系统
- 猜字游戏python程序_python 猜字游戏
- UML10种图例之包图
- 下载电驴屏蔽资源办法
- android 桌面 弹出窗口,android – 弹出窗口在来电屏幕上像truecalle...
- 改变鼠标样式的两种方法
- java web 徐林林_零点起飞学Java Web开发 (徐林林) 高清PDF
- 网络恶趣实验——二层广播风暴
- 广西壮族自治区公安厅信息中心异地容灾系统(三期)采购185万
- 别学英语了!微软给PPT和Skype新加的这个功能,让你和老外从此交流无障碍