none
如何在拓展显示器上显示对话框 RRS feed

  • 问题

  • 各位兄弟们:

    有一台电脑上面接了两个显示器,已经设置为扩展模式(两个屏幕分辨率相同)我想在两个屏幕的顶部出现一个对话框,然后显示滚动字幕,于是我使用以下代码

    //获取桌面大小
        SystemParametersInfo(SPI_GETWORKAREA,0,&rectDeskTop,SPIF_SENDCHANGE);

        //将对话框移动到桌面顶部
     ::SetWindowPos(this->m_hWnd,HWND_BOTTOM,rectDeskTop.left,rectDeskTop.top,rectDeskTop.Width(),50,SWP_NOZORDER);

    然而在只有一个显示器的电脑上面调试,窗口可以移动到屏幕的最上方,并且宽度正好为显示器的宽度,然后在两个显示器的电脑上面只能在1号显示屏上面显示出对话框,并且对话框还不会移动到顶部,只出现在屏幕中央,十分不解,望高人能够给点指导。谢谢

    2011年7月25日 9:56

答案

  • 你好,

     

    你在获取桌面大小的时候使用了SetWindowPos方法和参数SPI_GETWORKAREA。根据MSDN开发文档显示, 当系统连接多个显示器时,SetWindowPos只能显示主屏幕的大小(In a system with multiple display monitors, the function sets the work area of the monitor that contains the specified rectangle)。因此在您获取到的屏幕大小时,只有获取了一半的宽度,所以只出现在第一个屏幕中而没有出现在第二个屏幕中。我建议您可以使用GetWindowRect,这样就可以获取到全部的大小。您也可以使用Window GDI 中关于多屏幕的方法:http://msdn.microsoft.com/en-us/library/dd145072(v=VS.85).aspx

     

    这里有一些关于多屏幕开发的相关文档和示例,希望能够帮助您解决您的问题。

    1. http://msdn.microsoft.com/en-us/library/dd162826(v=VS.85).aspx

    2. http://www.codeproject.com/KB/system/Multimonitor.aspx

     

    此外您也可以在MSDN DirectShow 论坛中找到许多有用的帮助。

     

    希望我的回答对您的问题有所帮助


    Rob Pan [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 Rob Pan 2011年8月1日 8:36
    2011年7月27日 7:08