WindowsAPI学习

WindowsAPI实现简单窗口操作

目的

  • 了解Windows操作系统应用程序开发的基本概念,win32API函数、消息与事件驱动;
  • 掌握Win Main函数的基本框架,窗口定义、窗口创建、消息循环及窗口过程函数;

准备工具

  • 这里我用的是VC++6.0、WindowsXP
  • 虚拟机装载XP进行实验操作

创建过程:

1.定义WinMain函数;
2.设计窗口类WNDCLASS
3.注册窗口类,告诉系统窗口过程函数;
4.创建窗口类,定义一个变量来保存成功创建窗口返回的句柄;
5.显示及刷新窗口
6.定义循环体结构体,开始消息循环;
7.编写窗口函数

源码

#include <windows.h>
#include <stdio.h>
LRESULT CALLBACK WinSunProc(
	HWND  hwnd,		//窗口句柄
	UINT  uMsg,		//消息代码
	WPARAM wParam,	//第一消息参量
	LPARAM lParam	//第二消息参量
);
//定义WinMain函数
int WINAPI WinMain(
	HINSTANCE hInstance,		//运行当前窗口句柄
	HINSTANCE hPrevInstance,	//起一个窗口实例
	LPSTR lpCmdLine,			//命令长参数
	int nCmdShow				//指定窗口显示格式
	)							//应用程序实例
{
	//设计一个窗口类
	WNDCLASS wndlcs;
	wndlcs.cbClsExtra=0;				//类的附加信息
	wndlcs.cbWndExtra=0;				//窗口的附加信息
	wndlcs.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
	wndlcs.hCursor=LoadCursor(NULL,IDC_CROSS);//加载系统默认光标
	wndlcs.hIcon=LoadIcon(NULL,IDI_ERROR);	//加载系统默认图标
	wndlcs.hInstance=hInstance;				//应用程序实例句柄由WinMain函数传进来
	wndlcs.lpfnWndProc=WinSunProc;			//窗口的过程函数名字,消息处理函数
	wndlcs.lpszClassName="Mr.Kuang2020";		//类的名字
	wndlcs.lpszMenuName=NULL;					//菜单名字
	wndlcs.style=CS_HREDRAW |CS_VREDRAW;

	//注册窗口类,告诉系统窗口过程函数
	RegisterClass(&wndlcs);	
	

	//创建窗口类,定义一个变量来保存成功创建窗口返回的句柄
	HWND hwnd;
	hwnd=CreateWindow("Mr.Kuang2020","http://www.Mr.Kuang2020.org",
		WS_OVERLAPPEDWINDOW,					//窗口风格
		400,400,600,400,						//窗口位置及大小	
		NULL,NULL,hInstance,NULL);			//父窗口的句柄,主菜单的句柄。。。。


	//显示及刷新窗口
	ShowWindow(hwnd,SW_SHOWNORMAL);
	UpdateWindow(hwnd);


	//定义消息结构体,开始消息循环
	MSG msg;
	while(GetMessage(&msg,NULL,0,0))
	{
		
		TranslateMessage(&msg);				//翻译
		DispatchMessage(&msg);				//给操作系统分发消息
	}
	return msg.wParam;
}


//编写窗口过程函数
LRESULT CALLBACK WinSunProc(
	HWND hwnd,								//同开始
	UINT uMsg,								//
	WPARAM wParam,							//
	LPARAM lParam							//
	)
{
	switch(uMsg)
	{
	case WM_CHAR:							//定义字符
		char szChar[20];
		sprintf(szChar,"char code is %d",wParam);
		MessageBox(hwnd,szChar,"char",0);
		break;
	case WM_LBUTTONDOWN:					//鼠标左键按下
			MessageBox(hwnd,"打开页面","鼠标左键按下",0);
			HDC hdc;
			hdc=GetDC(hwnd);				//不能在响应WM_PAINT消息时调用
			TextOut(hdc,0,50,"一个小窗口",strlen("一个小窗口"));
			//ReleaseDC(hwnd,hdc);
			break;
	case WM_PAINT:							//窗口绘制
	HDC hDC;
	PAINTSTRUCT ps;							//开始绘制
	hDC=BeginPaint(hwnd,&ps);				//BeginPaint只能在响应WM_PAINT消息是调用
	TextOut(hDC,150,150,"http://www.Mr.Kuang2020.org",strlen("http://www.Mr.Kuang2020.org"));
	EndPaint(hwnd,&ps);
	break;
	case WM_CLOSE:							//关闭窗口
		if(IDYES==MessageBox(hwnd,"给个痛快?","是否关闭",MB_YESNO))
		{
			DestroyWindow(hwnd);
		}
		break;
	case WM_DESTROY:
		PostQuitMessage(0);
		break;
	default:
		/*该函数对未被处理的消息提供默认响应*/
			return DefWindowProc(hwnd,uMsg,wParam,lParam);
	}
	return 0;
}

实验截图

  • 运行源码
    运行源码
  • 点击退出
    点击退出
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值