From 88660a8f35cc3dce5a5d84ee1a62e59dade59a25 Mon Sep 17 00:00:00 2001 From: InkSoul Date: Wed, 31 May 2023 15:30:58 +0800 Subject: [PATCH] update for file open dialog --- src/CMakeLists.txt | 2 +- src/render/GUIFunction.cpp | 47 ++++++++++++++++++++++++++++++++++++++ src/render/GUIFunction.h | 27 ++++++++++++++++++++++ 3 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 src/render/GUIFunction.cpp create mode 100644 src/render/GUIFunction.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index c6be392..1b2cefc 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -30,7 +30,7 @@ function(buildHomework HOMEWORK_NAME) # Add optional readme / tutorial file(GLOB README_FILES "${HOMEWORK_FOLDER}/*.md") if(WIN32) - add_executable(${HOMEWORK_NAME} WIN32 ${MAIN_CPP} ${SOURCE} ${MAIN_HEADER} ${SHADERS_GLSL} ${SHADERS_HLSL} ${README_FILES} "render/glTFModel.h" "render/glTFModel.cpp") + add_executable(${HOMEWORK_NAME} WIN32 ${MAIN_CPP} ${SOURCE} ${MAIN_HEADER} ${SHADERS_GLSL} ${SHADERS_HLSL} ${README_FILES} "render/glTFModel.h" "render/glTFModel.cpp" "render/GUIFunction.h" "render/GUIFunction.cpp") target_link_libraries(${HOMEWORK_NAME} base ${Vulkan_LIBRARY} ${WINLIBS}) else(WIN32) add_executable(${HOMEWORK_NAME} ${MAIN_CPP} ${SOURCE} ${MAIN_HEADER} ${SHADERS_GLSL} ${SHADERS_HLSL} ${README_FILES}) diff --git a/src/render/GUIFunction.cpp b/src/render/GUIFunction.cpp new file mode 100644 index 0000000..ecce00c --- /dev/null +++ b/src/render/GUIFunction.cpp @@ -0,0 +1,47 @@ + +#include "GUIFunction.h" + + +// win32 api IFileOpenDialog +PWSTR GUIFunction::openFileFolderDialog(HINSTANCE hInstance, HINSTANCE, PWSTR pCmdLine, int nCmdShow) +{ + //initialize COM lib + HRESULT hResult = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE); + if (SUCCEEDED(hResult)) + { + IFileOpenDialog* pFileOpen = nullptr; + + hResult = CoCreateInstance(CLSID_FileOpenDialog, NULL, CLSCTX_ALL, IID_IFileOpenDialog, reinterpret_cast(&pFileOpen)); + + if (SUCCEEDED(hResult)) + { + // Show the Open dialog box. + hResult = pFileOpen->Show(NULL); + + // Get the file name from the dialog box. + if (SUCCEEDED(hResult)) + { + IShellItem* pItem; + hResult = pFileOpen->GetResult(&pItem); + if (SUCCEEDED(hResult)) + { + PWSTR pszFilePath; + hResult = pItem->GetDisplayName(SIGDN_FILESYSPATH, &pszFilePath); + + // Display the file name to the user. + if (SUCCEEDED(hResult)) + { + MessageBoxW(NULL, pszFilePath, L"File Path", MB_OK); + CoTaskMemFree(pszFilePath); + stringFilePath == pszFilePath; + } + pItem->Release(); + } + } + pFileOpen->Release(); + } + CoUninitialize(); + } + return stringFilePath; + +}; \ No newline at end of file diff --git a/src/render/GUIFunction.h b/src/render/GUIFunction.h new file mode 100644 index 0000000..d2e1893 --- /dev/null +++ b/src/render/GUIFunction.h @@ -0,0 +1,27 @@ +#pragma once + +#include +#include + +#include +#include +class GUIFunction +{ +public: + GUIFunction(); + ~GUIFunction(); + + PWSTR openFileFolderDialog(HINSTANCE hInstance, HINSTANCE, PWSTR pCmdLine, int nCmdShow); + private: + PWSTR stringFilePath; +}; + +GUIFunction::GUIFunction() +{ +} + +GUIFunction::~GUIFunction() +{ +} + +