WindowsApi学习笔记-创建一个简单的窗口

简介: #include LRESULT CALLBACK MainWndProc(HWND,UINT,WPARAM,LPARAM);//窗口函数的函数原型 int APIENTRY WinMain( //APIENTRY是__std...
#include <windows.h>

LRESULT CALLBACK MainWndProc(HWND,UINT,WPARAM,LPARAM);//窗口函数的函数原型

int APIENTRY WinMain(                               //APIENTRY是__stdcall的宏定义
					 HINSTANCE hInstance,           //本模块的实例句柄
					 HINSTANCE hPrevInstance,       //Win16留下的废物
					 LPSTR lpCmdLine,               //命令行参数
					 int nCmdShow                   //主窗口初始化时的现实形式
					 )
{
	char szClassName[] = "MainClass";
	WNDCLASSEX wndclass;   //用来描述主窗口的结构
	wndclass.cbSize = sizeof(wndclass);  //结构的大小
	wndclass.style = CS_HREDRAW|CS_VREDRAW; //如果窗口大小,横向改变和竖向改变都会重画窗口
	wndclass.lpfnWndProc = MainWndProc;//窗口函数指针
	wndclass.cbClsExtra = 0;//没有额外的类内存
	wndclass.cbWndExtra = 0;//没有额外的窗口内存
	wndclass.hInstance = hInstance;//实例句柄
	wndclass.hIcon = ::LoadIcon(NULL,IDI_APPLICATION);//使用预定义图标
	wndclass.hCursor = ::LoadCursor(NULL,IDC_ARROW);//使用预定义光标
	wndclass.hbrBackground = (HBRUSH)::GetStockObject(WHITE_BRUSH);//使用白色背景画刷
	wndclass.lpszMenuName = NULL;//不指定菜单
	wndclass.lpszClassName = szClassName;//窗口类的名称
	wndclass.hIconSm = NULL;//没有类的小图标

	::RegisterClassEx(&wndclass);//注册这个窗口类

	HWND hwnd = ::CreateWindowEx(
		0,//扩展样式
		szClassName,//类名
		"My First Window",//窗口名。标题
		WS_OVERLAPPEDWINDOW,//窗口风格
		CW_USEDEFAULT,//初始X坐标
		CW_USEDEFAULT,//初始Y坐标
		CW_USEDEFAULT,//宽度
		CW_USEDEFAULT,//高度
		NULL,//父窗口句柄
		NULL,//菜单句柄
		hInstance,//实例句柄
		NULL//用户数据
		);
	if(hwnd == NULL)
	{
		::MessageBox(NULL,"创建窗口出错","系统提示",MB_OK);
	}
	::ShowWindow(hwnd,nCmdShow);//显示窗口
	::UpdateWindow(hwnd);//刷新窗口
	MSG msg;
	while(::GetMessage(&msg,NULL,0,0))
	{
		::TranslateMessage(&msg);//转换为键盘消息
		::DispatchMessage(&msg);//将消息发送到相应的窗口函数
	}
	return msg.wParam;//当GetMessage返回FALSE时程序结束
}

LRESULT CALLBACK MainWndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
	char szText[] = "最简单的窗口程序";
	switch(message)
	{
	case WM_PAINT:
		{
			HDC hdc;
			PAINTSTRUCT ps;
			hdc = ::BeginPaint(hwnd,&ps);//使无效的客户区变的有效,并取得设备环境句柄
			::TextOut(hdc,10,10,szText,strlen(szText));//输出文本
			::EndPaint(hwnd,&ps);
			return 0;
		}
	case WM_DESTROY:
		{
			::PostQuitMessage(0);//向消息队列投递一个WM_QUIT消息,促使GET MESSAGE函数返回0,结束消息循环
			return 0;
		}
	}
	return ::DefWindowProc(hwnd,message,wParam,lParam);
}


目录
相关文章
如何创建一个用户看不到的窗口。
如何创建一个用户看不到的窗口。
|
2月前
win32编程 -- 窗口注册与创建
win32编程 -- 窗口注册与创建
11 0
|
6月前
45EasyUI 窗口- 创建简单窗口
45EasyUI 窗口- 创建简单窗口
24 0
|
9月前
[BlocklyNukkit入门]#7选择窗口
给窗口添加选项
43 0
|
9月前
|
C# Windows
推荐一个C#开发的窗口扩展菜单,支持系统所有窗口
一个C#开发的窗口扩展项目,采用.NET Framework 4.0开发,支持Windows Xp以及更高版本的系统,同时支持命令模式,可供代码调用。
98 0
推荐一个C#开发的窗口扩展菜单,支持系统所有窗口
|
分布式计算 大数据 BI
函数_窗口 2 | 学习笔记
快速学习函数_窗口 2
130 0
函数_窗口 2 | 学习笔记
|
SQL 分布式计算 大数据
函数_窗口 1 | 学习笔记
快速学习函数_窗口 1
60 0
函数_窗口 1 | 学习笔记
|
容器
对话框和窗口的区别
“窗口”与“对话框”有什么区别?                       计算机类稿件的一大特点是文中的图很多。在这大量的图中,系统软件或应用软件的“界面”、“窗口”、“对话框”、“提示框”等的截图又占了很大的比例。
4210 0
|
Windows
【OpenGL】七、桌面窗口搭建 ( 导入头文件 | 桌面程序入口函数 | 注册窗口 | 创建窗口 | 显示窗口 )(二)
【OpenGL】七、桌面窗口搭建 ( 导入头文件 | 桌面程序入口函数 | 注册窗口 | 创建窗口 | 显示窗口 )(二)
146 0
【OpenGL】七、桌面窗口搭建 ( 导入头文件 | 桌面程序入口函数 | 注册窗口 | 创建窗口 | 显示窗口 )(二)