因此,我一直在通過網絡尋找線索如何做到這一點,但我似乎無法做到正確。我有一個默認的雙顯示器設置,我想「挑選」「顯示器2」,所以當用戶按下程序中的按鈕時,我可以在全屏中顯示一個窗口。獲取特定顯示器的處理程序以在彈出窗口中放置彈出窗口
所以據我瞭解,我需要指定顯示器作爲第一步的處理程序,我的做法是根據MSDN 「檢索所有顯示監視器,使用這樣的代碼信息」來稱呼EnumDisplayMonitors
:
int main()
{
EnumDisplayMonitors(NULL, NULL, MyInfoEnumProc, 0);
}
其中MyInfoEnumProc
的回調定義如下:
std::vector<HMONITOR> handlerList;
static BOOL CALLBACK MyInfoEnumProc(HMONITOR hMon, HDC hdc, LPRECT lprcMonitor, LPARAM pData)
{
MONITORINFOEX info_;
info_.cbSize = sizeof(MONITORINFOEX);
GetMonitorInfo(hMon, &info_); // retrieve monitor info, put it in info_?
handlerList.push_back(hMon); // push handler to array
std::cout << info_.szDevice; // attempt to print data
std::cout << std::endl;
return true;
}
所以這個回調應該通過所有連接到系統的顯示器,但我不太明白浩W我獲得像解析,ID和名稱的數據?就像我從桌面進入顯示器設置一樣,有一個ID分配給每臺顯示器,這將是有用的,所以我可以把我的窗口放在顯示器2,而不是我的主顯示器,顯示器1. 關於處理程序,我把它放在一個數組中,但我真的需要數據,所以我知道我已經獲得了哪個監視器的處理程序,我想?當我打印顯示器的設備名稱std::cout << info_.szDevice;
我只是得到兩個顯示器相同的號碼。
我是C++新手,所以我可能已經錯過了明顯的東西。希望任何人都能幫忙。
編輯:
感謝Iinspectable,他提到,在回調函數中,你基本上可以檢查dwFlags
屬性中找到此主監視器,然後你知道哪一個是第二個畫面:
static BOOL CALLBACK MyInfoEnumProc(HMONITOR hMon, HDC hdc, LPRECT lprcMonitor, LPARAM pData)
{
MONITORINFOEX info_;
info_.cbSize = sizeof(MONITORINFOEX);
GetMonitorInfo(hMon, &info_);
if (info_.dwFlags == 0) {
std::cout << std::endl;
std::cout << "Found the non-primary monitor" << std::endl;
handlerList.push_back(hMon);
}
return true;
}
如果我想連接第三個屏幕,對於這個問題有一個通用的解決方案,dwFlags
= 0對於3個顯示器的例子有2個例子。
你能定義你的意思嗎?監視器編號 –
當你右鍵單擊桌面並轉到監視器設置 - >屏幕。圖片:http://imgur.com/a/vO8tF。例如,這是我的3個監視器設置。 – jones