Windows程序执行过程

Posted lxjshuju

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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程序执行过程的主要内容,如果未能解决你的问题,请参考以下文章

执行代码时有时不显示对话框片段

Sleep() 方法后的代码片段没有被执行

用C#写一个windows服务可定时执行sql Service数据库里面的存储过程(带两个参数),急求代码!高手赐教!

Windows NT/2000/XP进程与线程之间的关系

可执行EXE在windows调用过程

学习笔记 链接