Windows程序内部运行机制
来源:互联网 发布:数据配线架价格 编辑:程序博客网 时间:2024/05/09 09:15
第一次写技术博客,看完C++ Primer Plus,认识不足,没能把自己的所获所感写出来,想想,其实,现在对于我这个刚学的菜鸟来说,也不晚。
买的书没到,看了《深入学习c++》前两章,照书中动手敲了一个Windows程序。
创建一个Win32应用程序的步骤:
1,、编写WinMain函数。
2、设计窗口类(WNDCLASS)。
3、注册窗口类。
4、创建窗口。
5、显示并更新窗口。
6、编写消息循环。
7、编写窗口过程函数。
#include <windows.h> //(1)#include <stdio.h>LRESULT CALLBACK WinSunProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) //(2){ //“设计一个窗口” WNDCLASS wndcls; //WNDCLASS结构体,定义窗口特征(有以下十个参数) wndcls.cbClsExtra=0; //一般设为0 wndcls.cbWndExtra=0; //一般设为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="sunxin2006"; //窗口类的名字 wndcls.lpszMenuName=NULL; //指定菜单资源名字 wndcls.style=CS_HREDRAW | CS_VREDRAW; //(3) RegisterClass(&wndcls); //注册窗口类 //“创建窗口,定义一个变量用来保存成功创建窗口后返回的句柄” HWND hwnd; hwnd=CreateWindow("sunxin2006","http://www.sunxin.org", WS_OVERLAPPEDWINDOW,0,0,600,400,NULL,NULL,hInstance,NULL); //(4) //“显示及刷新窗口” ShowWindow(hwnd,SW_SHOWNORMAL); //(5) UpdateWindow(hwnd); //调用UpdateWindows来刷新窗口 //“定义消息结构体,开始消息循环” MSG msg; while(GetMessage(&msg,NULL,0,0)) //(6) { TranslateMessage(&msg); //将虚拟键消息转换为字符消息 DispatchMessage(&msg); //将消息回传给操作系统 } return msg.wParam;} //“编写窗口过程函数”LRESULT CALLBACK WinSunProc( 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); //不能响应VM_PALNT消息时调用 TextOut(hdc,0,50,"程序员之家",strlen("程序员之家")); //ReleaseDC(hwnd,hdc); break; case WM_PAINT: HDC hDC; PAINTSTRUCT ps; hDC=BeginPaint(hwnd,&ps); //BeginPaint 只能在响应WM_PAINT消息时调用 TextOut(hDC,0,0,"http://www.sunxin.org",strlen("http://www.sunxin.org")); 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;}
解析:
(1)http://baike.baidu.com/view/1586331.htm?fr=aladdin
(2)Windows程序的入口点函数,与DOS程序的入口点函数main的作用相同。WinMain函数接收4个参数:
hInstance表示该程序当前运行实例的句柄。那么,什么是句柄呢?句柄就是Windows程序中资源的标识号,这些资源主要是窗口、图标、光标等,简单来说就是这些资源的标记符,例如,窗口是通过窗口句柄(HWND)来标识的。hInstance是一个数值,运行实例后分配得到的值就是通过该参数传递给WinMain函数的。
hPrevInstance表示当前实例的前一个实例的句柄。在Win32环境下,该参数总是NILL。
lpCmdLine指定传递给应用程序的命令行参数。他是一个一空终止的字符串。
nCmdShow指定程序的窗口应如何显示。
(3)指定窗口的样式。常用的样式有:
CS_HREDRAW功能~当窗口水平方向的宽度发生变化时,将重新绘制整个窗口。
CS_VREDRAW功能~当窗口垂直方向的高度发生变化时,将重新绘制整个窗口。
CS_NOCLOSE功能~禁用系统菜单的Close命令,这将导致窗口没有关闭按钮。
CS_DBLCLKS当用户在窗口中双击鼠标时,向窗口过程发送鼠标双击信息。
(4)创建窗口函数。
HWND CreateWindow(
LPCTSTR lpClassName, //指定窗口类的名称
LPCTSTR lpWindowName, //指定窗口的名字
DWORD dwStyle, //指定创建的窗口样式。其中WS_OVERLAPPEDWINDOW十多种窗口类型的组合
int x, //窗口左上角的x坐标
int y, //窗口左上角的y坐标
int nWidth, //窗口宽度
int nHeight, //窗口高度
HWND hWndParent, //指定被创建窗口的父窗口句柄
HMENU hMenu, //指定窗口菜单的句柄
HANDLE hlnstance, //指定窗口所属的应用程序实例的句柄
LPVOID lpParam); //作为VM_CREATE消息的附加参数lParam传入的数据指针,一般设为NULL
(5)BOOL ShowWindow(HWND hWnd, int nCmdShow);
第一个参数hWnd就是在上一步骤中成功创建窗口后返回的窗口句柄。
第二个参数nCmdShow指定了窗口显示的状态,常用有:
SW_HIDE~隐藏窗口并激活其他窗口。
SW_SHOW~在窗口原来的位置以原来的尺寸激活和显示窗口。
SW_SHOWMAXIMIZED~激活窗口并将其最大化显示。
SW_SHOWMINNIZED~激活窗口并将其最小化显示。
SW_SHOWNORMAL~激活并显示窗口。
(6)BOOL GetMessage(
LPMSG lpMsg, HWND hWnd, UNIT wMsgFilterMin, UNIT wMsgFilterMax);
lpMsg指向一个消息(MSG)的结构体。
hWnd指定接收属于哪一个窗口的消息。
wMsgFilterMin指定要获得的消息的最小值。通常设为0。
wMsgFilterMax指定要获取消息的最大值。如果wMsgFilterMin与wMsgFilterMax都为0,则表示接收所有消息。
结果很简单,就是一个简单的窗口。
其实可以举个生动的比喻。操作系统就好比汽车用户,应用程序就是比汽车厂家,窗口就是汽车,回调函数就是修理站,窗口收到消息就是表示出现了故障,等等。
0 0
- Windows程序内部运行机制
- Windows程序内部运行机制
- Windows程序内部运行机制
- Windows程序内部运行机制
- WINDOWS程序内部运行机制
- Windows程序内部运行机制
- Windows程序内部运行机制
- Windows程序内部运行机制
- windows程序内部运行机制
- Windows 程序内部运行机制
- Lesson1:Windows程序内部运行机制
- 一.Windows程序内部运行机制
- (1)Windows程序内部运行机制
- 第一章,Windows程序内部运行机制
- Windows程序内部运行机制学习
- 第一章:Windows程序内部运行机制
- Windows程序内部运行机制笔记
- 【转】第一章 Windows程序内部运行机制
- 期望为线性时间选择算法
- Master Note: Database System Monitor Process (SMON) (Doc ID 1495163.1)
- 随笔
- 转盘抽奖游戏
- POJ - 2524Ubiquitous Religions
- Windows程序内部运行机制
- SQLServer-----SQLServer 2008 R2安装
- Windows概念总结
- 产生随机数算法
- AWS中国合作伙伴研讨会后记
- 第10周 项目1-1 加减乘除的运算
- UVa 12100 - Printer Queue(模拟)
- HDU 3622 Bomb Game (二分+2-SAT)
- svn和git的基本区别