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 }