如何手动做Windows窗口

#include <Windows.h>
#include <stdio.h>

HINSTANCE hinst;

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

int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int CmdShow)
{	
	hinst = hinstance;//把系统传来的实例句柄用全局实例句柄变量保存起来,方便以后使用
	//定义窗口类
	WNDCLASSEX wcx;//末尾加EX代表扩展功能,比不加EX更强大

	//给窗口对象赋值(手动初始化)
	wcx.cbSize = sizeof(wcx);
	wcx.style = CS_HREDRAW | CS_VREDRAW;
	wcx.lpfnWndProc = MainWndProc;//窗口过程,由这个窗口过程处理消息,把这个与窗口过程联系起来了
	wcx.cbClsExtra = 0;//不使用类内存
	wcx.cbWndExtra = 0;//不使用窗口内存
	wcx.hInstance = hinstance;
	wcx.lpszMenuName = NULL;
	wcx.lpszClassName = L"MainWClass";
	wcx.hIcon = LoadIcon(NULL, IDI_APPLICATION);
	wcx.hCursor = LoadCursor(NULL, IDC_ARROW);//箭头形状 的鼠标指针
	wcx.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);//用白色的画刷把窗口背景变白色
	wcx.hIconSm = (HICON)LoadImage(hinstance,
		MAKEINTRESOURCE(5)/*在5号资源里有一个图片*/, IMAGE_ICON,
		GetSystemMetrics(SM_CXSMICON),//CX宽度
		GetSystemMetrics(SM_CYSMICON),//CY高度
		LR_DEFAULTCOLOR);
	
	//先要注册这个窗口类,如果失败就会提前结束
	if (!RegisterClassEx(&wcx))
	{
		return 1;
	}
	
	//注册成功后,使用窗口类创建窗口
	//先要定义一个窗口句柄
	HWND hwnd;//窗口句柄
	hwnd = CreateWindow(L"MainWClass",
		L"HELLO",
		WS_OVERLAPPEDWINDOW,//微软最经典的样式
		CW_USEDEFAULT,//左上角点的x值
		CW_USEDEFAULT,//左上角点的y值
		CW_USEDEFAULT,//窗口的长
		CW_USEDEFAULT,//窗口的高
		(HWND)NULL,
		(HMENU)NULL,
		hinstance,
		(LPVOID)NULL);

	if (!hwnd)//创建失败
	{
		return 1;
	}

	//显示窗口    如何显示是 Windows 告诉我们的   就是Winmain里面最后一个参数
	ShowWindow(hwnd, CmdShow);
	UpdateWindow(hwnd);//立即显示

	
	
	//写消息循环   即去消息队列里取消息  
	//先要定义消息变量   和判断有没有取到消息
	MSG msg;//消息变量
	BOOL fGotMessage;//有没有取到消息

	while (fGotMessage = GetMessage(&msg, (HWND)NULL, 0, 0) != 0)//用一个 循环不停取消息
	{
		TranslateMessage(&msg);//转化消息
		DispatchMessage(&msg);//转发消息  转发给窗口

	}

	return msg.wParam;

}

//          窗口过程函数   消息处理
LRESULT CALLBACK MainWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	switch (uMsg)
	{
	//每当要处理一个消息 就写一个 case
	case WM_DESTROY:
		PostQuitMessage(0);//发送一个退出消息给Windows
		return 0;
	default://我们不想去处理这个消息,就转给Windows去处理
		return DefWindowProc(hwnd, uMsg, wParam, lParam);
	}
}

点击运行



这个是简化版   直接省略了菜单和其他的一些部分    自己写的目的是对这些代码有个深刻的了解


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值