PLMTool/UI/ToastUi/UI0.cpp

110 lines
3.0 KiB
C++
Raw Normal View History

2024-02-28 10:26:19 +08:00
// UI.cpp : 定义应用程序的入口点。
//
#include "../framework.h"
#include "../UI.h"
#include "wintoastlib.h"
#include <codecvt>
class MyToastHandler :public WinToastLib::IWinToastHandler {
public:
MyToastHandler() {}
void toastActivated()const {
//LOG(DEBUG) << "The user clicked in this toast";
}
void toastActivated(int actionIndex)const {
//LOG(DEBUG) << "The user clicked on action #" << actionIndex;
m_resultCode = actionIndex;
}
void toastDismissed(WinToastDismissalReason state) const {
switch (state) {
case UserCanceled:
//LOG(DEBUG) << "The user dismissed this toast";
//exit(1);
break;
case TimedOut:
//LOG(DEBUG) << "The toast has timed out";
//exit(2);
break;
case ApplicationHidden:
//LOG(DEBUG) << "The application hid the toast using ToastNotifier.hide()";
//exit(3);
break;
default:
//LOG(DEBUG) << "Toast not activated";
//exit(4);
break;
}
//m_packet->SetShowToast(false);
}
void toastFailed() const {
//LOG(ERROR) << "Error showing current toast";
}
static int m_resultCode;
};
int MyToastHandler::m_resultCode = -1;
int APIENTRY wWinMain0(_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPWSTR lpCmdLine,
_In_ int nCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);
std::wstring appUserModelID = L"警告";
WinToastLib::WinToast::instance()->setAppName(L"警告");
WinToastLib::WinToast::instance()->setAppUserModelId(appUserModelID);
WinToastLib::WinToastTemplate toast(WinToastLib::WinToastTemplate::ImageAndText02);
toast.setTextField(L"10s后将关闭plm客户端...", WinToastLib::WinToastTemplate::FirstLine);
char path[MAX_PATH] = { 0 };
GetModuleFileNameA(NULL, path, MAX_PATH);
std::string filePath = path;
size_t nPos = filePath.find_last_of('\\');
filePath = filePath.substr(0, nPos);
std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
std::wstring wstr = converter.from_bytes(filePath + "\\notify.webp");
toast.setImagePath(wstr);
//toast.addAction(L"确定");
//toast.addAction(L"取消");
toast.setScenario(WinToastLib::WinToastTemplate::Scenario::Alarm); //报警
toast.setExpiration(10000); //10s
INT64 id = -1;
if (WinToastLib::WinToast::instance()->initialize()) {
id = WinToastLib::WinToast::instance()->showToast(toast, new MyToastHandler());
}
int count = 100,ret = -1;
while (count--) {
ret = (MyToastHandler::m_resultCode == 0 || MyToastHandler::m_resultCode == 1) ? MyToastHandler::m_resultCode : ret;
if (ret != -1) {
++ret; //1:确定 2:取消
break;
}
Sleep(100);
}
WinToastLib::WinToast::instance()->hideToast(id);
return ret;
}