一、Windows程序的Hello world
#include<windows.h>int WINAPI WinMain(HINSTANCE hInstance, //程序实例句柄HINSTANCE hPreHinstance, //上一个程序的实例句柄(被遗弃,参数始终为NULL)LPSTR lpCmdeLine, //命令行参数int nCmdeShow //显示方式
)
{MessageBoxA(0,"12333","Caption",MB_OK);return 0;//以上函数,如果忘记参数和返回值是什么//可以用鼠标双击想要查看的函数,然后按F1,就可以打开微软文档了
}
这是第一个Windows程序,Winmain函数必须写这些参数,不能省略。MessageBox函数有MessageBoxA和MessageBoxW,分别使用ANSI和Unicode字符集。
当然,如果使用VS2022,直接编译运行,会出现这样的错误:
就是提示找不到main的入口。因为VS2022默认是启动控制台的,我们需要右击解决方案,然后点击属性:
在子系统这里选择窗口。就可以正常编译运行程序了。
二、Windows程序的字符串处理
字符类型有CHAR和WCHAR,分别是用1字节代表一个字符和2字节代表一个字符。还有TCHAR,这个字符串的类型有可能是CHAR或者WCHAR,由环境决定,需要引入tchar.h头文件。
微软对这两种字符串类型进行了统一,所以有_T(“”)这样的字符串。
#include<windows.h>
#include<tchar.h>int WINAPI WinMain(HINSTANCE hInstance, //程序实例句柄HINSTANCE hPreHinstance, //上一个程序的实例句柄(被遗弃,参数始终为NULL)LPSTR lpCmdeLine, //命令行参数int nCmdeShow //显示方式
)
{CHAR str1[] = "456789";WCHAR str2[] = L"88888";TCHAR str3[] = _T("787979");//在前面加相应的表示符,那么这个字符串就是WCHAR或者TCHAR类型的了MessageBox(0,str3,str3,MB_OK);return 0;
}
三、Windows窗口程序
#include<windows.h>
#include<tchar.h>LRESULT CALLBACK Wndproc(_In_ HWND hwnd,_In_ UINT uMsg,_In_ WPARAM wParam,_In_ LPARAM lParam
)
{switch (uMsg){case WM_CREATE:MessageBoxW(hwnd, L"Create", L"Atten", MB_OK);break;case WM_CLOSE:MessageBoxW(hwnd, L"Close", L"Atten", MB_OK);DestroyWindow(hwnd);PostQuitMessage(0);break;}return DefWindowProcW(hwnd, uMsg, wParam, lParam);//然而,并不是所有的消息都需要你亲自处理;对于许多常见的消息,Windows 提供了默认的处理行为。//DefWindowProcW 函数就是用来提供这些默认行为的。
}
//以上是回调函数,就是告诉程序接收到相应的事件,应该执行什么操作int WINAPI WinMain(HINSTANCE hInstance, //程序实例句柄HINSTANCE hPreHinstance, //上一个程序的实例句柄(被遗弃,参数始终为NULL)LPSTR lpCmdeLine, //命令行参数int nCmdeShow //显示方式
)
{//1、创建一个窗口类WNDCLASS myclass = { 0 };myclass.lpszClassName = L"study"; //写win程序都用unicode字符,这样能表示的字符多点myclass.lpfnWndProc = Wndproc; //这个填回调函数//2、注册窗口类RegisterClassW(&myclass); //就是告诉操作系统我创建了这么一个窗口,用于和操作系统交互//3、创建窗口HWND hwindow = CreateWindowW(myclass.lpszClassName,L"study",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,0,CW_USEDEFAULT,0,NULL,NULL,hInstance,myclass.lpfnWndProc);//这些参数按F1看看或者问文心一言吧//4、显示窗口ShowWindow(hwindow,SW_SHOWNORMAL);//5、获取消息MSG msg = { 0 };while (GetMessageW(&msg,0,0,0)){DispatchMessageW(&msg); //分发消息给消息处理函数}//以上是对所有消息进行处理,如果没有消息处理的代码,程序会闪退return 0;
}