环境介绍:
使用系统: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
最后运行: