Tech Articles


Resizing a Response Window or User Object


Here is a technique you can use to resize a response window or userobject as needed. It makes use of the GetWindowLong and SetWindowLong Windows API methods. The oldest reference I found to this is from Eric Aling back in 2000.

In a nutshell, you are changing the border around the object to one which Windows allows to be resized. What's even nicer about this is the standard resize events are triggered so you can reposition/change objects within the window as well (PFC resize service for example). From Eric's original post:

"The Get function retrieves the complete definition of the window in 
a big long variable. All the bits in this long value describe the window. 
So there are bits for the type of border (which indicates if a window is 
resizable), menu, colors etc.etc. We can modify this long value, altering 
the design of the window. Using the SetWindowLong() we update the window with 
our specific modifications."

I used this in ancestor code of a userobject I use to create visible panels within the main window.

// Unicode declarations, used 'A' for ANSI
function long GetWindowLongW (long hWindow, integer nIndex) Library "user32.dll"
function long SetWindowLongW (long hWindow, integer nIndex, long dwNewLong) library "user32.dll"

// code in my post constructor event
n_cst_numerical lnv_num // PFC numeric service
long        ll_Styles
boolean        lb_Control

constant long    WS_THICKFRAME = 262144
constant long    WS_SYSMENU = 524288

ll_styles = GetWindowLongw(handle(THIS), -16)
if ll_styles <> 0 then

    ll_styles = lnv_num.of_BitWiseOr(ll_styles, WS_THICKFRAME)
// don't need control menu but leave this for reference 
//    if ab_Control then 
//        ll_styles = lnv_num.of_BitWiseOr(ll_styles, WS_SYSMENU)
//    end if

    SetWindowLongW(handle(THIS), -16, ll_styles)
end if
At first my UO cannot be resized.

Non resizable window

 

 

 

Now it can!

Resizable window

 

 

 

I've seen other references to these API calls for manipulating windows for other things but I have not investigated further.

Comments (0)
There are no comments posted here yet

Find Articles by Tag

UI Themes External Functions License PBDOM TortoiseGit Azure Expression Android Database Object OrcaScript RibbonBar Builder Web API Open Source Icon Interface SQL Server DataWindow NativePDF Window Encoding Debugging BLOB Git Branch & Merge Class RichTextEdit Control CI/CD Menu Trial Event Handler API CrypterObject Configuration Export IDE Debug JSON Syntax DataWindow JSON Resize Import C# GhostScript Sort CoderObject Service Web Service Proxy Visual Studio SqlModelMapper 64-bit Windows OS SQL OAuth 2.0 Database Table RibbonBar Deployment WebBrowser SVN PowerBuilder REST JSONParser Stored Procedure Linux OS Source Control Installation Outlook Import JSON HTTPClient Automated Testing .NET Std Framework PowerScript (PS) DataType Database Connection UI Modernization SnapDevelop Authorization PowerBuilder Compiler PowerBuilder (Appeon) Variable ODBC SDK DLL MessageBox TreeView Text UI Array Oracle Database Profile Encryption Export JSON Data PDFlib .NET Assembly PBNI DevOps PBVM SqlExecutor Application JSONGenerator .NET DataStore Authentication PostgreSQL ODBC driver PostgreSQL PDF Database Table Schema Elevate Conference PowerServer Web WinAPI ActiveX Event Handling TLS/SSL Platform RESTClient InfoMaker Repository TFS iOS Mobile Filter Design Error SOAP Testing Performance XML Charts Windows 10 Icons COM Database Painter Bug Model Jenkins PFC Debugger OAuth Excel Migration SnapObjects Script Database Table Data Transaction Source Code Messagging PowerServer Mobile Graph DragDrop 32-bit File Event OLE Database Validation