C++创建窗口模板:

1 #include <Windows.h>
  2 #include <stdlib.h> 
  3 #include <Dbt.h>
  4 
  5 // 窗口处理函数
  6 LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, WPARAM lParam);
  7 
  8 // 从逻辑单元掩码值获取盘符名称
  9 char FirstDriveFromMask(ULONG unitMask);
 10 TCHAR g_szRootPath[MAX_PATH];
 11 // 
 12 int WINAPI WinMain(_In_ HINSTANCE hInstance, _In_ HINSTANCE hPreInstance, _In_ LPSTR lpCmdLine, _In_ int nCmdShow)
 13 {
 14     // 设计窗口类
 15     TCHAR szAppClassName[] = TEXT("U");  // 设置窗口类名
 16     TCHAR lpWindowName[] = TEXT("新增设备检测器");  // 设置窗口标题
 17     WNDCLASS wc = { 0 };
 18     wc.cbClsExtra = 0;            // 窗口类的扩展空间大小
 19     wc.cbWndExtra = 0;            // 窗口类的额外空间大小
 20     wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);  // 加载白色背景
 21     wc.hCursor = LoadCursor(NULL, IDC_ARROW);                // 加载光标
 22     wc.hIcon = NULL;                                         // 加载图标
 23     wc.hInstance = hInstance;                                // 当前应用实例句柄
 24     wc.lpfnWndProc = (WNDPROC)WindowProc;                    // 窗口处理函数
 25     wc.lpszClassName = szAppClassName;                       // 窗口类名
 26     wc.lpszMenuName = NULL;                                  // 窗口菜单名
 27     wc.style = CS_HREDRAW | CS_VREDRAW;                      // 窗口类风格
 28     // 注册窗口类
 29     RegisterClass(&wc);
 30     // 创建窗口
 31     HWND hWnd = CreateWindowW(szAppClassName,   // 窗口类名
 32         lpWindowName,                           // 窗口标题
 33         WS_BORDER | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MAXIMIZEBOX | WS_MINIMIZEBOX,  // dwStyle
 34         300, 200,  // 位置
 35         600, 400,  // 高宽
 36         NULL,                // 父窗口句柄
 37         NULL,                // 菜单句柄
 38         hInstance,           // 应用程序的实例句柄
 39         NULL);               // 参数
 40 
 41     // 显示窗口
 42     ShowWindow(hWnd, SW_SHOW);
 43     // 更新窗口
 44     UpdateWindow(hWnd);
 45     // 消息循环
 46     MSG msg;
 47     while (GetMessageW(&msg, NULL, 0, 0))
 48     {
 49         // 将虚拟按键转化为文字
 50         TranslateMessage(&msg);
 51         // 将消息分发给窗口
 52         DispatchMessage(&msg);
 53     }
 54     return 0;
 55 }
 56 
 57 // 窗口处理函数(窗口回调函数)
 58 LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, WPARAM lParam)
 59 {
 60     switch (uMsg)
 61     {
 62     case WM_CLOSE:    // 窗口关闭消息
 63         DestroyWindow(hWnd);
 64         break;
 65     case WM_DESTROY:  // 窗口销毁消息
 66         PostQuitMessage(0);  // 退出
 67         break;
 68     case WM_DEVICECHANGE:  // 设备改变消息
 69         switch (wParam)
 70         {
 71         case DBT_DEVICEARRIVAL:  // 设备插入计算机并且可以使用了
 72             //MessageBoxW(hWnd, TEXT("设备插入计算机并且可以使用了"), TEXT("提示"), MB_OK);
 73         {
 74             DEV_BROADCAST_HDR* lpdb = (DEV_BROADCAST_HDR*)lParam;
 75             DEV_BROADCAST_VOLUME* lpdbv = (DEV_BROADCAST_VOLUME*)lpdb;
 76             // 获取盘符名称
 77             char ch=FirstDriveFromMask(lpdbv->dbcv_unitmask);
 78             wsprintf(g_szRootPath, TEXT("识别到新盘:%c:"), ch);
 79 
 80             MessageBoxW(hWnd, g_szRootPath, TEXT("提示"), MB_OK);
 81             break;
 82         }
 83         case DBT_DEVICEREMOVECOMPLETE:  // 设备移除
 84             MessageBoxW(hWnd, TEXT("设备移除"), TEXT("提示"), MB_OK);
 85             break;
 86         default:
 87             break;
 88         }
 89         break;
 90     default:
 91         break;
 92     }
 93 
 94     return DefWindowProc(hWnd, uMsg, wParam, lParam);  // 系统默认处理
 95 }
 96 
 97 // 从逻辑单元掩码值获取盘符名称
 98 char FirstDriveFromMask(ULONG unitMask)
 99 {
100     char i;
101     for ( i = 0; i < 32; i++)
102     {
103         if (unitMask & 1)
104             break;
105         unitMask = unitMask >> 1;
106 
107     }
108     return i + 'A';
109 }

作者:꧁执笔小白꧂