Hi_Jacky123 2019-02-22 21:19 采纳率: 77.8%
浏览 552
已结题

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

用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时前后不一样,有几个星号和下划线不见了)。本人水平太低,不知如何调试,恳请大佬不吝赐教,感谢!

  • 写回答

4条回答 默认 最新

  • threenewbee 2019-02-22 23:32
    关注
    MonitorEnumProc这个函数怎么定义的,它不能是成员函数(目测你现在是成员函数)
    
    评论

报告相同问题?

悬赏问题

  • ¥15 孟德尔随机化r语言运行问题
  • ¥15 pyinstaller编译的时候出现No module named 'imp'
  • ¥15 怎么把多于硬盘空间放到根目录下
  • ¥15 Matlab问题解答有两个问题
  • ¥50 Oracle Kubernetes服务器集群主节点无法访问,工作节点可以访问
  • ¥15 LCD12864中文显示
  • ¥15 在使用CH341SER.EXE时不小心把所有驱动文件删除了怎么解决
  • ¥15 gsoap生成onvif框架
  • ¥15 有关sql server business intellige安装,包括SSDT、SSMS。
  • ¥15 stm32的can接口不能收发数据