Easy Native Window Popup Documentation
Easy Native Window Popup 2.0.0
CelestiaDominance | Unreal Engine 5.7 and 5.8 | Windows 64-bit
PURPOSE
Display native Windows popup windows from Blueprint or C++. Use them for confirmations, short text prompts, warnings and timed choices. These are separate desktop windows, not UMG widgets, Windows toast notifications or replicated multiplayer messages.
QUICK EXAMPLE: CONFIRM A CHOICE
In your Level Blueprint, character or another object with a live world, call Show Native Window Popup from your own event. Set Title and Message, choose Yes / No, and connect On Yes to your confirmation logic and On No to your alternative. On Completed runs after the matching result event for every normal completion or failure. Do not run the same action from both events unless that is intentional.
Blueprint activates the async node automatically. C++ callers bind delegates before calling Activate(). Calls belong on the game thread. Each proxy can run only once; create a new action for the next popup.
INPUTS
Title: window caption, up to 1,024 UTF-16 units.
Message: selectable, scrollable multiline text, up to 16,384 UTF-16 units. Ampersands and angle brackets are literal text.
Buttons: OK; OK / Cancel; Yes / No; Yes / No / Cancel; Retry / Cancel; Abort / Retry / Ignore.
Icon: None, Information, Warning, Error, Question or Custom Texture.
Timeout Seconds: real elapsed seconds from opening. Zero leaves the window open until a button, close or cancel action. Positive values below 0.1 are raised to 0.1. Negative, non-finite and values above 86,400 fail validation. Completion runs on the next available game-thread tick; a stalled game thread can delay delivery.
Show Progress Bar: visualizes the timeout, not a download or background task. The bar and time remaining appear only with a positive timeout.
Enable Text Input: adds one editable line. Returned text is supplied on result events, including Cancel and Timeout.
Default Input Text: initial input; it must fit Max Input Length.
Custom Icon Texture: used only with Icon = Custom Texture; see the texture section below.
Block Game Input: disables the owning game window and ignores its game viewport input until its last blocking popup closes. Existing disabled/ignored states are preserved. This does not pause simulation, network activity or audio. Use your own pause policy when appropriate. In PIE embedded in the editor, the containing editor window is the owner and is blocked too.
Sound: None (Silent), Default, Asterisk, Exclamation, Hand, Question, OK or Simple Beep. Sounds follow the Windows sound scheme and volume; silence is respected. Concurrent sounds may replace each other.
Max Input Length (advanced): 1..32,767 UTF-16 units; default 1,024. This bounds input length, not validation of names, paths, commands or other business rules. Validate returned text in your own system. The input is plain text, not a password field.
RESULTS AND POPUP CONTROL
The matching On OK, On Cancel, On Yes, On No, On Retry, On Abort, On Ignore, On Timeout or On Failed fires first, then On Completed. Result and User Input are available on each event. A finished action cannot reopen or complete again.
Save the Popup output reference if you need to call Cancel Popup, Is Popup Open, Get User Input Text or Get Last Error later. Cancel Popup requests Cancel, returns true only when accepted, and normally dispatches its events on a following game-thread tick. Closing the title bar or pressing Escape also gives Cancel, even in an OK-only layout.
Get Last Error explains validation, context, icon or native window creation failures. Failed is distinct from a user cancellation. Do not interpret Failed as the user declining a choice.
Tab and Shift+Tab move between controls. Enter activates the focused button, or the first button when focus is in a text control. Escape closes the popup. Windows can be resized and follow monitor DPI changes.
TEXT PROMPT EXAMPLE
Use OK / Cancel, Enable Text Input = true, Default Input Text = Player, Max Input Length = 32. On OK, validate User Input and apply it. On Cancel, keep the old name. Do not use an unvalidated string as a filename, command or trusted network payload. The plugin does not log entered text, titles or messages.
TIMED CHOICE EXAMPLE
Use Yes / No / Cancel, Timeout Seconds = 15 and Show Progress Bar = true. Handle On Timeout explicitly, for example by keeping the existing option. The progress bar tracks time only. Block Game Input is independent of timeout.
CUSTOM TEXTURE ICONS IN PACKAGED GAMES
Use a dedicated Texture2D icon, preferably 64 or 128 pixels square, at most 2,048 x 2,048. In that texture's editor, set Texture > Availability to CPU before cooking. Keep a hard asset reference from your Blueprint or another cooked asset so the texture is included in your game. Assign it to Custom Icon Texture and select Custom Texture.
Availability = CPU keeps image data for this native icon; Unreal uses a tiny placeholder for GPU display, so do not reuse the same texture for your normal UMG/material image. Duplicate an existing art texture if necessary. The plugin scales the native icon to 64 x 64 and handles alpha.
Editor source pixels and resident uncompressed BGRA8/RGBA8 mips are also supported, including suitable transient textures. An ordinary GPU-compressed or streamed texture that works from editor source data may lack readable pixels in a packaged game. Prefer Availability = CPU and verify a packaged build. Missing/unreadable/oversized icons return Failed with an explanation.
LIFETIME, LIMITS AND TROUBLESHOOTING
Up to 32 active or pending popup sessions are allowed in one process. Avoid creating a popup every frame. Multiple blocking popups keep the same owner blocked until the last one closes.
Popups close when their world is cleaned up, their owner is destroyed, or the plugin/application shuts down. Teardown releases the proxy without broadcasting gameplay result events into an ending world. Recreate prompts after travel or a new Play session if needed.
Popups require an interactive Windows game/editor process and a live world context. Commandlets, dedicated servers and shutdown reject requests. A blocking popup also requires a valid owner window. Use a client-side event for multiplayer UI; the plugin does not replicate it.
For no window, handle On Failed and inspect Get Last Error. For a missing packaged icon, check Availability, the cooked asset reference and the image size. For controls covered by unusually large text/display scaling, resize the window and scroll the message. This is desktop mouse/keyboard UI; it does not implement UMG styling, gamepad navigation or automatic localization of its built-in English labels. Exclusive fullscreen, remote sessions and custom viewport implementations should be tested in the target application.
C++
Add EasyNativeWindowPopup to your module dependencies and include NativeWindowPopupLibrary.h. Create the action with ShowNativeWindowPopup, bind the dynamic result delegates, then call Activate on the game thread. Keep a reflected reference if you need to query the completed action later; active actions retain themselves until completion or teardown. Never call UObject popup APIs from worker threads.
DEPENDENCIES AND SUPPORT
Descriptor: EasyNativeWindowPopup.uplugin. No additional Unreal plugins or third-party SDKs are required. The runtime module uses Unreal Engine/Core/Slate/ImageCore and Windows system libraries.
Support: https://discord.gg/9Zc4wbwqG9