123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 |
- #include "stdafx.h"
- #include "UIObject.h"
- #include <map>
- #include "CCOS.Dev.Generator.RYGEN.h"
- using namespace std;
- using namespace CCOS::Dev::Detail::Generator;
- namespace nsGEN = CCOS::Dev::Detail::Generator;
- #define MAX_LOADSTRING 100
- TCHAR szTitle[MAX_LOADSTRING] = "GenRUIYING"; //标题栏文本
- TCHAR szWindowClass[MAX_LOADSTRING] = "GenRUIYING"; //主窗口类名
- ATOM MyRegisterClass(HINSTANCE hInstance); //注册窗口类
- BOOL InitInstance(HINSTANCE, int); //
- LRESULT CALLBACK WndTotalProc(HWND, UINT, WPARAM, LPARAM); //窗口函数
- map<HWND, UIObject*> g_UIObject_MAP; //消息处理窗口句柄集
- //注册窗口类
- ATOM MyRegisterClass()
- {
- WNDCLASSEX wcex;
- memset(&wcex, 0, sizeof(WNDCLASSEX));
- wcex.cbSize = sizeof(WNDCLASSEX); //窗口类内存大小
- wcex.style = CS_HREDRAW | CS_VREDRAW; //改变窗口大小则重画
- wcex.lpfnWndProc = WndTotalProc; //窗口函数为WndProc
- wcex.cbClsExtra = 0; //窗口类无扩展
- wcex.cbWndExtra = 0; //窗口示例无扩展
- wcex.hInstance = GetModuleHandle(NULL); //注册窗口类实例句柄
- //wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WIN32UI)); //应用图标
- wcex.hCursor = LoadCursor(NULL, IDC_ARROW); //箭头光标
- wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); //白色背景
- //wcex.lpszMenuName = MAKEINTRESOURCE(IDC_WIN32UI); //菜单
- wcex.lpszClassName = szWindowClass; //窗口类名
- //wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL)); //
- return RegisterClassEx(&wcex); //注册窗口类
- }
- //调度消息函数
- void DispatchMsg()
- {
- MSG msg;
- // 主消息循环:
- while (GetMessage(&msg, NULL, 0, 0))
- {
- TranslateMessage(&msg); //消息转换
- DispatchMessage(&msg); //派送消息到窗口函数
- }
- }
- //创建窗口
- HWND CreateWnd(int nCmdShow)
- {
- HWND hWnd;
- hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
- CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, GetModuleHandle(NULL), NULL);
- if (hWnd)
- {
- ShowWindow(hWnd, nCmdShow); //显示窗口
- UpdateWindow(hWnd); //更新窗口客户区
- }
- return hWnd;
- }
- //窗口函数
- LRESULT CALLBACK WndTotalProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
- {
- map<HWND, UIObject*>::iterator iter = g_UIObject_MAP.find(hWnd);
- if (iter != g_UIObject_MAP.end())
- {
- if (iter->second->m_pAdapter != nullptr && iter->second->m_hCallBackHandle != nullptr)
- {
- return iter->second->m_hCallBackHandle(iter->second->m_pAdapter,message, wParam, lParam);
- }
- }
- return DefWindowProc(hWnd, message, wParam, lParam);
- }
- //V2 UI类
- UIObject::UIObject()
- {
- }
- UIObject::~UIObject()
- {
- }
- //初始化
- void UIObject::Init(void* obj, tCallPredate func)
- {
- m_pAdapter = obj;
- m_hCallBackHandle = func;
- }
- //循环入口
- bool UIObject::Exec() //只会执行一次
- {
- //regist it
- g_UIObject_MAP[m_hWnd] = this;
- DispatchMsg();
- return false;
- }
- //开始线程
- bool UIObject::OnStartThread()
- {
- //创建UI窗口
- MyRegisterClass();
- #ifdef _DEBUG
- m_hWnd = CreateWnd(SW_SHOW);
- #else
- m_hWnd = CreateWnd(SW_HIDE);
- #endif
- return ((m_hWnd != 0));
- }
- //结束线程
- bool UIObject::OnEndThread()
- {
- //destroy ui
- if (m_hWnd)
- {
- DestroyWindow(m_hWnd);
- m_hWnd = 0;
- }
- return true;
- }
- //等待窗口创建成功
- bool UIObject::WaitAlive(DWORD Timeout)
- {
- while (Timeout > 0)
- {
- if (m_hWnd)
- {
- return true;
- }
- Sleep(200);
- if (Timeout > 200)
- {
- Timeout -= 200;
- }
- else
- {
- return false;
- }
- }
- return false;
- }
- //创建发生器对象连接
- bool UIObject::Create()
- {
- if (StartThread())
- {
- if (WaitAlive(5000))
- {
- return true;
- }
- StopThread(1000);
- }
- return false;
- }
- //获取UI窗口句柄
- HWND UIObject::GetUI()
- {
- return m_hWnd;
- }
- //销毁对象
- bool UIObject::Destrory()
- {
- PostMessage(m_hWnd, WM_CLOSE, 0, 0);
- StopThread(5000);
- m_hWnd = nullptr;
- return true;
- }
|