Starting monitor
Starting monitor
If there are several monitors, is it possible to specify the starting monitor for the application ?
Re: Starting monitor
Hi,
http://forums.fivetechsupport.com/viewtopic.php?f=16&t=36546&hilit=fw+getmonitor&sid=5408cb8de17b12ed5065f9731c82ea6a
http://forums.fivetechsupport.com/viewtopic.php?f=16&t=36546&hilit=fw+getmonitor&sid=5408cb8de17b12ed5065f9731c82ea6a
Code: Select all | Expand
* Multiple Monitors support functions:
fwh\source\function\getsysin.prg
- FW_ActiveMonitors() --> nMonitors
Number of extended monitors currently active.
- FW_VirtualScreen() --> oRect
TRect object representing the area of virtual screen covered by all the
extended monitors. (Note: The object has datas nTop, nLeft, nBottom,
nRight, nWidth, nHeight)
The total width of the rectangle is the sum of horizontal resolutions of
all the monitors and height is the maximum of the vertical resolutions
of all the monitors.
Recommended reading for better understanding
https://docs.microsoft.com/en-us/window ... ual-screen
https://docs.microsoft.com/en-us/window ... y-monitors
- FW_GetMonitor(params) --> oMonitor (TMonitor object)
params:
FW_GetMonitor() --> oPrimaryMonitor
FW_GetMonitor( n ) --> nth Monitor object. Defaults to primary monitor
if there is only one active monitor.
FW_GetMonitor( oWnd/hWnd ) --> oMonitor containing max area of the window
FW_GetMonitor( nRow, nCol ) --> oMonitor containing the coordinates
- TMonitor class datas and methods
DATAS:
lPrimary // Is primary monitor
nTop, nLeft, nBottom, nRight, nWidth, nHeight
CenterPt --> { nRow, nCol }
METHODS:
Row( nMonitorRow ) --> nRow on Virtual Screen
Col( nMonitorCol ) --> nCol on Virtual Screen
Center( oWnd/hWnd ) --> Centers the window inside the monitor
Move( oWnd/hWnd ) --> Sets the window in the monitor with the same
relative coordinates
Example Usage:
ACTIVATE WINDOW oWnd ON INIT FW_GetMonitor( 2 ):Center( oWnd )
ACTIVATE WINDOW oWnd ON INIT FW_GetMonitor( 2 ):Move( oWnd )
If the program is run on a single monitor the display defaults to the
primary monitor
Regards,
Hakan ONEMLI
Harbour & MSVC 2022 & FWH 23.04
Hakan ONEMLI
Harbour & MSVC 2022 & FWH 23.04
Re: Starting monitor
Thank you, Horizon! I've read it all. But I was hoping for a concrete example. And so you'll have to figure it out yourself. 

Re: Starting monitor
I'm also interested in an example of multimonitor.
Thanks.
Thanks.
Regards,
Michel D.
Genk (Belgium)
_____________________________________________________________________________________________
I use : FiveWin for (x)Harbour v. 24.09 - Harbour 3.2.0 (February 2024) - xHarbour Builder (January 2020) - Bcc773
Michel D.
Genk (Belgium)
_____________________________________________________________________________________________
I use : FiveWin for (x)Harbour v. 24.09 - Harbour 3.2.0 (February 2024) - xHarbour Builder (January 2020) - Bcc773
Re: Starting monitor
To get the DC of the monitor, it is suggested to use the EnumDisplayMonitors function. Where can I find this function?
- Antonio Linares
- Site Admin
- Posts: 42596
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Has thanked: 40 times
- Been thanked: 86 times
- Contact:
Re: Starting monitor
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-enumdisplaymonitors
Just need to code a Harbour C wrapper for it
Just need to code a Harbour C wrapper for it
Re: Starting monitor
I tried:
DLL32 FUNCTION EnumDisplayMonitors( hdc AS LONG, lprcClip AS LONG, ;
lpfnEnum AS Mnt_Lg, dwData AS LONG) AS BOOL PASCAL LIB "user32.dll"
But, apparently, I am wrong in the description of the call function
DLL32 FUNCTION EnumDisplayMonitors( hdc AS LONG, lprcClip AS LONG, ;
lpfnEnum AS Mnt_Lg, dwData AS LONG) AS BOOL PASCAL LIB "user32.dll"
But, apparently, I am wrong in the description of the call function

Re: Starting monitor
hi,
as i understand ENUMDISPLAYMONITORS need a Callback to build a Array
from MiniGUI Extended Version
as i understand ENUMDISPLAYMONITORS need a Callback to build a Array
from MiniGUI Extended Version
Code: Select all | Expand
HB_FUNC( ENUMDISPLAYMONITORS )
{
PHB_ITEM pMonitorEnum = hb_itemArrayNew( 0 );
EnumDisplayMonitors( NULL, NULL, _MonitorEnumProc0, ( LPARAM ) pMonitorEnum );
hb_itemReturnRelease( pMonitorEnum );
}
BOOL CALLBACK _MonitorEnumProc0( HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData )
greeting,
Jimmy
Jimmy
Re: Starting monitor
hi,
i´m nur sure but as i know MiniGUI can be used with xHarbour and BCC
IMHO it seems me xharbour do HAVE that API Function already
---
you can also use WMI
it does have this Property
And how does it adapt this to xHarbour
i´m nur sure but as i know MiniGUI can be used with xHarbour and BCC
Code: Select all | Expand
#ifndef __XHARBOUR__
HB_FUNC( ENUMDISPLAYMONITORS )
BOOL CALLBACK _MonitorEnumProc0( HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData )
HB_FUNC( GETMONITORINFO )
#endif
#ifndef __XHARBOUR__
HB_EXPORT PHB_ITEM Rect2Hash( RECT * rc )
#endif
IMHO it seems me xharbour do HAVE that API Function already
---
you can also use WMI
Code: Select all | Expand
colItems := objWMIServices:ExecQuery("select * from Win32_DesktopMonitor",,48)
it does have this Property
Code: Select all | Expand
LOCAL aProp := {;
"Availability",;
"Bandwidth",;
"Caption",;
"ConfigManagerErrorCode",;
"ConfigManagerUserConfig",;
"CreationClassName",;
"Description",;
"DeviceID",;
"DisplayType",;
"ErrorCleared",;
"ErrorDescription",;
"InstallDate",;
"IsLocked",;
"LastErrorCode",;
"MonitorManufacturer",;
"MonitorType",;
"Name",;
"PixelsPerXLogicalInch",;
"PixelsPerYLogicalInch",;
"PNPDeviceID",;
"PowerManagementCapabilities",;
"PowerManagementSupported",;
"ScreenHeight",;
"ScreenWidth",;
"Status",;
"StatusInfo",;
"SystemCreationClassName",;
"SystemName" }
greeting,
Jimmy
Jimmy
Re: Starting monitor
Thanks, Jimmy !
I don't know, I've never used MiniGui
Through WMI I will try. If it doesn't work, I'll try using PowerShell
I don't know, I've never used MiniGui
Through WMI I will try. If it doesn't work, I'll try using PowerShell
- nageswaragunupudi
- Posts: 10729
- Joined: Sun Nov 19, 2006 5:22 am
- Location: India
- Been thanked: 10 times
- Contact:
Re: Starting monitor
Natter wrote:If there are several monitors, is it possible to specify the starting monitor for the application ?
If you want to start the application in the 2nd monitor, then use
Code: Select all | Expand
ACTIVATE WINDOW oWnd ON INIT FW_GetMonitor( 2 ):Center( oWnd )
I think we can do most anything required with the provided multi-monitor functions given above.
Regards
G. N. Rao.
Hyderabad, India
G. N. Rao.
Hyderabad, India
- Marc Venken
- Posts: 1485
- Joined: Tue Jun 14, 2016 7:51 am
- Location: Belgium
Re: Starting monitor
I don't get it working.
I was trying to show a xbrowse on screen 1 and on screen 2 a dialog with some data from that browse, INCLUDING a picture (ximage) that is located in the browse as a file name (data files on drive)
moving in the browse changes the data in screen 2
Anyone has this running like this ?
I was trying to show a xbrowse on screen 1 and on screen 2 a dialog with some data from that browse, INCLUDING a picture (ximage) that is located in the browse as a file name (data files on drive)
moving in the browse changes the data in screen 2
Anyone has this running like this ?
Marc Venken
Using: FWH 23.08 with Harbour
Using: FWH 23.08 with Harbour
- Marc Venken
- Posts: 1485
- Joined: Tue Jun 14, 2016 7:51 am
- Location: Belgium
Re: Starting monitor
The 2 screens are not the same (desktop large monitor and a laptop monitor. The virtual screen wil not look nice this way.
Should I look into a MDI dialog ? (also nerver used)
Should I look into a MDI dialog ? (also nerver used)
Marc Venken
Using: FWH 23.08 with Harbour
Using: FWH 23.08 with Harbour
- nageswaragunupudi
- Posts: 10729
- Joined: Sun Nov 19, 2006 5:22 am
- Location: India
- Been thanked: 10 times
- Contact:
Re: Starting monitor
Marc Venken wrote:I don't get it working.
I was trying to show a xbrowse on screen 1 and on screen 2 a dialog with some data from that browse, INCLUDING a picture (ximage) that is located in the browse as a file name (data files on drive)
moving in the browse changes the data in screen 2
Anyone has this running like this ?
Can be done in different ways.
Here is one sample I quickly made. (Tested and working)
Code: Select all | Expand
#include "fivewin.ch"
REQUEST DBFCDX
function Main()
local oDlg
USE WWONDERS ALIAS WW VIA "DBFCDX"
DEFINE DIALOG oDlg SIZE 400,400 PIXEL TRUEPIXEL
@ 20,20 SAY WW->NAME SIZE 360,30 PIXEL OF oDlg CENTER
oDlg:bPainted := {|hDC| oDlg:DrawImage( WW->IMAGE, { 60,30,380,280 } ) }
ACTIVATE DIALOG oDlg NOMODAL ON INIT FW_GetMonitor( 2 ):Center( oDlg )
XBROWSER "WW" SETUP ( oBrw:bChange := { || oDlg:Refresh() } ) ;
VALID ( oDlg:End(), .t. )
return nil
Regards
G. N. Rao.
Hyderabad, India
G. N. Rao.
Hyderabad, India