File Exchange

image thumbnail

Figure Window Always on Top

version (3.83 KB) by John Anderson
Avoid obscuring figure windows by ensuring they always remain on top.

1 Download

Updated 14 Dec 2005

View License

Editor's Note: This file was a File Exchange Pick of the Week

My first attempt at a mex file making a simple call to the "SetWindowPos" function in the user32 library. This allows users to keep MATLAB figures on top, floating above all other windows even when focus is not on the target window.

Example ...

winontop('figure 1');

Tested on MATLAB Version (R14) Service Pack 2 running under Operating System: Microsoft Windows XP Version 5.1 (Build 2600: Service Pack 2)

Cite As

John Anderson (2021). Figure Window Always on Top (, MATLAB Central File Exchange. Retrieved .

Comments and Ratings (10)


I've just uploaded another submission to do the same job, but based on java calls. (See "Acknowledgements" section above.)

Eckhard Lehmann

Great way to make windows always visible! I wish this was built into core MATLAB and available on other platforms too.

I've created a small patch to the file that allows to use other window names than "Figure X", i.e. for GUIDE windows or named figures. The original Author might want to incorporate it into his version:

< char *windowName, n = 1;
> char *windowName, *ntSwitch, n = 1;
> mxArray *windowNameProp, *numberTitleProp; /* for getting the window name */
< windowName = mxCalloc(1, sizeof(figureHandle)+8);
< sprintf(windowName, "Figure %d", figureHandle);
< if( mexGet(figureHandle, "Visible") == NULL )
> if( mexGet(figureHandle, "Visible") == NULL ) {
> }
> windowNameProp = mexGet(figureHandle, "Name");
> windowName = mxArrayToString(windowNameProp);
> numberTitleProp = mexGet(figureHandle, "NumberTitle");
> ntSwitch = mxArrayToString(numberTitleProp);
> if (strcmp(ntSwitch, "on") == 0) {
> if (strlen(windowName) == 0) {
> windowName = mxCalloc(1, sizeof(figureHandle)+8);
> sprintf(windowName, "Figure %d", figureHandle);
> } else {
> char *wBuf = windowName;
> windowName = mxCalloc(1, sizeof(figureHandle)+10+strlen(windowName));
> sprintf(windowName, "Figure %d: %s", figureHandle, wBuf);
> }
> }


A better way is to use Actual Title Buttons in Windows!

works for all windows and is free... :)

Joseph Burgel

Tried the example given above in:
MATLAB Version (R2007b) windows XP and got:
winontop('figure 1');
??? Error using ==> winontop
First input argument must be a figure handle

Andrea Tagliasacchi

Would be nice to see a multiplatform version.
As a matter of fact, they should include a stay on top command as figure property directly.

Valentin Kuklin

Very useful, thanks a lot.

Russell Wyeth

Very useful. Could be even better if it could handle non-standard figure names. I was trying to use it with a custom gui with the figure name 'review', and it didn't work until I changed the name to 'Figure 1'

Ryan Ollos

Very nice. The only thing that seems a bit confusing is the arguement 'figure 1', and i'm not sure why it was not made to just be an integer. The following apparently works:
hf = figure;
winontop(['figure' hf]);

Bogdan Nuna

Very usefull

Robert Bemis

John, this is wonderful.
Thank you!

MATLAB Release Compatibility
Created with R14SP3
Compatible with any release
Platform Compatibility
Windows macOS Linux

Inspired: WinOnTop

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!