C语言程序设计-纯Code构建第一个窗口

环境介绍:

使用系统:win10 64 位操作系统

IDE工具:VS2022 Professional 2022 (64 位) - Current 版本 17.6.2

1 新建项目:选

2 创建

3 右键项目,修改熟悉

4 新建 xx.c 文件

5 代码如下:

#include <Windows.h>

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); //处理消息体

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
	static TCHAR szAppName[] = TEXT("MyWindow");
	HWND hwnd;  //
	MSG msg;
	WNDCLASS wc;//窗口类

	//窗口熟悉
	wc.style = CS_HREDRAW | CS_VREDRAW;  //样式
	wc.lpszClassName = szAppName;        //类名
	wc.lpszMenuName = NULL;              //菜单
	wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); //背景色
	wc.lpfnWndProc = WndProc;                              //处理函数,上面定义
	wc.cbWndExtra = 0;
	wc.cbClsExtra = 0;
	wc.hInstance = hInstance;                              //实例
	wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);            //图标
	wc.hCursor = LoadCursor(NULL, IDC_ARROW);              //鼠标

	if (!RegisterClass(&wc)) {
		MessageBox(NULL, TEXT("窗口注册失败"), TEXT("错误"), MB_OK | MB_ICONERROR);
		return 0;
	}
	//创建窗口
	hwnd = CreateWindow(
		szAppName,            //类名
		TEXT("first windows"), // 标题
		WS_OVERLAPPEDWINDOW,   //风格
		CW_USEDEFAULT,         // 显示位置 x
		CW_USEDEFAULT,         // 显示位置 y
		CW_USEDEFAULT,         // 宽度 
		CW_USEDEFAULT,         // 高度
		NULL,                  //父窗口
		NULL,                  //父窗口
		hInstance,             //句柄
		NULL
	);

	ShowWindow(hwnd, iCmdShow);// 显示窗口
	UpdateWindow(hwnd);//更新窗口

	//接受消息
	while (GetMessage(&msg, NULL, 0, 0))
	{
		TranslateMessage(&msg);//虚拟消息转为字符消息
		DispatchMessage(&msg);//分发回调

	}
	return msg.wParam;

}
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lParam)
{
	HDC hdc; //设备环境句柄
	PAINTSTRUCT ps;//绘制矩形
	RECT rect; //矩形结构
	switch (message)
	{
	case WM_CREATE: //窗口创建完成发来消息
		MessageBox(hwnd, TEXT("窗口已创建完成!"), TEXT("我的窗口"), MB_OK | MB_ICONINFORMATION);
		return 0;
	case WM_PAINT: //处理窗口区域无效时发来的消息
	{
		hdc = BeginPaint(hwnd, &ps);
		GetClientRect(hwnd, &rect);
		DrawText(hdc, TEXT("这是一个窗口"), -1, &rect, DT_SINGLELINE | DT_CENTER | DT_CENTER);
		EndPaint(hwnd, &ps);
		return 0;
	}
	case  WM_LBUTTONDOWN:
		MessageBox(hwnd, TEXT("鼠标左键"), TEXT("点击"), MB_OK | MB_ICONINFORMATION);
		return 0;
	case WM_DESTROY: //处理窗口关闭的时候发出的消息
	{
		MessageBox(hwnd, TEXT("关闭程序!"), TEXT("结束"), MB_OK | MB_ICONINFORMATION);
		PostQuitMessage(0);
		return 0;
	}
	}
	return DefWindowProc(hwnd, message, wparam, lParam);
}

 6 出现问题解决

 6-1 无法解析的外部符号 _main,函数 "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ) 中引用了该符号

 解决办法:把项目属性->链接器->系统->子系统 改成窗口

6-2 找不到ucrbased.dll 或者 找不到VCRUNTIME140D.dll 

解决方案:

下载 我给出的dll 地址,先项目生成,然后把这两个dll copy到生成exe目录。或者直接copy到系统win32或者64位置 

下载地址:Win10系统C的第一个窗口缺少dll

最后运行:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值