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 }
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 102.
  • 103.
  • 104.
  • 105.
  • 106.
  • 107.
  • 108.
  • 109.

作者:꧁执笔小白꧂