语音提示
2016-07-14 10:05
281 查看
// Win32Project2.cpp : 定义应用程序的入口点。 // #include "stdafx.h" #include "Resource.h" #include <sapi.h> #include <sphelper.h> #pragma comment(lib,"sapi.lib") #pragma comment(lib,"ole32.lib") ISpVoice* pVoice=NULL; #define MAX_LOADSTRING 100 // 全局变量: HINSTANCE hInst; // 当前实例 TCHAR szTitle[MAX_LOADSTRING]=TEXT("标题"); // 标题栏文本 TCHAR szWindowClass[MAX_LOADSTRING]=TEXT("newClass"); // 主窗口类名 LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); BOOL DestroySAPI(); BOOL InitializationSAPI(); int APIENTRY _tWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPTSTR lpCmdLine, _In_ int nCmdShow) { UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_PARAMETER(lpCmdLine); // TODO: 在此放置代码。 MSG msg; HACCEL hAccelTable; WNDCLASSEX wcex; wcex.cbSize = sizeof(WNDCLASSEX); wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc = WndProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = hInstance; wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WIN32PROJECT2)); wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); wcex.lpszMenuName = MAKEINTRESOURCE(IDC_WIN32PROJECT2); wcex.lpszClassName = szWindowClass; wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL)); RegisterClassEx(&wcex); HWND hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); if (!hWnd) { return FALSE; } ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); // 主消息循环: while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return (int) msg.wParam; } LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int wmId, wmEvent; PAINTSTRUCT ps; HDC hdc; switch (message) { case WM_CREATE: InitializationSAPI(); break; case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); // 分析菜单选择: switch (wmId) { case IDM_ABOUT: pVoice->Speak(TEXT("呵呵1234abcd"), NULL, NULL); break; case IDM_EXIT: DestroyWindow(hWnd); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } break; case WM_PAINT: hdc = BeginPaint(hWnd, &ps); // TODO: 在此添加任意绘图代码... EndPaint(hWnd, &ps); break; case WM_DESTROY: DestroySAPI(); PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; } BOOL InitializationSAPI() { if (FAILED(CoInitialize(NULL))) { return FALSE; } HRESULT hRes; hRes = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void**)&pVoice); if (FAILED(hRes)) { return FALSE; } hRes = pVoice->SetInterest(SPFEI(SPEI_VISEME), SPFEI(SPEI_VISEME)); if (FAILED(hRes)) { return FALSE; } return TRUE; } BOOL DestroySAPI() { if (pVoice) { pVoice->Release(); } ::CoUninitialize(); return TRUE; }
相关文章推荐
- 一路走来---大二这一年
- labview实现字符串转16进制
- scp命令的用法详解
- linux安装jdk
- 不知道这些,加薪也是白加!
- Android 解析XML 文件的四种方法总结
- EXT4 form 表单内控件输入无效时不出现提示的原因
- 解决react-native 创建工程、init过程太慢的问题
- @RequestBody和@ResponseBody
- DataTable跳转到指定页
- 帝国cms会员查看权限设置方法
- 设计模式--原型模式
- MySQL存储过程中的3种循环
- 如何由jdk的安装版本改成非安装版本
- CSS3盒子模型
- smb.conf
- Map输出方式二:foreach输出Map
- java自学篇之class
- Training2:位操作训练
- KendoUI treeList popup 里添加下拉框 DropdownList 只向服务器传ID