动手写第一个Windows程序
运行Visual Studio 2019
单击【文件】菜单→选择【新建】→【项目】,选择【空项目】→【下一步】,项目名称WinMain→点击【创建】
选择【解决方案资源管理器】中的【源文件】右键单击【源文件】→【添加】→【新建项】
添加代码,另外还需要设置字符集和子系统,否则会报错误
字符集设置,选择【WinMain】右击属性,选择【配置属性】→【高级】→【字符集】→【使用多字节字符集】
子系统设置,选择【WinMain】右击属性,选择【配置属性】→【链接器】→【子系统】→【窗口(/SUBSYSTEM:WINDOWS)】
代码:
#include <windows.h> #include <stdio.h> LRESULT CALLBACK WinSunProc( HWND hwnd, // handle to window UINT uMsg, // message identifier WPARAM wParam, // first message parameter LPARAM lParam // second message parameter ); int WINAPI WinMain( _In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nShowCmd ) //int WINAPI WinMain( // HINSTANCE hInstance, // handle to current instance // HINSTANCE hPrevInstance, // handle to previous instance // LPSTR lpCmdLine, // command line // int nCmdShow // show state //)// 会报错 严重性 代码 说明 项目 文件 行 禁止显示状态 警告 C28251 “WinMain”的批注不一致: 此实例包含 无批注。请参见 c:\program files (x86)\windows kit { //设计一个窗口类 WNDCLASS wndcls; wndcls.cbClsExtra = 0;//窗口类无扩展 wndcls.cbWndExtra = 0;//窗口实例无扩展 wndcls.hbrBackground = (HBRUSH)GetStockObject(WHITE_PEN);//窗口背景颜色白色 wndcls.hCursor = LoadCursor(NULL, IDC_CROSS);//窗口光标 wndcls.hIcon = LoadIcon(NULL, IDI_ERROR);//窗口图标 wndcls.hInstance = hInstance; //应用程序实例句柄由WinMain函数传进来 wndcls.lpfnWndProc = WinSunProc;//定义窗口消息处理函数 wndcls.lpszClassName = "sunxin2019";//窗口类名为"sunxin2019" wndcls.lpszMenuName = NULL;//窗口无菜单 wndcls.style = CS_HREDRAW | CS_VREDRAW;//窗口样式 RegisterClass(&wndcls); //创建窗口,定义一个变量用来保存成功创建窗口后返回的句柄 HWND hwnd;//窗口句柄 hwnd = CreateWindow("sunxin2019",//窗口类名 "http://www.ceovs.com",//窗口实例标题 WS_OVERLAPPEDWINDOW,/// 窗口风格,或称窗口格式 0, // 初始 x 坐标 0, // 初始 y 坐标 600, // 初始 x 方向尺寸 400,// 初始 y 方向尺寸 NULL, // 父窗口句柄 NULL, // 窗口菜单句柄 hInstance,// 程序实例句柄 NULL); // 创建参数 //显示及刷新窗口 ShowWindow(hwnd, SW_SHOWNORMAL);//显示窗口 UpdateWindow(hwnd);//刷新窗口 //定义消息结构体,开始消息循环 MSG msg; BOOL bRet; //while (GetMessage(&msg, NULL, 0, 0)) while ((bRet = GetMessage(&msg, hwnd, 0, 0)) != 0) { if (bRet == -1) { // handle the error and possibly exit return -1; } else { TranslateMessage(&msg); DispatchMessage(&msg); } } return msg.wParam; } //编写窗口过程函数 LRESULT CALLBACK WinSunProc( HWND hwnd, // handle to window UINT uMsg, // message identifier WPARAM wParam, // first message parameter LPARAM lParam // second message parameter ) { switch (uMsg) { case WM_CHAR: char szChar[20]; sprintf_s(szChar, sizeof(szChar), "按键对应的ASCII码值 %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, "是否真的结束?", "提示",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: