这是博客园中的一篇博客,但是貌似没啥人看,我觉得挺好的,于是选择部分转载,转载请标明原链接!!!!
运行Visual Studio 2019
单击【文件】菜单→选择【新建】→【项目】,选择【空项目】→【下一步】,项目名称WinMain→点击【创建】
选择【解决方案资源管理器】中的【源文件】右键单击【源文件】→【添加】→【新建项】
添加代码,另外还需要设置字符集和子系统,否则会报错误
字符集设置,选择【WinMain】右击属性,选择【配置属性】→【高级】→【字符集】→【使用多字节字符集】
子系统设置,选择【WinMain】右击属性,选择【配置属性】→【链接器】→【子系统】→【窗口(/SUBSYSTEM:WINDOWS)】
代码如下:
#include<Windows.h>
#include<stdio.h>
LRESULT CALLBACK WinSunProc(
HWND hwnd, //窗口句柄
UINT uMsg, //消息标识符
WPARAM wParam,
LPARAM lParam //指定消息的附加消息
);
int WINAPI WinMain(
HINSTANCE hInstance, //当前实例句柄
HINSTANCE hPrevInstance, //前实例句柄
LPSTR lpCmdLiine, //命令行参数
int nCmdShow //窗口显示参数
)
{
//设计窗口类
WNDCLASS wndcls;
wndcls.cbClsExtra = 0; //结构附加内存空间
wndcls.cbWndExtra = 0; //窗口附加内存
wndcls.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); //背景画刷句柄
wndcls.hCursor = LoadCursor(NULL, IDC_CROSS); //窗口光标句柄
wndcls.hIcon = LoadIcon(NULL, IDI_ERROR); //窗口图标句柄
wndcls.hInstance = hInstance; //当前实例句柄
wndcls.lpfnWndProc = WinSunProc; //窗口过程函数指针
wndcls.lpszClassName = "sunxin2006"; //窗口类名称
wndcls.lpszMenuName = NULL; //菜单资源的名称
wndcls.style = CS_HREDRAW | CS_VREDRAW; //窗口样式类型
RegisterClass(&wndcls); //注册窗口类
//创建窗口,定义一个变量用来保存成功创建窗口后返回的句柄
HWND hwnd;
hwnd = CreateWindow("sunxin2006", "http://www.phei.com.cn", WS_OVERLAPPEDWINDOW, 0, 0, 600, 400, NULL, NULL, hInstance, NULL);
//显示及刷新窗口
ShowWindow(hwnd, SW_SHOWNORMAL);
UpdateWindow(hwnd);
//定义消息结构体,开始消息循环
MSG msg;
BOOL bRet;
while ((bRet = GetMessage(&msg, NULL, 0, 0)) != 0) {
if (bRet == -1) {
return -1;
}
else {
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_s(szChar, sizeof(szChar), "char code is %d", wParam);
MessageBox(hwnd, szChar, "char", 0);
break;
case WM_LBUTTONDOWN:
MessageBox(hwnd, "mouse clicked", "message", 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, 0, 0, "http://www.phei.com.cn", strlen("http://www.phei.com.cn"));
EndPaint(hwnd, &ps);
break;
case WM_CLOSE:
if (IDYES == MessageBox(hwnd, "是否真的结束?", "message", MB_YESNO)) {
DestroyWindow(hwnd);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
return 0;
}
步骤1:
步骤2:
步骤3:
步骤4:
步骤5:
步骤6:
步骤7:
步骤8:
步骤9: