1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/lsylovews-uiengine

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

C++: простой UI-движок для разработки Windows-приложений

Простой UI-движок на C++, который облегчает разработку Windows-интерфейсов, содержит в приложении редактор игровых карт и небольшую приключенческую игру (игра пока не завершена).

В приложении есть два файла:

  • папка UiEngine с исходным кодом проекта;
  • папка UIEngneLib со статической библиотекой UI-движка.

Движок представляет собой обёртку над Win32 API, которая подойдёт разработчикам, не знакомым с Win32 API.

Пример использования

HWND hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
	0, 0, 800, 600, nullptr, nullptr, hInstance, nullptr);

if (!hWnd)
{
    return FALSE;
}
MyEngine::cGameEngine::GetEngine()->init(hWnd); // Инициализация и привязка к окну
MyEngine::cGameEngine::GetEngine()->CreateCircle(RECT{ 10,10,100,100 }); // Создание круга
MyEngine::cGameEngine::GetEngine()->CreateLine(POINT{ 20,30 }, POINT{ 100,200 }); // Создание линии
MyEngine::cButton* btn = new MyEngine::cButton(L"点我", 100, 30); // Создание кнопки
btn->SetX(100);
btn->SetY(200);
MyEngine::cGameEngine::GetEngine()->AddEngineUi(btn); // Добавление кнопки в движок
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);

// В конце программы необходимо вызвать MyEngine::cGameEngine::GetEmgine()->ReleaseSelf для освобождения ресурсов

Эффект от примера кода

Обновление от 2017/8/18:15:02

Добавлено управление ресурсами через пул ресурсов GDI. Пул используется для управления изображениями и реализован как синглтон. Также добавлена блокировка CLock для решения проблем с многопоточностью. Исправлены некоторые ошибки.

Использование пула ресурсов

#include "cResourcePool.h"
class LoadResource
{
public:
LoadResource()
{
   cResourcePool::AddObjByKey("pic1", (HBITMAP)LoadImage(nullptr, L"D:\\puc1.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE));
   cResourcePool::AddObjByKey("pic2", (HBITMAP)LoadImage(nullptr, L"D:\\puc2.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE));
   cResourcePool::AddObjByKey("pic3", (HBITMAP)LoadImage(nullptr, L"D:\\puc3.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE));
   cResourcePool::AddObjByKey("pic4", (HBITMAP)LoadImage(nullptr, L"D:\\puc4.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE));
}
~LoadResource(){};

}

#include "cResourcePool.h"
class Test
{
public:
Test()
{
   HBITMAP h = cResourcePool::GethObjByKey("pic1");
} 
~Test(){}   
}

Этот пример показывает, как использовать ресурсы из пула. Для более подробного изучения можно обратиться к исходному коду UIEngine.

Дальнейшие обновления

Последующие обновления включают изменения в классе cGameEngine, добавление класса cSight для помощи в управлении графикой, пересмотр класса cMyTimer и некоторые корректировки в классе cCircle.

Также после обновления 2017/8/23:21:30 движок больше не зависит от шаблонов проектов VS, а создаёт и уничтожает окна самостоятельно.

Код после обновления

#include <cGameEngine.h>
using namespace MyEngine;
#pragma comment(lib, "UIEngine.lib")

int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
                     _In_opt_ HINSTANCE hPrevInstance,
                     _In_ LPWSTR    lpCmdLine,
                     _In_ int       nCmdShow)
{
	cGameEngine::GetEngine()->init(hInstance);  // Инициализируем движок
	cGameEngine::GetEngine()->CreateText(L"文本", 100, 200);  // Создаём текст
	cGameEngine::GetEngine()->CreateRectangle(POINT{ 300,20 }, 100, 50);  // Создаём прямоугольник
	cCircle* pCir = new cCircle(POINT{ 200,400 }, 30);
	cGameEngine::GetEngine()->AddEngineUi(pCir);  // Добавляем круг в движок
	return cGameEngine::GetEngine()->LuanchEngine();  // Запускаем движок
}

Результат кода

Безопасность после обновления от 2017/10/14:23:14

Пул ресурсов и класс cGameEngine были изменены для обеспечения безопасности потоков.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Простой UI-движок, написанный на C++, для удобной разработки оконных приложений под Windows. В приложении содержатся игровой редактор карт и небольшая приключенческая игра. В папке с приложением есть два 64-битных исполняемых файла: редактор карт и приключенческая игра. Папка UiEngine содержит исходный код проекта, а папка UiEngneLib — статичес... Развернуть Свернуть
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/lsylovews-uiengine.git
git@api.gitlife.ru:oschina-mirror/lsylovews-uiengine.git
oschina-mirror
lsylovews-uiengine
lsylovews-uiengine
master