码迷,mamicode.com
首页 > Windows程序 > 详细

Windows程序执行过程

时间:2017-08-19 15:46:50      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:对象   关闭   app   break   cmd   track   UI   content   callback   

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程序执行过程

标签:对象   关闭   app   break   cmd   track   UI   content   callback   

原文地址:http://www.cnblogs.com/lxjshuju/p/7396622.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!