使用Windows API创建窗体

目标:

  1. 了解windows操作系统应用程序开发的基本概念,win32 API函数、消息与事件驱动;
  2. 掌握WinMain函数的基本框架,窗口定义、窗口创建、消息循环及窗口过程函数;

一、Windows API函数

API的英文全称是Application Programming Interface,WIN32 API也就是Microsoft Windows 32位平台的应用程序编程接口。

二、使用Windows API创建窗体

(一)完整代码

#include <windows.h>
#include <stdio.h>

LRESULT CALLBACK WndProc(
  HWND hwnd,         //窗口句柄,消息的所属窗口
  UINT message,      //消息标志
  WPARAM wParam,     //附加信息
  LPARAM lParam       
);

//定义入口函数winmain()
int WINAPI WinMain(         //
  HINSTANCE hInstance,      //应用程序实例
  HINSTANCE hPrevInstance,  //上一个应用程序实例
  LPSTR lpCmdLine,          //命令行参数 
  int nCmdShow              //窗口显示的方式
)
{

	//设计窗口类
	WNDCLASS wc;
	wc.cbClsExtra=0;  //类的附加信息
	wc.cbWndExtra=0;  //窗口的附加信息
	wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);  //背景色
	wc.hCursor=LoadCursor(NULL,IDC_CROSS);  //不采用默认光标
    //wc.hCursor=NULL; //采用默认光标
	//wc.hIcon=NULL;   //采用默认图标
	//wc.hIcon=LoadIcon(NULL,IDI_WARNING); //加载系统图标
	wc.hIcon=LoadIcon(NULL,IDI_ERROR); //图标
	wc.hInstance=hInstance;  //应用程序的实例
	wc.lpfnWndProc=WndProc;  //窗口过程函数名称,消息处理函数
	wc.lpszClassName="Windows";  //类的名字
	wc.lpszMenuName=NULL;  //菜单名字 空或者默认
	wc.style=CS_HREDRAW | CS_VREDRAW; //显示风格
	
	//注册窗口类
	RegisterClass(&wc);
    
	//创建窗口类
	HWND hwnd;
	hwnd=CreateWindow("Windows","The first Window",WS_OVERLAPPEDWINDOW,
		0,0,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 0;
}

LRESULT CALLBACK WndProc(
  HWND hwnd,      
  UINT message,      
  WPARAM wParam,   
  LPARAM lParam    
)
{
	switch(message)
	{
	case WM_CHAR:
		char szChar[20];
		sprintf(szChar,"char is %d",wParam);
		MessageBox(hwnd,szChar,"window",0);
		break;
	case WM_LBUTTONDOWN:
		MessageBox(hwnd,"下一个!","window",0);
		HDC hdc;
		hdc=GetDC(hwnd);
		TextOut(hdc,0,50,"天天向上!",strlen("天天向上!"));
		ReleaseDC(hwnd,hdc);
		break;
	case WM_PAINT:
		HDC hDC;
		PAINTSTRUCT ps;   
		hDC=BeginPaint(hwnd,&ps);
		TextOut(hDC,0,0,"好好学习!",strlen("好好学习!"));
		EndPaint(hwnd,&ps);
		break;
	case WM_CLOSE:
		if(IDYES==MessageBox(hwnd,"是否真的结束?","window",MB_YESNO))
		{
			DestroyWindow(hwnd);
		}
		break;
	case WM_DESTROY:
		PostQuitMessage(0);
		break;
	default:
		return DefWindowProc(hwnd,message,wParam,lParam);
	}
	return 0;
}

(二)效果图

开始界面
在这里插入图片描述
点击鼠标
在这里插入图片描述
退出
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值