在MFC中将应用程序移动到第二个显示器

5

我正在使用VS2008 VC++.net开发一个应用程序。

我想将该应用程序移动到辅助显示器上,而不是使用鼠标拖动。

是否有像按下按钮或任何快捷键一样的MoveToMonitor功能。然后它应该移动到辅助显示器上。


我假设你在询问编程中可以使用的函数。如果你在询问Windows提供的快捷键,那么这可能属于SuperUser的范畴。 - Jerry Coffin
2个回答

3

您应该能够调用GetMonitorInfo并将窗口移动到其中。

在此处查看更多信息: 'MFC Example Multiple monitor support with GetSystemMetrics EnumDisplayMonitors and GetMonitorInfo'。

Using the code

CMointor is a basic MFC class that allows you to safely use the multiple-monitor API on any Win32 platform. 

There are three classes in this library:

CMonitors represents the collection of monitors currently attached to the system and wraps the EnumDisplayMonitors API function.

  Collapse Copy Code
//CMonitors' interface
CMonitor GetMonitor( const int index ) const;
int GetCount() const; 

//returns the monitor closest to the specified item
static CMonitor GetNearestMonitor( const LPRECT lprc );
static CMonitor GetNearestMonitor( const POINT pt );
static CMonitor GetNearestMonitor( const CWnd* pWnd );

//is the specificed item visible on any monitor
static BOOL IsOnScreen( const POINT pt );
static BOOL IsOnScreen( const CWnd* pWnd );
static BOOL IsOnScreen( const LPRECT lprc );

//returns the rectangle encompassing all monitors
static void GetVirtualDesktopRect( LPRECT lprc );

//determines whether the given handle is a valid monitor handle
static BOOL IsMonitor( const HMONITOR hMonitor );
static CMonitor GetPrimaryMonitor();
static BOOL AllMonitorsShareDisplayFormat();

static int GetMonitorCount();
CMonitor is a wrapper around an HMONITOR handle (returned from EnumDisplayMonitors) and the GetMonitorInfo function. With CMonitor you can get at the characteristics of a given monitor.

  Collapse Copy Code
//The interface of CMonitor            
void Attach( const HMONITOR hMonitor );
HMONITOR Detach();

void ClipRectToMonitor( LPRECT lprc, 
                        const BOOL UseWorkAreaRect = FALSE ) const;
void CenterRectToMonitor( LPRECT lprc, 
                          const BOOL UseWorkAreaRect = FALSE ) const;
void CenterWindowToMonitor( CWnd* const pWnd,
                            const BOOL UseWorkAreaRect = FALSE ) const;

//creates a device context for the monitor - the client is responsible for 
// DeleteDC
HDC CreateDC() const;

void GetMonitorRect( LPRECT lprc ) const;
//the work area is the monitor rect minus the start bar
void GetWorkAreaRect( LPRECT lprc ) const;

void GetName( CString& string ) const;

int GetBitsPerPixel() const;

//determines if the specified item on the monitor
BOOL IsOnMonitor( const POINT pt ) const;
BOOL IsOnMonitor( const CWnd* pWnd ) const;
BOOL IsOnMonitor( const LPRECT lprc ) const;

BOOL IsPrimaryMonitor() const;
BOOL IsMonitor() const;

CMonitorDC is a CDC derived class that represents a monitor specific device context. I haven't really gone to far with this class but it seemed like a logical part of the library.  

Known Limitations

CMonitor and CMonitors rely on the assumption that a monitor handle does not change. This has proved to be a safe assumption empirically but isn't nessecarily a guarantee.

如果您使用的是Windows 7,则在多个显示器之间移动窗口的方法是 Windows-Arrow


你能提供一些相关编程的样例代码吗? - Anu
通过使用MSDN示例代码,屏幕适合于中心,不会移动到第二个监视器。 - Anu
第二个链接已经失效。 - aquirdturtle
修复了链接并复制了相关信息。 - Preet Sangha

2

您需要使用 MoveWindow (或者 SetWindowPos,但在这种情况下您不需要它可以做的额外事情)将窗口移动到显示在所讨论的监视器上的桌面的部分。您可以通过(除其他可能性外)EnumDisplayMonitors 找到与每个监视器相关联的矩形。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接