多个对话框或程序放在不同屏幕的解决办法
2015-10-23 08:59
681 查看
在项目过程中需要在一个程序中创建多个对话框,每个对话框分别放在不同的屏幕上同时显示,按照项目以前的做法,是通过手动修改配置文件的办法来解决这种事情。后来做着做着,觉着这样好麻烦,我想要程序自己解决这个问题。于是便有了下面的文章。其实很简单,通过Windows自带的函数就可以解决。代码如下:
BOOL CALLBACK MonitorEnumProc(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData); CRect rect[3]; HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData) { DISPLAY_DEVICE ddDisplay; ZeroMemory(&ddDisplay, sizeof(ddDisplay)); ddDisplay.cb = sizeof(ddDisplay); DEVMODE dm; ZeroMemory(&dm, sizeof(dm)); dm.dmSize = sizeof(dm); for (int i = 0; i < 3; i++)//我有3个屏幕,所以循环3次 { //下一步是为了获得每个显示设备的名字 EnumDisplayDevices(NULL, i, &ddDisplay, 0); EnumDisplaySettings((char*)ddDisplay.DeviceName, ENUM_CURRENT_SETTINGS, &dm); rect[i].left = dm.dmPosition.x; rect[i].top = dm.dmPosition.y; rect[i].right = dm.dmPelsWidth; rect[i].bottom = dm.dmPelsHeight; } return TRUE; }
然后在主对话框的OnInitDialog()中添加一句
EnumDisplayMonitors(NULL, NULL, &MonitorEnumProc, 0);就大功告成啦!
示例:
主对话框代码:
MoveWindow(0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN), true); m_media.MoveWindow(0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN), true); EnumDisplayMonitors(NULL, NULL, &MonitorEnumProc, 0);第二个对话框代码:
MoveWindow(rect[1].left, rect[1].top, rect[1].right, rect[1].bottom, true); m_media1.MoveWindow(0, 0, rect[1].right, rect[1].bottom, true);如果还有其它对话框的话就以此类推。
相关文章推荐
- java实现文件上传--flash上传
- spring概述以及优点
- 【第7周 项目3 - 负数把正数赶出队列】
- 修改Keepalived配置文件位置以及重定向Keepalived日志的输出路径
- oracle home/bin 下的oracle权限导致ORA-01078和Linux-x86_64 Error故障
- 修改Keepalived配置文件位置以及重定向Keepalived日志的输出路径
- UI第一天学习总结
- String常用方法
- 脚底受寒百病生
- 练习2 A - ASCII码排序
- 第9周 项目4—广义表算法库及应用
- 第四周项目3——单链表应用(2)
- 第7周实践项目4 - 队列数组
- 第七周项目2 建立链队算法库
- 第八周项目3 - 顺序串算法
- Python中序列的切片和加号
- 高精度除法与求余C++版和java版
- 第六周项目4数制转换
- 第六周项目5—后缀表达式
- 第八周 项目5-计数的模式匹配