Window modality is primarily driven by window handle ownership. Disabling the parent window and setting up a local message loop are secondary artifacts.
Setting the modal window handle's owner to the application main window creates the behavior that clicking on the main window sends focus to the modal child window. Without the owner set correctly, the main window can be focused while the "modal" window is showing, which is not modal behavior.
I seem to vaguely recall that you will also need to disable the owner window to prevent mouse clicks from clicking button or selecting menus on the owner window while the modal window is active.
Modal windows are usually also associated with a local message loop, but this has little to do with the modal UI behavior of the window and everything to do with the modal state of the executing code. Running a local message loop inside Form.ShowDialog() makes the function call synchronous with the modal window lifetime - it prevents the function from returning to the caller until the modal window is closed.
Setting the owner of a window handle can only be one when the child window handle is created. The owner cannot be changed after the child window handle exists. See MSDN on Owned Windows
So you cannot simply flip a switch and make a non-modal window modal.
Your best bet is to destroy the window handle and recreate it with the desired owner. This can be done with little or no screen flicker, but the larger issue is preserving any local state (text in edit boxes, checkbox states etc) of child controls on the window. Destroying the window will lose any state information in the child windows, so you will need to be sure to extract all the state first, then recreate the window handle, then restore the child window data afterwards.