1. Jan Hoppe
  2. PowerBuilder
  3. Tuesday, 27 August 2019 06:21 AM UTC

I want to know if it is possible to get rid of the MDI-sheet titlebar and border? (using themes or some other way)

If not, are there plans for such a feature?

Jan Hoppe Accepted Answer Pending Moderation
  1. Wednesday, 28 August 2019 15:23 PM UTC
  2. PowerBuilder
  3. # 1

I tried Marcos suggestion about editing source and adding this line

boolean titlebar = false

And that gave the desired result, but now I am unsure if this will give me problems later, does anyone know if that will be the case?

 

Comment
There are no comments made yet.
Miguel Leeuwe Accepted Answer Pending Moderation
  1. Wednesday, 28 August 2019 12:28 PM UTC
  2. PowerBuilder
  3. # 2

Andrew Barnes is right, Windows API functions would be the way to go, but I don´t recommend taking away the border thickness, as that determines if a window is resizable or not. 

If you still want to play around with it, just take a look at  the pfc classes, pfc_n_cst_platformattrib from pfcapsrv.pbl. ( you can download them from https://github.com/OpenSourcePFCLibraries ) 

 

These are the instance variables with their meaning:

Public:

// GetCapsDevice
CONSTANT Integer LOGPIXELSX = 88
CONSTANT Integer LOGPIXELSY = 90

// GetSysColor
CONSTANT Integer COLOR_SCROLLBAR = 0 // Scroll bar gray area.
CONSTANT Integer COLOR_BACKGROUND = 1 // Desktop.
CONSTANT Integer COLOR_ACTIVECAPTION = 2 // Active window title bar. Specifies the left side color in the color gradient of an active window's title bar if the gradient effect is enabled.
CONSTANT Integer COLOR_INACTIVECAPTION = 3 // Inactive window caption. Specifies the left side color in the color gradient of an inactive window's title bar if the gradient effect is enabled.
CONSTANT Integer COLOR_MENU = 4 // Menu background.
CONSTANT Integer COLOR_WINDOW = 5 // Window background.
CONSTANT Integer COLOR_WINDOWFRAME = 6 // Window frame.
CONSTANT Integer COLOR_MENUTEXT = 7 // Text in menus.
CONSTANT Integer COLOR_WINDOWTEXT = 8 // Text in windows.
CONSTANT Integer COLOR_CAPTIONTEXT = 9 // Text in caption, size box, and scroll bar arrow box.
CONSTANT Integer COLOR_ACTIVEBORDER = 10 // Active window border.
CONSTANT Integer COLOR_INACTIVEBORDER = 11 // Inactive window border.
CONSTANT Integer COLOR_APPWORKSPACE = 12 // Background color of multiple document interface (MDI) applications.
CONSTANT Integer COLOR_HIGHLIGHT = 13 // Item(s) selected in a control.
CONSTANT Integer COLOR_HIGHLIGHTTEXT = 14 // Text of item(s) selected in a control.
CONSTANT Integer COLOR_BTNFACE = 15 // Face color for three-dimensional display elements and for dialog box backgrounds.
CONSTANT Integer COLOR_BTNSHADOW = 16 // Shadow color for three-dimensional display elements (for edges facing away from the light source).
CONSTANT Integer COLOR_GRAYTEXT = 17 // Grayed (disabled) text. This color is set to 0 if the current display driver does not support a solid gray color.
CONSTANT Integer COLOR_BTNTEXT = 18 // Text on push buttons.
CONSTANT Integer COLOR_INACTIVECAPTIONTEXT = 19 // Color of text in an inactive caption.
CONSTANT Integer COLOR_BTNHIGHLIGHT = 20 // Highlight color for three-dimensional display elements (for edges facing the light source.)
CONSTANT Integer COLOR_3DDKSHADOW = 21 // Dark shadow for three-dimensional display elements.
CONSTANT Integer COLOR_3DLIGHT = 22 // Light color for three-dimensional display elements (for edges facing the light source.)
CONSTANT Integer COLOR_INFOTEXT = 23 // Text color for tooltip controls.
CONSTANT Integer COLOR_INFOBK = 24 // Background color for tooltip controls.
CONSTANT Integer COLOR_HOTLIGHT = 26 // Color for a hyperlink or hot-tracked item.
CONSTANT Integer COLOR_GRADIENTACTIVECAPTION = 27 // Right side color in the color gradient of an active window's title bar. COLOR_ACTIVECAPTION specifies the left side color. Use SPI_GETGRADIENTCAPTIONS with the SystemParametersInfo function to determine whether the gradient effect is enabled.
CONSTANT Integer COLOR_GRADIENTINACTIVECAPTION = 28 // Right side color in the color gradient of an inactive window's title bar. COLOR_INACTIVECAPTION specifies the left side color.
CONSTANT Integer COLOR_MENUHILIGHT = 29 // The color used to highlight menu items when the menu appears as a flat menu (see SystemParametersInfo). The highlighted menu item is outlined with COLOR_HIGHLIGHT. Windows 2000: This value is not supported.
CONSTANT Integer COLOR_MENUBAR = 30 // The background color for the menu bar when menus appear as flat menus (see SystemParametersInfo). However, COLOR_MENU continues to specify the background color of the menu popup. Windows 2000: This value is not supported.

CONSTANT Integer COLOR_DESKTOP = COLOR_BACKGROUND
CONSTANT Integer COLOR_3DFACE = COLOR_BTNFACE
CONSTANT Integer COLOR_3DSHADOW = COLOR_BTNSHADOW
CONSTANT Integer COLOR_3DHIGHLIGHT = COLOR_BTNHIGHLIGHT
CONSTANT Integer COLOR_3DHILIGHT = COLOR_BTNHIGHLIGHT
CONSTANT Integer COLOR_BTNHILIGHT = COLOR_BTNHIGHLIGHT

CONSTANT Integer COLOR_ALTERNATEBTNFACE = 25 // Undocumented, constant's name unknown

CONSTANT Integer COLOR_MIN = 0
CONSTANT Integer COLOR_MAX = 28

// GetSystemMetrics
CONSTANT Integer SM_CLEANBOOT = 67 // The value that specifies how the system is started: 0 Normal boot, 1 Fail-safe boot, 2 Fail-safe with network boot. A fail-safe boot (also called SafeBoot, Safe Mode, or Clean Boot) bypasses the user startup files.
CONSTANT Integer SM_CMONITORS = 80 // The number of display monitors on a desktop. For more information, see the Remarks section in this topic.
CONSTANT Integer SM_CMOUSEBUTTONS = 43 // The number of buttons on a mouse, or zero if no mouse is installed.
CONSTANT Integer SM_CONVERTIBLESLATEMODE = 8195 // Reflects the state of the laptop or slate mode, 0 for Slate Mode and non-zero otherwise. When this system metric changes, the system sends a broadcast message via WM_SETTINGCHANGE with "ConvertibleSlateMode" in the LPARAM.
CONSTANT Integer SM_CXBORDER = 5 // The width of a window border, in pixels. This is equivalent to the SM_CXEDGE value for windows with the 3-D look.
CONSTANT Integer SM_CXCURSOR = 13 // The width of a cursor, in pixels. The system cannot create cursors of other sizes.
CONSTANT Integer SM_CXDLGFRAME = 7 // This value is the same as SM_CXFIXEDFRAME.
CONSTANT Integer SM_CXDOUBLECLK = 36 // The width of the rectangle around the location of a first click in a double-click sequence, in pixels. The second click must occur within the rectangle that is defined by SM_CXDOUBLECLK and SM_CYDOUBLECLK for the system to consider the two clicks a double-click. The two clicks must also occur within a specified time. To set the width of the double-click rectangle, call SystemParametersInfo with SPI_SETDOUBLECLKWIDTH.
CONSTANT Integer SM_CXDRAG = 68 // The number of pixels on either side of a mouse-down point that the mouse pointer can move before a drag operation begins. This allows the user to click and release the mouse button easily without unintentionally starting a drag operation. If this value is negative, it is subtracted from the left of the mouse-down point and added to the right of it.
CONSTANT Integer SM_CXEDGE = 45 // The width of a 3-D border, in pixels. This metric is the 3-D counterpart of SM_CXBORDER.
CONSTANT Integer SM_CXFIXEDFRAME = SM_CXDLGFRAME// The thickness of the frame around the perimeter of a window that has a caption but is not sizable, in pixels. SM_CXFIXEDFRAME is the height of the horizontal border, and SM_CYFIXEDFRAME is the width of the vertical border. This value is the same as SM_CXDLGFRAME.
CONSTANT Integer SM_CXFOCUSBORDER = 83 // The width of the left and right edges of the focus rectangle that the DrawFocusRect draws. This value is in pixels. Windows 2000: This value is not supported.
CONSTANT Integer SM_CXFRAME = 32 // This value is the same as SM_CXSIZEFRAME.
CONSTANT Integer SM_CXFULLSCREEN = 16 // The width of the client area for a full-screen window on the primary display monitor, in pixels. To get the coordinates of the portion of the screen that is not obscured by the system taskbar or by application desktop toolbars, call the SystemParametersInfo function with the SPI_GETWORKAREA value.
CONSTANT Integer SM_CXHSCROLL = 21 // The width of the arrow bitmap on a horizontal scroll bar, in pixels.
CONSTANT Integer SM_CXHTHUMB = 10 // The width of the thumb box in a horizontal scroll bar, in pixels.
CONSTANT Integer SM_CXICON = 11 // The default width of an icon, in pixels. The LoadIcon function can load only icons with the dimensions that SM_CXICON and SM_CYICON specifies.
CONSTANT Integer SM_CXICONSPACING = 38 // The width of a grid cell for items in large icon view, in pixels. Each item fits into a rectangle of size SM_CXICONSPACING by SM_CYICONSPACING when arranged. This value is always greater than or equal to SM_CXICON.
CONSTANT Integer SM_CXMAXIMIZED = 61 // The default width, in pixels, of a maximized top-level window on the primary display monitor.
CONSTANT Integer SM_CXMAXTRACK = 59 // The default maximum width of a window that has a caption and sizing borders, in pixels. This metric refers to the entire desktop. The user cannot drag the window frame to a size larger than these dimensions. A window can override this value by processing the WM_GETMINMAXINFO message.
CONSTANT Integer SM_CXMENUCHECK = 71 // The width of the default menu check-mark bitmap, in pixels.
CONSTANT Integer SM_CXMENUSIZE = 54 // The width of menu bar buttons, such as the child window close button that is used in the multiple document interface, in pixels.
CONSTANT Integer SM_CXMIN = 28 // The minimum width of a window, in pixels.
CONSTANT Integer SM_CXMINIMIZED = 57 // The width of a minimized window, in pixels.
CONSTANT Integer SM_CXMINSPACING = 47 // The width of a grid cell for a minimized window, in pixels. Each minimized window fits into a rectangle this size when arranged. This value is always greater than or equal to SM_CXMINIMIZED.
CONSTANT Integer SM_CXMINTRACK = 34 // The minimum tracking width of a window, in pixels. The user cannot drag the window frame to a size smaller than these dimensions. A window can override this value by processing the WM_GETMINMAXINFO message.
CONSTANT Integer SM_CXPADDEDBORDER = 92 // The amount of border padding for captioned windows, in pixels. Windows XP/2000: This value is not supported.
CONSTANT Integer SM_CXSCREEN = 0 // The width of the screen of the primary display monitor, in pixels. This is the same value obtained by calling GetDeviceCaps as follows: GetDeviceCaps(hdcPrimaryMonitor, HORZRES).
CONSTANT Integer SM_CXSIZE = 30 // The width of a button in a window caption or title bar, in pixels.
CONSTANT Integer SM_CXSIZEFRAME = SM_CXFRAME // The thickness of the sizing border around the perimeter of a window that can be resized, in pixels. SM_CXSIZEFRAME is the width of the horizontal border, and SM_CYSIZEFRAME is the height of the vertical border. This value is the same as SM_CXFRAME.
CONSTANT Integer SM_CXSMICON = 49 // The recommended width of a small icon, in pixels. Small icons typically appear in window captions and in small icon view.
CONSTANT Integer SM_CXSMSIZE = 52 // The width of small caption buttons, in pixels.
CONSTANT Integer SM_CXVIRTUALSCREEN = 78 // The width of the virtual screen, in pixels. The virtual screen is the bounding rectangle of all display monitors. The SM_XVIRTUALSCREEN metric is the coordinates for the left side of the virtual screen.
CONSTANT Integer SM_CXVSCROLL = 2 // The width of a vertical scroll bar, in pixels.
CONSTANT Integer SM_CYBORDER = 6 // The height of a window border, in pixels. This is equivalent to the SM_CYEDGE value for windows with the 3-D look.
CONSTANT Integer SM_CYCAPTION = 4 // The height of a caption area, in pixels.
CONSTANT Integer SM_CYCURSOR = 14 // The height of a cursor, in pixels. The system cannot create cursors of other sizes.
CONSTANT Integer SM_CYDLGFRAME = 8 // This value is the same as SM_CYFIXEDFRAME.
CONSTANT Integer SM_CYDOUBLECLK = 37 // The height of the rectangle around the location of a first click in a double-click sequence, in pixels. The second click must occur within the rectangle defined by SM_CXDOUBLECLK and SM_CYDOUBLECLK for the system to consider the two clicks a double-click. The two clicks must also occur within a specified time. To set the height of the double-click rectangle, call SystemParametersInfo with SPI_SETDOUBLECLKHEIGHT.
CONSTANT Integer SM_CYDRAG = 69 // The number of pixels above and below a mouse-down point that the mouse pointer can move before a drag operation begins. This allows the user to click and release the mouse button easily without unintentionally starting a drag operation. If this value is negative, it is subtracted from above the mouse-down point and added below it.
CONSTANT Integer SM_CYEDGE = 46 // The height of a 3-D border, in pixels. This is the 3-D counterpart of SM_CYBORDER.
CONSTANT Integer SM_CYFIXEDFRAME = SM_CYDLGFRAME// The thickness of the frame around the perimeter of a window that has a caption but is not sizable, in pixels. SM_CXFIXEDFRAME is the height of the horizontal border, and SM_CYFIXEDFRAME is the width of the vertical border. This value is the same as SM_CYDLGFRAME.
CONSTANT Integer SM_CYFOCUSBORDER = 84 // The height of the top and bottom edges of the focus rectangle drawn by DrawFocusRect. This value is in pixels. Windows 2000: This value is not supported.
CONSTANT Integer SM_CYFRAME = 33 // This value is the same as SM_CYSIZEFRAME.
CONSTANT Integer SM_CYFULLSCREEN = 17 // The height of the client area for a full-screen window on the primary display monitor, in pixels. To get the coordinates of the portion of the screen not obscured by the system taskbar or by application desktop toolbars, call the SystemParametersInfo function with the SPI_GETWORKAREA value.
CONSTANT Integer SM_CYHSCROLL = 3 // The height of a horizontal scroll bar, in pixels.
CONSTANT Integer SM_CYICON = 12 // The default height of an icon, in pixels. The LoadIcon function can load only icons with the dimensions SM_CXICON and SM_CYICON.
CONSTANT Integer SM_CYICONSPACING = 39 // The height of a grid cell for items in large icon view, in pixels. Each item fits into a rectangle of size SM_CXICONSPACING by SM_CYICONSPACING when arranged. This value is always greater than or equal to SM_CYICON.
CONSTANT Integer SM_CYKANJIWINDOW = 18 // For double byte character set versions of the system, this is the height of the Kanji window at the bottom of the screen, in pixels.
CONSTANT Integer SM_CYMAXIMIZED = 62 // The default height, in pixels, of a maximized top-level window on the primary display monitor.
CONSTANT Integer SM_CYMAXTRACK = 60 // The default maximum height of a window that has a caption and sizing borders, in pixels. This metric refers to the entire desktop. The user cannot drag the window frame to a size larger than these dimensions. A window can override this value by processing the WM_GETMINMAXINFO message.
CONSTANT Integer SM_CYMENU = 15 // The height of a single-line menu bar, in pixels.
CONSTANT Integer SM_CYMENUCHECK = 72 // The height of the default menu check-mark bitmap, in pixels.
CONSTANT Integer SM_CYMENUSIZE = 55 // The height of menu bar buttons, such as the child window close button that is used in the multiple document interface, in pixels.
CONSTANT Integer SM_CYMIN = 29 // The minimum height of a window, in pixels.
CONSTANT Integer SM_CYMINIMIZED = 58 // The height of a minimized window, in pixels.
CONSTANT Integer SM_CYMINSPACING = 48 // The height of a grid cell for a minimized window, in pixels. Each minimized window fits into a rectangle this size when arranged. This value is always greater than or equal to SM_CYMINIMIZED.
CONSTANT Integer SM_CYMINTRACK = 35 // The minimum tracking height of a window, in pixels. The user cannot drag the window frame to a size smaller than these dimensions. A window can override this value by processing the WM_GETMINMAXINFO message.
CONSTANT Integer SM_CYSCREEN = 1 // The height of the screen of the primary display monitor, in pixels. This is the same value obtained by calling GetDeviceCaps as follows: GetDeviceCaps( hdcPrimaryMonitor, VERTRES).
CONSTANT Integer SM_CYSIZE = 31 // The height of a button in a window caption or title bar, in pixels.
CONSTANT Integer SM_CYSIZEFRAME = SM_CYFRAME // The thickness of the sizing border around the perimeter of a window that can be resized, in pixels. SM_CXSIZEFRAME is the width of the horizontal border, and SM_CYSIZEFRAME is the height of the vertical border. This value is the same as SM_CYFRAME.
CONSTANT Integer SM_CYSMCAPTION = 51 // The height of a small caption, in pixels.
CONSTANT Integer SM_CYSMICON = 50 // The recommended height of a small icon, in pixels. Small icons typically appear in window captions and in small icon view.
CONSTANT Integer SM_CYSMSIZE = 53 // The height of small caption buttons, in pixels.
CONSTANT Integer SM_CYVIRTUALSCREEN = 79 // The height of the virtual screen, in pixels. The virtual screen is the bounding rectangle of all display monitors. The SM_YVIRTUALSCREEN metric is the coordinates for the top of the virtual screen.
CONSTANT Integer SM_CYVSCROLL = 20 // The height of the arrow bitmap on a vertical scroll bar, in pixels.
CONSTANT Integer SM_CYVTHUMB = 9 // The height of the thumb box in a vertical scroll bar, in pixels.
CONSTANT Integer SM_DBCSENABLED = 42 // Nonzero if User32.dll supports DBCS; otherwise, 0.
CONSTANT Integer SM_DEBUG = 22 // Nonzero if the debug version of User.exe is installed; otherwise, 0.
CONSTANT Integer SM_DIGITIZER = 94 // Nonzero if the current operating system is Windows 7 or Windows Server 2008 R2 and the Tablet PC Input service is started; otherwise, 0. The return value is a bitmask that specifies the type of digitizer input supported by the device. For more information, see Remarks. Windows Server 2008, Windows Vista, and Windows XP/2000: This value is not supported.
CONSTANT Integer SM_IMMENABLED = 82 // Nonzero if Input Method Manager/Input Method Editor features are enabled; otherwise, 0. SM_IMMENABLED indicates whether the system is ready to use a Unicode-based IME on a Unicode application. To ensure that a language-dependent IME works, check SM_DBCSENABLED and the system ANSI code page. Otherwise the ANSI-to-Unicode conversion may not be performed correctly, or some components like fonts or registry settings may not be present.
CONSTANT Integer SM_MAXIMUMTOUCHES = 95 // Nonzero if there are digitizers in the system; otherwise, 0. SM_MAXIMUMTOUCHES returns the aggregate maximum of the maximum number of contacts supported by every digitizer in the system. If the system has only single-touch digitizers, the return value is 1. If the system has multi-touch digitizers, the return value is the number of simultaneous contacts the hardware can provide. Windows Server 2008, Windows Vista, and Windows XP/2000: This value is not supported.
CONSTANT Integer SM_MEDIACENTER = 87 // Nonzero if the current operating system is the Windows XP, Media Center Edition, 0 if not.
CONSTANT Integer SM_MENUDROPALIGNMENT = 40 // Nonzero if drop-down menus are right-aligned with the corresponding menu-bar item; 0 if the menus are left-aligned.
CONSTANT Integer SM_MIDEASTENABLED = 74 // Nonzero if the system is enabled for Hebrew and Arabic languages, 0 if not.
CONSTANT Integer SM_MOUSEPRESENT = 19 // Nonzero if a mouse is installed; otherwise, 0. This value is rarely zero, because of support for virtual mice and because some systems detect the presence of the port instead of the presence of a mouse.
CONSTANT Integer SM_MOUSEHORIZONTALWHEELPRESENT &
= 91 // Nonzero if a mouse with a horizontal scroll wheel is installed; otherwise 0.
CONSTANT Integer SM_MOUSEWHEELPRESENT = 75 // Nonzero if a mouse with a vertical scroll wheel is installed; otherwise 0.
CONSTANT Integer SM_NETWORK = 63 // The least significant bit is set if a network is present; otherwise, it is cleared. The other bits are reserved for future use.
CONSTANT Integer SM_PENWINDOWS = 41 // Nonzero if the Microsoft Windows for Pen computing extensions are installed; zero otherwise.
CONSTANT Integer SM_REMOTECONTROL = 8193 // This system metric is used in a Terminal Services environment to determine if the current Terminal Server session is being remotely controlled. Its value is nonzero if the current session is remotely controlled; otherwise, 0. You can use terminal services management tools such as Terminal Services Manager (tsadmin.msc) and shadow.exe to control a remote session. When a session is being remotely controlled, another user can view the contents of that session and potentially interact with it.
CONSTANT Integer SM_REMOTESESSION = 4096 // This system metric is used in a Terminal Services environment. If the calling process is associated with a Terminal Services client session, the return value is nonzero. If the calling process is associated with the Terminal Services console session, the return value is 0. Windows Server 2003 and Windows XP: The console session is not necessarily the physical console. For more information, see WTSGetActiveConsoleSessionId.
CONSTANT Integer SM_SAMEDISPLAYFORMAT = 81 // Nonzero if all the display monitors have the same color format, otherwise, 0. Two displays can have the same bit depth, but different color formats. For example, the red, green, and blue pixels can be encoded with different numbers of bits, or those bits can be located in different places in a pixel color value.
CONSTANT Integer SM_SECURE = 44 // This system metric should be ignored; it always returns 0.
CONSTANT Integer SM_SERVERR2 = 89 // The build number if the system is Windows Server 2003 R2; otherwise, 0.
CONSTANT Integer SM_SHOWSOUNDS = 70 // Nonzero if the user requires an application to present information visually in situations where it would otherwise present the information only in audible form; otherwise, 0.
CONSTANT Integer SM_SHUTTINGDOWN = 8192 // Nonzero if the current session is shutting down; otherwise, 0. Windows 2000: This value is not supported.
CONSTANT Integer SM_SLOWMACHINE = 73 // Nonzero if the computer has a low-end (slow) processor; otherwise, 0.
CONSTANT Integer SM_STARTER = 88 // Nonzero if the current operating system is Windows 7 Starter Edition, Windows Vista Starter, or Windows XP Starter Edition; otherwise, 0.
CONSTANT Integer SM_SWAPBUTTON = 23 // Nonzero if the meanings of the left and right mouse buttons are swapped; otherwise, 0.
CONSTANT Integer SM_SYSTEMDOCKED = 8196 // Reflects the state of the docking mode, 0 for Undocked Mode and non-zero otherwise. When this system metric changes, the system sends a broadcast message via WM_SETTINGCHANGE with "SystemDockMode" in the LPARAM.
CONSTANT Integer SM_TABLETPC = 86 // Nonzero if the current operating system is the Windows XP Tablet PC edition or if the current operating system is Windows Vista or Windows 7 and the Tablet PC Input service is started; otherwise, 0. The SM_DIGITIZER setting indicates the type of digitizer input supported by a device running Windows 7 or Windows Server 2008 R2. For more information, see Remarks.
CONSTANT Integer SM_XVIRTUALSCREEN = 76 // The coordinates for the left side of the virtual screen. The virtual screen is the bounding rectangle of all display monitors. The SM_CXVIRTUALSCREEN metric is the width of the virtual screen.
CONSTANT Integer SM_YVIRTUALSCREEN = 77 // The coordinates for the top of the virtual screen. The virtual screen is the bounding rectangle of all display monitors. The SM_CYVIRTUALSCREEN metric is the height of the virtual screen.

// Get/SetWindowLong
CONSTANT Integer GWL_EXSTYLE = (-20) // Sets a new extended window style.
CONSTANT Integer GWL_HINSTANCE = (-6) // Sets a new application instance handle.
CONSTANT Integer GWL_HWNDPARENT = (-8) // Retrieves a handle to the parent window, if any.
CONSTANT Integer GWL_ID = (-12) // Sets a new identifier of the child window. The window cannot be a top-level window.
CONSTANT Integer GWL_STYLE = (-16) // Sets a new window style.
CONSTANT Integer GWL_USERDATA = (-21) // Sets the user data associated with the window. This data is intended for use by the application that created the window. Its value is initially zero.
CONSTANT Integer GWL_WNDPROC = (-4) // Sets a new address for the window procedure. You cannot change this attribute if the window does not belong to the same process as the calling thread.

// Extended Window Styles
CONSTANT UnsignedLong WS_EX_ACCEPTFILES = 16 // The window accepts drag-drop files.
CONSTANT UnsignedLong WS_EX_APPWINDOW = 262144 // Forces a top-level window onto the taskbar when the window is visible.
CONSTANT UnsignedLong WS_EX_CLIENTEDGE = 512 // The window has a border with a sunken edge.
CONSTANT UnsignedLong WS_EX_COMPOSITED = 33554432 // Paints all descendants of a window in bottom-to-top painting order using double-buffering. For more information, see Remarks. This cannot be used if the window has a class style of either CS_OWNDC or CS_CLASSDC. Windows 2000: This style is not supported.
CONSTANT UnsignedLong WS_EX_CONTEXTHELP = 1024 // The title bar of the window includes a question mark. When the user clicks the question mark, the cursor changes to a question mark with a pointer. If the user then clicks a child window, the child receives a WM_HELP message. The child window should pass the message to the parent window procedure, which should call the WinHelp function using the HELP_WM_HELP command. The Help application displays a pop-up window that typically contains help for the child window. WS_EX_CONTEXTHELP cannot be used with the WS_MAXIMIZEBOX or WS_MINIMIZEBOX styles.
CONSTANT UnsignedLong WS_EX_CONTROLPARENT = 65536 // The window itself contains child windows that should take part in dialog box navigation. If this style is specified, the dialog manager recurses into children of this window when performing navigation operations such as handling the TAB key, an arrow key, or a keyboard mnemonic.
CONSTANT UnsignedLong WS_EX_DLGMODALFRAME = 1 // The window has a double border; the window can, optionally, be created with a title bar by specifying the WS_CAPTION style in the dwStyle parameter.
CONSTANT UnsignedLong WS_EX_LAYERED = 524288 // The window is a layered window. This style cannot be used if the window has a class style of either CS_OWNDC or CS_CLASSDC. Windows 8: The WS_EX_LAYERED style is supported for top-level windows and child windows. Previous Windows versions support WS_EX_LAYERED only for top-level windows.
CONSTANT UnsignedLong WS_EX_LAYOUTRTL = 4194304 // If the shell language is Hebrew, Arabic, or another language that supports reading order alignment, the horizontal origin of the window is on the right edge. Increasing horizontal values advance to the left.
CONSTANT UnsignedLong WS_EX_LEFT = 0 // The window has generic left-aligned properties. This is the default.
CONSTANT UnsignedLong WS_EX_LEFTSCROLLBAR = 16384 // If the shell language is Hebrew, Arabic, or another language that supports reading order alignment, the vertical scroll bar (if present) is to the left of the client area. For other languages, the style is ignored.
CONSTANT UnsignedLong WS_EX_LTRREADING = 0 // The window text is displayed using left-to-right reading-order properties. This is the default.
CONSTANT UnsignedLong WS_EX_MDICHILD = 64 // The window is a MDI child window.
CONSTANT UnsignedLong WS_EX_NOACTIVATE = 134217728 // A top-level window created with this style does not become the foreground window when the user clicks it. The system does not bring this window to the foreground when the user minimizes or closes the foreground window. To activate the window, use the SetActiveWindow or SetForegroundWindow function. The window does not appear on the taskbar by default. To force the window to appear on the taskbar, use the WS_EX_APPWINDOW style.
CONSTANT UnsignedLong WS_EX_NOINHERITLAYOUT = 1048576 // The window does not pass its window layout to its child windows.
CONSTANT UnsignedLong WS_EX_NOPARENTNOTIFY = 4 // The child window created with this style does not send the WM_PARENTNOTIFY message to its parent window when it is created or destroyed.
CONSTANT UnsignedLong WS_EX_RIGHT = 4096 // The window has generic "right-aligned" properties. This depends on the window class. This style has an effect only if the shell language is Hebrew, Arabic, or another language that supports reading-order alignment; otherwise, the style is ignored. Using the WS_EX_RIGHT style for static or edit controls has the same effect as using the SS_RIGHT or ES_RIGHT style, respectively. Using this style with button controls has the same effect as using BS_RIGHT and BS_RIGHTBUTTON styles.
CONSTANT UnsignedLong WS_EX_RIGHTSCROLLBAR = 0 // The vertical scroll bar (if present) is to the right of the client area. This is the default.
CONSTANT UnsignedLong WS_EX_RTLREADING = 8192 // If the shell language is Hebrew, Arabic, or another language that supports reading-order alignment, the window text is displayed using right-to-left reading-order properties. For other languages, the style is ignored.
CONSTANT UnsignedLong WS_EX_STATICEDGE = 131072 // The window has a three-dimensional border style intended to be used for items that do not accept user input.
CONSTANT UnsignedLong WS_EX_TOOLWINDOW = 128 // The window is intended to be used as a floating toolbar. A tool window has a title bar that is shorter than a normal title bar, and the window title is drawn using a smaller font. A tool window does not appear in the taskbar or in the dialog that appears when the user presses ALT+TAB. If a tool window has a system menu, its icon is not displayed on the title bar. However, you can display the system menu by right-clicking or by typing ALT+SPACE.
CONSTANT UnsignedLong WS_EX_TOPMOST = 8 // The window should be placed above all non-topmost windows and should stay above them, even when the window is deactivated. To add or remove this style, use the SetWindowPos function.
CONSTANT UnsignedLong WS_EX_TRANSPARENT = 32 // The window should not be painted until siblings beneath the window (that were created by the same thread) have been painted. The window appears transparent because the bits of underlying sibling windows have already been painted. To achieve transparency without these restrictions, use the SetWindowRgn function.
CONSTANT UnsignedLong WS_EX_WINDOWEDGE = 256 // The window has a border with a raised edge.
CONSTANT UnsignedLong WS_EX_OVERLAPPEDWINDOW = WS_EX_WINDOWEDGE + WS_EX_CLIENTEDGE
// The window is an overlapped window.
CONSTANT UnsignedLong WS_EX_PALETTEWINDOW = WS_EX_WINDOWEDGE + WS_EX_TOOLWINDOW + WS_EX_TOPMOST
// The window is palette window, which is a modeless dialog box that presents an array of commands.
// Window Styles
CONSTANT UnsignedLong WS_BORDER = 8388608
CONSTANT UnsignedLong WS_CAPTION = 12582912
CONSTANT UnsignedLong WS_CHILD = 1073741824
CONSTANT UnsignedLong WS_CHILDWINDOW = WS_CHILD
CONSTANT UnsignedLong WS_CLIPCHILDREN = 33554432
CONSTANT UnsignedLong WS_CLIPSIBLINGS = 67108864
CONSTANT UnsignedLong WS_DISABLED = 134217728
CONSTANT UnsignedLong WS_DLGFRAME = 4194304
CONSTANT UnsignedLong WS_GROUP = 131072
CONSTANT UnsignedLong WS_HSCROLL = 1048576
CONSTANT UnsignedLong WS_MAXIMIZE = 16777216
CONSTANT UnsignedLong WS_MAXIMIZEBOX = 65536
CONSTANT UnsignedLong WS_MINIMIZE = 536870912
CONSTANT UnsignedLong WS_MINIMIZEBOX = 131072
CONSTANT UnsignedLong WS_OVERLAPPED = 0
CONSTANT UnsignedLong WS_ICONIC = WS_MINIMIZE
CONSTANT UnsignedLong WS_POPUP = 2147483648
CONSTANT UnsignedLong WS_VISIBLE = 268435456
CONSTANT UnsignedLong WS_VSCROLL = 2097152
CONSTANT UnsignedLong WS_SYSMENU = 524288
CONSTANT UnsignedLong WS_TABSTOP = 65536
CONSTANT UnsignedLong WS_THICKFRAME = 262144
CONSTANT UnsignedLong WS_TILED = WS_OVERLAPPED
CONSTANT UnsignedLong WS_OVERLAPPEDWINDOW = WS_OVERLAPPED + WS_CAPTION + WS_SYSMENU + WS_THICKFRAME + WS_MINIMIZEBOX + WS_MAXIMIZEBOX
CONSTANT UnsignedLong WS_POPUPWINDOW = WS_POPUP + WS_BORDER + WS_SYSMENU
CONSTANT UnsignedLong WS_TILEDWINDOW = WS_OVERLAPPEDWINDOW
CONSTANT UnsignedLong WS_SIZEBOX = WS_THICKFRAME

// Menu Position
CONSTANT Integer MF_BYCOMMAND = 0 // Indicates that the uPosition parameter gives the identifier of the menu item. The MF_BYCOMMAND flag is the default if neither the MF_BYCOMMAND nor MF_BYPOSITION flag is specified.
CONSTANT Integer MF_BYPOSITION = 1024 // Indicates that the uPosition parameter gives the zero-based relative position of the new menu item. If uPosition is -1, the new menu item is appended to the end of the menu.

// Menu Flags
CONSTANT Integer MF_BITMAP = 4 // Uses a bitmap as the menu item. The lpNewItem parameter contains a handle to the bitmap.
CONSTANT Integer MF_CHECKED = 8 // Places a check mark next to the menu item. If the application provides check-mark bitmaps (see SetMenuItemBitmaps), this flag displays the check-mark bitmap next to the menu item.
CONSTANT Integer MF_DISABLED = 2 // Disables the menu item so that it cannot be selected, but does not gray it.
CONSTANT Integer MF_ENABLED = 0 // Enables the menu item so that it can be selected and restores it from its grayed state.
CONSTANT Integer MF_GRAYED = 1 // Disables the menu item and grays it so it cannot be selected.
CONSTANT Integer MF_MENUBARBREAK = 32 // Functions the same as the MF_MENUBREAK flag for a menu bar. For a drop-down menu, submenu, or shortcut menu, the new column is separated from the old column by a vertical line.
CONSTANT Integer MF_MENUBREAK = 64 // Places the item on a new line (for menu bars) or in a new column (for a drop-down menu, submenu, or shortcut menu) without separating columns.
CONSTANT Integer MF_OWNERDRAW = 256 // Specifies that the item is an owner-drawn item. Before the menu is displayed for the first time, the window that owns the menu receives a WM_MEASUREITEM message to retrieve the width and height of the menu item. The WM_DRAWITEM message is then sent to the window procedure of the owner window whenever the appearance of the menu item must be updated.
CONSTANT Integer MF_POPUP = 16 // Specifies that the menu item opens a drop-down menu or submenu. The uIDNewItem parameter specifies a handle to the drop-down menu or submenu. This flag is used to add a menu name to a menu bar or a menu item that opens a submenu to a drop-down menu, submenu, or shortcut menu.
CONSTANT Integer MF_SEPARATOR = 2048 // Draws a horizontal dividing line. This flag is used only in a drop-down menu, submenu, or shortcut menu. The line cannot be grayed, disabled, or highlighted. The lpNewItem and uIDNewItem parameters are ignored.
CONSTANT Integer MF_STRING = 0 // Specifies that the menu item is a text string; the lpNewItem parameter is a pointer to the string.
CONSTANT Integer MF_SYSMENU = 8192 // A system menu.
CONSTANT Integer MF_UNCHECKED = 0 // Does not place a check mark next to the menu item (default). If the application supplies check-mark bitmaps (see the SetMenuItemBitmaps function), this flag displays the clear bitmap next to the menu item.

// SetWindowPos Flags
CONSTANT unsignedInt SWP_ASYNCWINDOWPOS = 16384 // If the calling thread and the thread that owns the window are attached to different input queues, the system posts the request to the thread that owns the window. This prevents the calling thread from blocking its execution while other threads process the request.
CONSTANT unsignedInt SWP_DEFERERASE = 8192 // Prevents generation of the WM_SYNCPAINT message.
CONSTANT unsignedInt SWP_DRAWFRAME = 32 // Draws a frame (defined in the window's class description) around the window.
CONSTANT unsignedInt SWP_FRAMECHANGED = 32 // Applies new frame styles set using the SetWindowLong function. Sends a WM_NCCALCSIZE message to the window, even if the window's size is not being changed. If this flag is not specified, WM_NCCALCSIZE is sent only when the window's size is being changed.
CONSTANT unsignedInt SWP_HIDEWINDOW = 128 // Hides the window.
CONSTANT unsignedInt SWP_NOACTIVATE = 16 // Does not activate the window. If this flag is not set, the window is activated and moved to the top of either the topmost or non-topmost group (depending on the setting of the hWndInsertAfter parameter).
CONSTANT unsignedInt SWP_NOCOPYBITS = 256 // Discards the entire contents of the client area. If this flag is not specified, the valid contents of the client area are saved and copied back into the client area after the window is sized or repositioned.
CONSTANT unsignedInt SWP_NOMOVE = 2 // Retains the current position (ignores X and Y parameters).
CONSTANT unsignedInt SWP_NOOWNERZORDER = 512 // Does not change the owner window's position in the Z order.
CONSTANT unsignedInt SWP_NOREDRAW = 8 // Does not redraw changes. If this flag is set, no repainting of any kind occurs. This applies to the client area, the nonclient area (including the title bar and scroll bars), and any part of the parent window uncovered as a result of the window being moved. When this flag is set, the application must explicitly invalidate or redraw any parts of the window and parent window that need redrawing.
CONSTANT unsignedInt SWP_NOREPOSITION = 512 // Same as the SWP_NOOWNERZORDER flag.
CONSTANT unsignedInt SWP_NOSENDCHANGING = 1024 // Prevents the window from receiving the WM_WINDOWPOSCHANGING message.
CONSTANT unsignedInt SWP_NOSIZE = 1 // Retains the current size (ignores the cx and cy parameters).
CONSTANT unsignedInt SWP_NOZORDER = 4 // Retains the current Z order (ignores the hWndInsertAfter parameter).
CONSTANT unsignedInt SWP_SHOWWINDOW = 64 // Displays the window.

// WM_SYSCOMMAND
CONSTANT unsignedLong SC_CLOSE = 61536 // Closes the window.
CONSTANT unsignedLong SC_CONTEXTHELP = 61824 // Changes the cursor to a question mark with a pointer. If the user then clicks a control in the dialog box, the control receives a WM_HELP message.
CONSTANT unsignedLong SC_DEFAULT = 61792 // Selects the default item; the user double-clicked the window menu.
CONSTANT unsignedLong SC_HOTKEY = 61776 // Activates the window associated with the application-specified hot key. The lParam parameter identifies the window to activate.
CONSTANT unsignedLong SC_HSCROLL = 61568 // Scrolls horizontally.
CONSTANT unsignedLong SCF_ISSECURE = 1 // Indicates whether the screen saver is secure.
CONSTANT unsignedLong SC_KEYMENU = 61696 // Retrieves the window menu as a result of a keystroke. For more information, see the Remarks section.
CONSTANT unsignedLong SC_MAXIMIZE = 61488 // Maximizes the window.
CONSTANT unsignedLong SC_MINIMIZE = 61472 // Minimizes the window.
CONSTANT unsignedLong SC_MONITORPOWER = 61808 // Sets the state of the display. This command supports devices that have power-saving features, such as a battery-powered personal computer.
// The lParam parameter can have the following values:
// -1 (the display is powering on)
// 1 (the display is going to low power)
// 2 (the display is being shut off)
CONSTANT unsignedLong SC_MOUSEMENU = 61584 // Retrieves the window menu as a result of a mouse click.
CONSTANT unsignedLong SC_MOVE = 61456 // Moves the window.
CONSTANT unsignedLong SC_NEXTWINDOW = 61504 // Moves to the next window.
CONSTANT unsignedLong SC_PREVWINDOW = 61520 // Moves to the previous window.
CONSTANT unsignedLong SC_RESTORE = 61728 // Restores the window to its normal position and size.
CONSTANT unsignedLong SC_SCREENSAVE = 61760 // Executes the screen saver application specified in the [boot] section of the System.ini file.
CONSTANT unsignedLong SC_SIZE = 61440 // Sizes the window.
CONSTANT unsignedLong SC_TASKLIST = 61744 // Activates the Start menu.
CONSTANT unsignedLong SC_VSCROLL = 61552 // Scrolls vertically.

Comment
There are no comments made yet.
Marco Meoni Accepted Answer Pending Moderation
  1. Wednesday, 28 August 2019 06:31 AM UTC
  2. PowerBuilder
  3. # 3

Hi Chris,

I mentioned that white color and removal of some properties is a trick, but that also works fairly ok for MDI, see image.

And, not really true 

> the MDI_Frame will still force a Sheet to have the Title Bar. This will also be true in IWA and PS Web Apps as well

because you can open the window in edit source and remove manually

boolean titlebar = true

which instead the GUI would prevent.
Only the menu cannot be removed, as well as its lower border. 
All in all, this trick is best suitable for SDI applications.

Best,

.m

Comment
  1. Chris Pollach @Appeon
  2. Wednesday, 28 August 2019 13:10 PM UTC
Yes, you can directly edit the source code for that Window class and set the TitleBar property to false. However, as soon as you edit the same window in the Window Painter & save, the titlebar will be reset to TRUE. So this could be a long term maintenance issue for other developers.

  1. Helpful
There are no comments made yet.
Andrew Barnes Accepted Answer Pending Moderation
  1. Tuesday, 27 August 2019 23:10 PM UTC
  2. PowerBuilder
  3. # 4

If you are handy with Windows API, you could probably do that.  I have never tried to futz around with an MDI sheet window, but I did tweak a main window as part of a kiosk type application so that it covered the entire desktop with no frame, no border, no menu. 

The main window style is adjusted with GetWindowLong()/SetWindowLong() functions using GWL_STYLE and then setting the window styles as appropriate. 

Comment
  1. Chris Pollach @Appeon
  2. Wednesday, 28 August 2019 12:51 PM UTC
Hi Andrew;

FYI: The SetWindowLong command cannot change the Window's "Style" (aka no title bar) after its instantiated.

Regards ... Chris
  1. Helpful
  1. Andrew Barnes
  2. Wednesday, 28 August 2019 15:32 PM UTC
Beg to differ with you Chris.



I was not speaking from speculative theory but actual PowerBuilder programming experience. The program in question was an In/Out Board intended to be displayed on monitors from within our lobbies. As such, we wanted to show just content, and not have a frame, title bar or menu. I also wanted to able to toggle back to normal appearance for accessing various administrative and configuration functions.



I used GetWindowLong(Handle(THIS), GWL_STYLE) to obtain the default style and GetMenu(Handle(THIS)) to obtain the default menu handle, both of which were needed when toggling back to normal mode.



I used

SetWindowLong(Handle(THIS), GWL_STYLE, WS_VISIBLE|WS_MAXIMIZE|WS_CLIPCHILDREN|WS_CLIPSIBLINGS)

THIS.Move(0,0) // make sure this fills the screen

THIS.ClientEdge = FALSE

SetNull(ll_null_handle)

SetMenu(Handle(THIS), ll_null_handle)

to make the frame, titlebar, and menu go away. To make things go back to normal, use the same code reversed with the stored style and menu handle. Note my snippet above does not show the object and its code for performing the bitwise OR'ing of the Window styles nor does it show the Windows API object that declares the external functions and Windows constants.



At any rate, the code worked flawlessly to change the window style and make the menu go away and restore it to normal appearance when desired. As I mentioned in my original post, this project was a main window as opposed to an MDI sheet. However, I did a quick experiment on an MDI sheet and got some effects.



Best wishes,

Andy











  1. Helpful
There are no comments made yet.
Marco Meoni Accepted Answer Pending Moderation
  1. Tuesday, 27 August 2019 17:02 PM UTC
  2. PowerBuilder
  3. # 5

Hi Jan,

in addition to Chris' YES part:

 

You cannot have an MDI without a menu object. But you can trick the MDI (and any other window type) to look borderless by setting the backcolor to white and removing control menu, minbox and maxbox properties.

See attached image.

 

Best,

 

Comment
  1. Chris Pollach @Appeon
  2. Tuesday, 27 August 2019 19:23 PM UTC
Hi Marco;

The MDI_Frame will still force a Sheet to have the Title Bar. This will also be true in IWA and PS Web Apps as well.

Regards ... Chris
  1. Helpful
There are no comments made yet.
Chris Pollach @Appeon Accepted Answer Pending Moderation
  1. Tuesday, 27 August 2019 16:53 PM UTC
  2. PowerBuilder
  3. # 6

Hi Jan;

   Yes & No  ....

NO:

  1. The Window TitleBar is controlled by the MDI Frame upon the execution of the OpenSheet() command.
  2. All MAIN windows must have a title bar
  3. The TitleBar property is protected, thus you cannot change this at run-time.

YES:

  1. You build a Dockable Window app. Certain Dockable Window types (ie: Tabbed) can exist without a TitleBar. However, this feature is now deprecated in PB2019. 

FYI: 

Regards ... Chris

 

Comment
There are no comments made yet.
  • Page :
  • 1


There are no replies made for this question yet.
However, you are not allowed to reply to this question.