UE-c++ 调用Windows文件管理器

本文介绍了在UE4游戏引擎中,通过C++实现用户自定义图片选择的功能。关键步骤包括添加必要的模块,打开文件对话框并获取选中文件路径。这一功能的实现使得程序能够接收用户提供的图像文件,增强了软件的交互性和实用性。
摘要由CSDN通过智能技术生成

一. 起因

学到图像处理的课程时,需要做个软件。
而对于处理的图像,我们希望用户可以提供自定义的图片,所以有这个需求。

二. 解决(注意,是UE框架下的C++)

!!!需要在项目.Build.cs添加 “DesktopPlatform”,“ApplicationCore” 两个模块

Build失败大部分是因为模块加载问题,不是你include头文件就行了,具体原因请了解UE的模块机制。

代码如下

#include "DesktopPlatformModule.h"
#include "Windows/WindowsWindow.h"
TArray<FString> UPhBlueprintFunctionLibrary::OpenImageFile()
{
	//选中文件路径
	TArray<FString> Path;
	//过滤文件类型
	const FString FileType = TEXT("图像文件 (*bmp;*.jpg;*.jpeg;*.png)|*bmp;*.jpg;*.jpeg;*.png");
	//文件选择窗口默认路径
	const FString DefaultPath = FPaths::ConvertRelativePathToFull(FPaths::ProjectDir());
	//获得支持的平台
	IDesktopPlatform* DesktopPlatform = FDesktopPlatformModule::Get();
	//获得句柄
	const TSharedPtr<FGenericWindow> NativeWindow = GEngine->GameViewport->GetWindow()->GetNativeWindow();
	const auto Window = static_cast<FWindowsWindow*>(NativeWindow.Get());
	const auto Hwnd = Window->GetHWnd();
	//打开窗口
	DesktopPlatform->OpenFileDialog(Hwnd, TEXT("导入图片"), DefaultPath, TEXT(""), *FileType, EFileDialogFlags::Multiple, Path);
	return Path ;
}

UPhBlueprintFunctionLibrary 自定义的工具类。
FileType |前是显示给用户的文本,|后是需要的文件类型。
DesktopPlatform 不同平台。
NativeWindow 当前窗口。
EFileDialogFlags 控制单选/多选文件。
Path 此次窗口选择的所有文件的路径。

效果如图
在这里插入图片描述

三. 感想

调用文件夹 真是非常非常重要的一件事,不是因为实现它的难易程度,
而是它真的是 我写软件的灵魂所在,它意味着我的程序可以使用用户提供的文件,
不再是单个单个字符的输入,再默默的输出。
这在以前是不能想象的,它的出现,使得我就像井底之蛙看到了大海,萤火瞥见了皓月。
是那种,整日的迷茫,到一瞬间的豁然开朗。
自定义,实在是一件美妙的事情!!!
可惜同学不能怎么get到我的点…
emmm
下篇再说怎么使用得到的文件路径读取图片数据~~~

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
UE4中调用动态库,需要进行以下几个步骤: 1. 编写动态库的头文件和源文件,并进行编译生成动态库文件(.dll或.so文件)。 2. 在UE4项目中创建新的C++类或打开现有的C++类,并添加对动态库头文件的包含语句。 3. 在C++类中声明动态库函数的函数声明(函数名、参数类型和返回类型),并在其中使用动态库函数。 4. 将动态库文件(.dll或.so文件)复制到UE4项目的插件或游戏模块的Binaries/Win64目录中。 5. 在UE4项目的构建设置中添加对动态库文件的引用。在UE4项目的.build.cs文件中添加以下代码: ``` PublicAdditionalLibraries.Add("MyDynamicLibrary.lib"); ``` 其中"MyDynamicLibrary.lib"是您的动态库文件的名称。 6. 在UE4项目中使用动态库函数时,需要使用动态库的导出函数名(也称为C++符号)来调用该函数。您可以使用Windows的dumpbin工具或Linux的nm工具来查看动态库的导出函数名。 下面是一个简单的例子,演示如何在UE4项目中调用一个名为"my_function"的动态库函数: 1. 编写动态库的头文件和源文件,并进行编译生成动态库文件: ``` // MyDynamicLibrary.h #ifdef MYDYNAMICLIBRARY_EXPORTS #define MYDYNAMICLIBRARY_API __declspec(dllexport) #else #define MYDYNAMICLIBRARY_API __declspec(dllimport) #endif MYDYNAMICLIBRARY_API int my_function(int a, int b); // MyDynamicLibrary.cpp #include "MyDynamicLibrary.h" MYDYNAMICLIBRARY_API int my_function(int a, int b) { return a + b; } ``` 2. 在UE4项目中创建新的C++类或打开现有的C++类,并添加对动态库头文件的包含语句: ``` #include "MyDynamicLibrary.h" ``` 3. 在C++类中声明动态库函数的函数声明,并在其中使用动态库函数: ``` // MyClass.h #pragma once #include "CoreMinimal.h" #include "GameFramework/Actor.h" #include "MyClass.generated.h" UCLASS() class MYPROJECT_API AMyClass : public AActor { GENERATED_BODY() public: UFUNCTION(BlueprintCallable, Category="MyCategory") int MyFunction(int a, int b); }; // MyClass.cpp #include "MyClass.h" int MyFunction(int a, int b) { return my_function(a, b); } ``` 4. 将动态库文件(.dll或.so文件)复制到UE4项目的插件或游戏模块的Binaries/Win64目录中。 5. 在UE4项目的构建设置中添加对动态库文件的引用。在UE4项目的.build.cs文件中添加以下代码: ``` PublicAdditionalLibraries.Add("MyDynamicLibrary.lib"); ``` 6. 在UE4项目中使用动态库函数时,需要使用动态库的导出函数名(也称为C++符号)来调用该函数。您可以使用Windows的dumpbin工具或Linux的nm工具来查看动态库的导出函数名。在此例中,导出函数名为"my_function"。 ``` // MyClass.cpp #include "MyClass.h" int MyFunction(int a, int b) { // 调用动态库函数 int result = my_function(a, b); return result; } ``` 至此,您已经成功在UE4项目中调用动态库函数。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值