Add window support for Windows.
This commit is contained in:
parent
5d32592126
commit
c05b7b6315
27 changed files with 783 additions and 95 deletions
|
@ -2,72 +2,66 @@
|
|||
#define UNICODE
|
||||
#endif
|
||||
|
||||
#include "MainApplication.h"
|
||||
#include "GuiApplication.h"
|
||||
#include "CommandLineArgs.h"
|
||||
#include "Win32WindowInterface.h"
|
||||
#include "FileLogger.h"
|
||||
#include "StringUtils.h"
|
||||
|
||||
#include "windows.h"
|
||||
|
||||
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
|
||||
void initializeCommandLineArgs(CommandLineArgs* args)
|
||||
{
|
||||
int nArgs{ 0 };
|
||||
auto szArglist = CommandLineToArgvW(GetCommandLineW(), &nArgs);
|
||||
if (szArglist == nullptr)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
std::vector<std::string> windowsArgs(nArgs);
|
||||
for (int idx = 0; idx < nArgs; idx++)
|
||||
{
|
||||
windowsArgs[idx] = StringUtils::convert(szArglist[idx]);
|
||||
}
|
||||
LocalFree(szArglist);
|
||||
|
||||
args->Process(windowsArgs);
|
||||
}
|
||||
|
||||
int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdLine, int nCmdShow)
|
||||
{
|
||||
// Register the window class.
|
||||
const wchar_t CLASS_NAME[] = L"Sample Window Class";
|
||||
std::ofstream out("out.txt");
|
||||
std::cout.rdbuf(out.rdbuf());
|
||||
|
||||
WNDCLASS wc = { };
|
||||
auto args = CommandLineArgs::CreateUnique();
|
||||
initializeCommandLineArgs(args.get());
|
||||
args->RecordLaunchPath();
|
||||
|
||||
wc.lpfnWndProc = WindowProc;
|
||||
wc.hInstance = hInstance;
|
||||
wc.lpszClassName = CLASS_NAME;
|
||||
// Start the main app
|
||||
auto main_app = MainApplication::Create();
|
||||
|
||||
RegisterClass(&wc);
|
||||
auto applicationContext = std::make_unique<Win32ApplicationContext>();
|
||||
applicationContext->hInstance = reinterpret_cast<void*>(hInstance);
|
||||
applicationContext->nCmdShow = nCmdShow;
|
||||
|
||||
HWND hwnd = CreateWindowEx(
|
||||
0, // Optional window styles.
|
||||
CLASS_NAME, // Window class
|
||||
L"Learn to Program Windows", // Window text
|
||||
WS_OVERLAPPEDWINDOW, // Window style
|
||||
main_app->Initialize(std::move(args), std::move(applicationContext));
|
||||
|
||||
// Size and position
|
||||
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
|
||||
MLOG_INFO("Creating GUI Application");
|
||||
|
||||
NULL, // Parent window
|
||||
NULL, // Menu
|
||||
hInstance, // Instance handle
|
||||
NULL // Additional application data
|
||||
);
|
||||
// Start the gui application
|
||||
auto gui_app = GuiApplication();
|
||||
gui_app.SetMainApplication(main_app);
|
||||
|
||||
if (hwnd == NULL)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
ShowWindow(hwnd, nCmdShow);
|
||||
MLOG_INFO("Running GUI Application");
|
||||
gui_app.Run();
|
||||
|
||||
// Run the message loop.
|
||||
MSG msg = { };
|
||||
while (GetMessage(&msg, NULL, 0, 0))
|
||||
{
|
||||
TranslateMessage(&msg);
|
||||
DispatchMessage(&msg);
|
||||
}
|
||||
main_app->ShutDown();
|
||||
return 0;
|
||||
}
|
||||
|
||||
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
switch (uMsg)
|
||||
{
|
||||
case WM_DESTROY:
|
||||
PostQuitMessage(0);
|
||||
return 0;
|
||||
|
||||
case WM_PAINT:
|
||||
{
|
||||
PAINTSTRUCT ps;
|
||||
HDC hdc = BeginPaint(hwnd, &ps);
|
||||
|
||||
FillRect(hdc, &ps.rcPaint, (HBRUSH)(COLOR_WINDOW + 1));
|
||||
|
||||
EndPaint(hwnd, &ps);
|
||||
}
|
||||
|
||||
}
|
||||
return DefWindowProc(hwnd, uMsg, wParam, lParam);
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue