截屏程序的源碼網上到處都有,但是基本都不支持多顯示器。
這讓我一度以為支持多顯示器是一件很困難的事情。
(demo http://download.csdn.net/detail/problc/3841959 包含多顯示器支持,窗口高亮,十字放大等)
其實多顯示的截屏跟主顯示器的截屏區別並不大,甚至根本不需要EnumDisplayMonitors之類的調用。只是因為網上有了源碼,我們就懶得想了。
1. DC的問題。
hScrDC = CreateDC( _T("DISPLAY"),NULL,NULL,NULL );//主顯示器DC
hScrDC = ::GetDC(GetDesktopWindow()); //多屏DC
2. 坐標問題。
獲取坐標的時候用VIRTUALSCREEN參數
GetSystemMetrics(SM_CXVIRTUALSCREEN);
GetSystemMetrics(SM_CYVIRTUALSCREEN);
GetSystemMetrics(SM_XVIRTUALSCREEN );
GetSystemMetrics(SM_YVIRTUALSCREEN );
特別注意的是,多顯示器的時候,SM_XVIRTUALSCREEN和SM_YVIRTUALSCREEN是可以為負值的。
所以多顯示器處理時,邊界不要以為是(0,0)->(cx,cy)。
多顯示器的坐標是以主屏幕的左上角為(0,0)。
如果你有單顯示器的源碼,不妨改改上面的幾個小地方,你會發現多屏截屏其實很容易。
摘自 problc的專欄