使用EnumDisplayMonitors()做双屏幕显示双对话框界面问题,大佬们请进。

qwwmnn123 2018-12-25 04:28:17
今天想用vc6.0的mfc写一个基于对话框的程序,目的是实现两个对话框界面分别显示在两个显示器上(显示器接同一主机)。大致流程如下:
1)主对话框类名叫CDDialogDlg;新建一个新对话框同时新建一个类(类名CZIDG)与该对话框绑定。
2)在主对话框源文件DDialogDlg.cpp中添加以下代码:
int numScreen=0;
CRect rect[2];
BOOL CALLBACK MonitorEnumProc(HMONITOR hMonitor,HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData);//声明回调函数

BOOL CALLBACK MonitorEnumProc(HMONITOR hMonitor,HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData)
{
static BOOL first = TRUE; //标志

//保存显示器信息
MONITORINFO monitorinfo;
monitorinfo.cbSize = sizeof(MONITORINFO);

//获得显示器信息,将信息保存到monitorinfo中
GetMonitorInfo(hMonitor, &monitorinfo);

//若检测到主屏
if(monitorinfo.dwFlags == MONITORINFOF_PRIMARY)
{
if(first) //第一次检测到主屏
{
first = FALSE;
numScreen = 1;

//将显示器的分辨率信息保存到rect
rect[0] = monitorinfo.rcMonitor;
return TRUE;

}
else //第二次检测到主屏,说明所有的监视器都已经检测了一遍,故可以停止检测了
{
first = TRUE; //标志复位
return FALSE;//结束检测
}
}

rect[numScreen] = monitorinfo.rcMonitor;
numScreen++;
return TRUE;
}
在主对话框初始化函数OnInitDialog()函数中添加:
EnumDisplayMonitors(NULL, NULL, MonitorEnumProc, 0);
在主对话框上添加一个按钮,对应的按钮单击响应函数如下:
void CDDialogDlg::OnShuangxianBTN()
{
// TODO: Add your control notification handler code here
if (numScreen==2)
{
m_pzidg = new CZIDG(); //m_pzidg为在主对话框头文件中声明的指向CZIDG的指针。
m_pzidg->Create(IDD_ZI_DIALOG,this);//m_pzidg为在主对话框头文件中声明的指向CZIDG的指针。
m_pzidg->ShowWindow(SW_SHOW);
m_pzidg->MoveWindow(rect[1].left ,rect[1].top ,rect[1].Width (),rect[1].Height (),TRUE);
}


}

运行后,出现以下问题:
Compiling...
DDialogDlg.cpp
F:\PG\test_vc6\DDialog\DDialogDlg.cpp(19) : error C2065: 'HMONITOR' : undeclared identifier
F:\PG\test_vc6\DDialog\DDialogDlg.cpp(19) : error C2146: syntax error : missing ')' before identifier 'hMonitor'
F:\PG\test_vc6\DDialog\DDialogDlg.cpp(19) : warning C4229: anachronism used : modifiers on data are ignored
F:\PG\test_vc6\DDialog\DDialogDlg.cpp(19) : error C2059: syntax error : ')'
F:\PG\test_vc6\DDialog\DDialogDlg.cpp(97) : error C2146: syntax error : missing ')' before identifier 'hMonitor'
F:\PG\test_vc6\DDialog\DDialogDlg.cpp(97) : warning C4229: anachronism used : modifiers on data are ignored
F:\PG\test_vc6\DDialog\DDialogDlg.cpp(97) : error C2086: 'MonitorEnumProc' : redefinition
F:\PG\test_vc6\DDialog\DDialogDlg.cpp(97) : error C2059: syntax error : ')'
F:\PG\test_vc6\DDialog\DDialogDlg.cpp(98) : error C2143: syntax error : missing ';' before '{'
F:\PG\test_vc6\DDialog\DDialogDlg.cpp(98) : error C2447: missing function header (old-style formal list?)
F:\PG\test_vc6\DDialog\DDialogDlg.cpp(162) : error C2065: 'EnumDisplayMonitors' : undeclared identifier


是因为缺少头文件吗?还是因为该函数不是在VC6.0的mfc中使用,需要在VS中使用?请大佬们指点,谢谢!



...全文
1023 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zctymjx 2021-09-06
  • 打赏
  • 举报
回复

有遇到这个问题吗?怎么解决的?
error LNK2001: unresolved external symbol _xEnumDisplayMonitors@16

qwwmnn123 2018-12-25
  • 打赏
  • 举报
回复
可以解决谢谢楼上大佬。
zgl7903 2018-12-25
  • 打赏
  • 举报
回复
stdafx.h 中定义 #define WINVER 0x0500 试试看

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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