windows API程序设计(一个简单的窗口)

windows API程序设计(一个简单的窗口)

一、目的

  1. windows操作系统应用程序开发的基本概念,win32 API函数、消息与事件驱动;

  2. 掌握WinMain函数的基本框架,窗口定义、窗口创建、消息循环及窗口过程函数;

二、工具

Visual C++ 6.0

三、参考资料

《Windows程序设计教程》(郭暤岩、廖琪梅)

四、步骤

  1. 在新建文件中选择Projects中的win 32 Application,输入Project name中输入新建工程名字,点击ok继续
  2. 在弹出的窗口中选择 An empty project,点击finish
  3. 再在新建文件中选择Files中的C++ source file,输入文件名
  4. 在其中写下代码
  5. 编译调试

五、代码

#include<windows.h>

//声明WNDExample()函数
LRESULT CALLBACK WndExample(
	HWND hwnd,
	UINT message,
	WPARAM wParam,
	LPARAM lParam);
//编写WinMain()主函数
int APIENTRY WinMain(HINSTANCE hInstance,
						HINSTANCE hPervInstance,
						LPSTR lpCmdLine,
						int nCmdShow)
{
	WNDCLASS wndclass;			//定义窗口类型结构变量
	HWND hwnd;					//定义窗口句柄
	MSG msg;					//定义消息结构变量
	char lpszClassName[]="自己创建的窗口";

	//设计窗口类型
	wndclass.style = CS_HREDRAW|CS_VREDRAW;		//改变窗口大小侧重面
	wndclass.lpfnWndProc = WndExample;			//窗口函数为WndExample
	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(BLACK_BRUSH); //背景为黑色
	wndclass.lpszMenuName = NULL;				//窗口默认无菜单
	wndclass.lpszClassName = lpszClassName;
	//注册窗口类型
	if(!RegisterClass(&wndclass))
		return FALSE;

	//创建窗口
	hwnd = CreateWindow(lpszClassName,
		"window窗口创建",
		WS_OVERLAPPEDWINDOW,
		CW_USEDEFAULT,CW_USEDEFAULT,
		CW_USEDEFAULT,CW_USEDEFAULT,
		NULL,
		NULL,
		hInstance,
		NULL);
	//显示并刷新窗口
	ShowWindow(hwnd,nCmdShow);		//显示窗口
	UpdateWindow(hwnd);				//更新窗口的客户区
	//信息循环
	while(GetMessage(&msg,NULL,0,0))
	{
		TranslateMessage(&msg);		//键盘消息转换
		DispatchMessage(&msg);		//派送消息给窗口函数
	}
	return msg.wParam;		//返回退出值
}
	//相应窗口信息
	LRESULT CALLBACK WndExample(HWND hwnd,UINT message,
						WPARAM wParam,
						LPARAM lParam)
	{
		//根据信息值转相应的信息处理
		switch(message)
		{
			//重画窗口客户区信息处理
		case WM_PAINT:
			HDC hdc;		//定义设备描述表句柄
			PAINTSTRUCT ps;	//定义绘图信息结构变量
			hdc = BeginPaint(hwnd,&ps); //获取要重画的窗口的设备描述表句柄
			TextOut(hdc,150,150,"This is a window",20);	//输出文本
			EndPaint(hwnd,&ps);
			break;

			//响应鼠标单击信息
		case WM_LBUTTONDOWN:
			{
				MessageBeep(0);
			}
			break;
			//撤销窗口信息处理
		case WM_DESTROY:
			PostQuitMessage(0);
			break;
			//其他转默认窗口函数
		default:
			return DefWindowProc(hwnd,message, wParam,lParam);
		}
		return 0;
	}
		

运行结果如图:

六、遇到的问题

在调试编译时遇到报错LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main,解决办法是:[Project] --> [Settings] --> 选择"Link"属性页,在Project Options中将/subsystem:console改成/subsystem:windows

原文地址:https://www.cnblogs.com/Zzxin/p/13726811.html