你的第一个Windows程序

MSDN在线原文(英文)

你的第一个Windows程序

在这个模块,我们编写一个最小的Windows程序。它的作用是创建并显示一个空白窗口。这第一个程序包含大约50行代码,不计算空白行和注释。这将是我们的起点;以后还会添加图形,文本,用户输入和其它功能。

 

示例程序屏幕截图

下面是完整的程序代码:

#ifndef UNICODE
#define UNICODE
#endif

#include <windows.h>

LRESULT CALLBACK WindowProc(HWND hwnd,UINT uMsg, WPARAM wParam,LPARAM lParam);

int wWinMain(HINSTANCE hInstance,HINSTANCE,PWSTR pCmdLine,int nCmdShow)
{
	//注册窗口类
	const wchar_t CLASS_NAME[]=L"Sample Window Class";

	WNDCLASS wc = {};
	
	wc.lpfnWndProc		=WindowProc;
	wc.hInstance		=hInstance;
	wc.lpszClassName	=CLASS_NAME;

	RegisterClass(&wc);

	//创建窗口
	HWND hwnd = CreateWindowEx(
		0,								//可选窗口样式
		CLASS_NAME,						//窗口类
		L"Learn to Program Windows",	//窗口文本
		WS_OVERLAPPEDWINDOW,			//窗口样式
		//窗口大小和定位
		CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
		NULL,							//父窗口
		NULL,							//菜单
		hInstance,						//实例句柄
		NULL							//其它应用程序的数据
		);
	
	if(hwnd == NULL)
	{
		return 0;
	}
	ShowWindow(hwnd,nCmdShow);

	//运行消息循环
	MSG msg = {};
	while(GetMessage(&msg,NULL,0,0))
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
	return 0;

}

LRESULT CALLBACK WindowProc(HWND hwnd,UINT uMsg, WPARAM wParam,LPARAM lParam)
{
	switch(uMsg)
	{
	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
		
	case WM_PAINT:
		PAINTSTRUCT ps;
		HDC hdc = BeginPaint(hwnd,&ps);
		FillRect(hdc,&ps.rcPaint,(HBRUSH)(COLOR_WINDOW+1));
		EndPaint(hwnd,&ps);
		return 0;
	}
	return DefWindowProc(hwnd,uMsg,wParam,lParam);
}


你可以从Windows Hello World Sample下载完整的Visual Studio项目。

它会给出一个有帮助的简要概述,说明这段代码是做什么的。随后的主题将详细的分析代码。

  1. wWinMain是程序的入口点,当程序启动,他注册应用程序窗口某些行为的信息。其中最重要的信息是一个函数的地址,在这个例子中是WindowProc,这个函数定义窗口的行为——它的外观,如何与用户交互等等。
  2.  下一步,程序创建窗口和接收这个窗口唯一标识的句柄。
  3. 如果这个窗口顺利地创建,程序进入while循环,程序保持循环,直到程序关闭窗口并退出应用程序。

请注意程序没有显式地调用WindowProc函数,尽管我们说这是大多数应用程序逻辑的定义。Windows通过一系列的消息与程序通信,While循环内的代码驱动过程。每次程序调用 DispatchMessage 函数,每个消息间接的使Windows调用WindowProc函数。

详细的代码分析后续......

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值