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 }
作者:꧁执笔小白꧂