#pragma once // 添加要在此处预编译的标头 #include "CcosThread.h" using SMDlgCallback = std::function; struct stuWindowElement { stuWindowElement() {}; stuWindowElement(string type, string name, DWORD style, int posX, int posY, int sizeX, int sizeY, int show) : m_strClassName(type), m_strWindowName(name), m_nStyle(style), m_nPosX(posX), m_nPosY(posY), m_nXsize(sizeX), m_nYsize(sizeY), m_nShow(show) {}; HWND m_hHandle{ nullptr }; //元素句柄 string m_strClassName; //类型名称 string m_strWindowName; //元素名称 DWORD m_nStyle{ WS_CHILD | WS_VISIBLE }; //样式 int m_nPosX{ 0 }; //x轴位置 int m_nPosY{ 0 }; //y轴位置 int m_nXsize{ 0 }; //x宽度 int m_nYsize{ 0 }; //y宽度 int m_nShow{ SW_SHOW }; //是否显示 }; class SMachineDlg : public Work_Thread { typedef map CallMap; public: SMachineDlg(string title,string windowClass, SMDlgCallback object); ~SMachineDlg(); HWND GetWindowHandle(); //获取句柄 static LRESULT CALLBACK WndTotalProc(HWND, UINT, WPARAM, LPARAM); //窗口函数 void SetJumpMode(int mode); //0:auto, 2;manual void SetWaitEventList(string& text); //打印等待事件列表 void SetRunHistory(string& text); //打印运行历史 protected: ATOM RegisterWindowClass(HINSTANCE hInstance = NULL); //注册窗口类 HWND OpenWindow(int nCmdShow); //创建窗口 void CreateUIElement(HWND& hMainWnd); //创建按钮、对话框 bool CloseWindow(); //销毁窗口 bool Exec() override; bool OnStartThread() override; bool OnEndThread() override; private: SMDlgCallback m_DlgCallback{ nullptr }; //调用主体回调 HANDLE m_ExitFlag{ nullptr }; //轮询线程退出句柄 HWND m_hWnd{ nullptr }; //窗口句柄 string m_strTitle; //标题栏文本 string m_strWindowClass; //主窗口类名 static CallMap g_HandleDlgMap; //消息处理窗口句柄集 //元素句柄 map m_ElementMap; //元素列表 };