VC++ 双屏复制、扩展 的完整版源码

woai_quan 2014-03-31 04:30:34
跪求VC++ 双屏复制、扩展(c++编写) 的完整版源码;谁有,重谢
...全文
303 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
gewinlu2008 2015-06-17
  • 打赏
  • 举报
回复
好好好,很好很好很好
gewinlu2008 2015-06-17
  • 打赏
  • 举报
回复
好东东,感谢。
cccccl 2014-12-26
  • 打赏
  • 举报
回复
void CScreenSaverDlg::OnBnClickedBtnClone() { // TODO: 在此添加控件通知处理程序代码 CDisplayInfo::SetDisplayMode(CDisplayInfo::DISPLAY_TYPE_CLONE); } BOOL CDisplayInfo::SetDisplayMode(int iType,BOOL ExChange/* =FALSE */) { WinVerDef osVer; if(GetOSVersion(&osVer)) { if(osVer==WIN_VER_WIN7) { OutputDebugString(TEXT("Win7")); SetDisplayModeWin7(iType,ExChange); } else { OutputDebugString(TEXT("Other OS")); SetDisplayModeXP(iType,ExChange); } return TRUE; } return FALSE; } BOOL CDisplayInfo::SetDisplayModeXP(int iType,BOOL ExChange/*=0*/) { DEVMODE dvm1; memset(&dvm1, 0, sizeof(dvm1)); dvm1.dmSize = sizeof(dvm1); DEVMODE dvm2; memset(&dvm2, 0, sizeof(DEVMODE)); dvm2.dmSize = sizeof(DEVMODE); TCHAR PriDevName[0x100]={0}; TCHAR AddDevName[0x100]={0}; DISPLAY_DEVICE DispDev; BOOL bRet = TRUE; ZeroMemory(&DispDev, sizeof(DISPLAY_DEVICE)); DispDev.cb = sizeof(DISPLAY_DEVICE); int i=0; int nOffset=0; BOOL bAnaly=FALSE; while(bRet) { bRet=EnumDisplayDevices(NULL,i,&DispDev,0); if(bAnaly==FALSE) { bAnaly=TRUE; if(1==AnalyCardType(DispDev.DeviceName))//只能是API显示卡 { return FALSE; } bAnaly=TRUE; } if(bRet) { if(DispDev.StateFlags&DISPLAY_DEVICE_PRIMARY_DEVICE) { _tcscpy_s(PriDevName,0x100,DispDev.DeviceName); bRet=EnumDisplaySettingsEx(DispDev.DeviceName,ENUM_CURRENT_SETTINGS,&dvm1,EDS_RAWMODE); } else if((DispDev.StateFlags&0xFFFF)<8) { _tcscpy_s(AddDevName,0x100,DispDev.DeviceName); } } i++; if(i==2) { break; } } if(i==1)//只有一个显示器,不能进行模式设置. { return FALSE; } dvm1.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT | DM_POSITION ; dvm2.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT | DM_POSITION ; //dvm2=dvm1; dvm2.dmPelsHeight=dvm1.dmPelsHeight; dvm2.dmPelsWidth=dvm1.dmPelsWidth; switch(iType) { case DISPLAY_TYPE_SINGLE: dvm2.dmPelsHeight=0;//设置成单显示器. dvm2.dmPelsWidth=0; break; case DISPLAY_TYPE_CLONE://当两个显示器同时有效时,偏移不重叠.克隆模式就不能直接设置. // dvm2.dmPelsHeight=10; // dvm2.dmPelsWidth=10; break; case DISPLAY_TYPE_EXTEND: nOffset=dvm1.dmPelsWidth;//强制横向向右扩展, break; default: break; } dvm1.dmPosition.x=0; dvm1.dmPosition.y=0; dvm2.dmPosition.x=nOffset; dvm2.dmPosition.y=0; CString Str; Str.Format(TEXT("Pri: %s (%d,%d,%d,%d)\r\n"),PriDevName,dvm1.dmPosition.x,dvm1.dmPosition.y, dvm1.dmPelsWidth,dvm1.dmPelsHeight); OutputDebugString(Str); Str.Format(TEXT("Add: %s (%d,%d,%d,%d)\r\n"),AddDevName,dvm2.dmPosition.x,dvm2.dmPosition.y, dvm2.dmPelsWidth,dvm2.dmPelsHeight); OutputDebugString(Str); if(ExChange && (iType==DISPLAY_TYPE_EXTEND || iType==DISPLAY_TYPE_SINGLE))//如果需要交换显示,则改变主显示器 { ChangeDisplaySettingsEx(PriDevName, &dvm2, NULL, CDS_NORESET | CDS_UPDATEREGISTRY , 0); ChangeDisplaySettingsEx(AddDevName, &dvm1, NULL, CDS_SET_PRIMARY | CDS_NORESET | CDS_UPDATEREGISTRY, 0); } else { ChangeDisplaySettingsEx(PriDevName, &dvm1, NULL, CDS_SET_PRIMARY | CDS_NORESET | CDS_UPDATEREGISTRY, 0); ChangeDisplaySettingsEx(AddDevName, &dvm2, NULL, CDS_NORESET | CDS_UPDATEREGISTRY , 0); } ChangeDisplaySettingsEx(NULL, NULL, NULL, 0, 0);//使有效 return TRUE; }
gz_qmc 2014-04-03
  • 打赏
  • 举报
回复
设备是用DC表示的 获取设备DC,数据COPY到DC就是了 比如三台设备,分别是显示器1,显示器2,打印机,投影机 那么 HDC dc1=CreateDC(显示器1驱动, 显示器1设备名, NULL, 初始化数据); HDC dc2=CreateDC(显示器2驱动, 显示器2设备名, NULL, 初始化数据); HDC dc3=CreateDC(打印机驱动, 打印机设备名, NULL, 初始化数据); HDC dc4=CreateDC(投影机驱动, 投影机设备名, NULL, 初始化数据); 假设,你操作的电脑桌面DC是 DeskTopDC 那么按屏幕大小BltBit(DestTopDC,...,dc1,...)会做吧?
woai_quan 2014-04-03
  • 打赏
  • 举报
回复
暂时不知道,老大让我写,
hejh001 2014-04-02
  • 打赏
  • 举报
回复
有点意思!这个要用在哪里?
woai_quan 2014-04-01
  • 打赏
  • 举报
回复
双屏复制就是使两个显示器显示相同的类容,就是同步显示,和投影仪那种感觉一样
LongRui888 2014-03-31
  • 打赏
  • 举报
回复
双屏复制 是什么意思

65,208

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧