m0_37543276
m0_37543276
2019-02-20 21:54

求助大佬:MFC检测扩展显示器时回调函数错误怎么解决?

5
  • c++
  • c语言
  • 开发语言

用MFC编了一个基于对话框的程序,准备使用电脑扩展屏,形成一个主屏和副屏分别显示1个对话框。参考咱们CSDN大佬的程序代码,操作如下:
第1步:在FileView中添加了”MULTIMON.H“头文件;
第2步:在ClassView中通过Add Member Function自己写了回调函数,用来检测主副显示器信息,如下所示

BOOL CALLBACK CTESTDLG::MonitorEnumProc(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData)
/******
对话框:CTESTDLG
回调函数名:MonitorEnumProc
输入参数:HMONITOR hMonitor—显示器句柄;
HDC hdcMonitor—显示器DC句柄;
LPRECT lprcMonitor, LPARAM dwData—EnumDisplayMonitor传来的数据
返回:bool
******/

第3步:在初始化函数中添加EnumDisplayMonitor调用回调函数。
就是在BOOL CTESTDLG::OnInitDialog()中添加
EnumDisplayMonitor(NULL, NULL, MonitorEnumProc, 0);

运行后,显示错误如下:
error C2664:'xEnumDisplayMonitor' : cannot convert parameter 3 from 'int(struct HMONITOR___*, struct HDC___*,struct tagRECT , long)' to 'int(___stdcall )(struct HMONITOR___, struct HDC___,struct tagRECT *, long)'

就是xEnumDisplayMonitor或EnumDisplayMonitor(此处也不明白为什么原代码没有x,报错时有了x)第3个参数,也就是MonitorEnumProc这个回调函数转换有问题,前后多了一个(___stdcall *)。
也就是cannot convert parameter 3 from 'int(……)' to 'int(___stdcall *)(……)'
两个括号里面的传递参数一样(不知道为什么上传CSDN时前后不一样,有几个星号和下划线不见了)。本人水平太低,不知如何调试,恳请大佬不吝赐教,感谢!

  • 点赞
  • 回答
  • 收藏
  • 复制链接分享

2条回答