使用EnumDisplayMonitors()做双屏幕显示双对话框界面问题,大佬们请进。
今天想用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中使用?请大佬们指点,谢谢!