m0_37543276
m0_37543276
采纳率0%
2019-02-22 21:19

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

80

用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条回答

  • minihowto minihowto 2年前

    这是一个特有的callback 全局函数,不是能通过添加成员函数的方式添加。
    直接写成这样的形式:
    BOOL CALLBACK MonitorEnumProc(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData)
    {
    ...
    }
    报错是因为需要传入函数指针,你传递进去了成员函数的指针,不匹配。

    点赞 评论 复制链接分享
  • weixin_44646312 施皓然 2年前

    MoveWindow(0,0,SETTING_WIDTH+SETTIN_HEIGHT,SETTIN_HEIGHT,FALSE);
    SetWindowPos(&CWnd::wndTopMost, 0, 0, 0, 0, SWP_NOSIZE|SWP_NOMOVE);
    SetFocus();你试一试这样对不对

    点赞 评论 复制链接分享
  • zqckzqck 夫人的泡泡鱼 2年前

    MoveWindow(0,0,SETTING_WIDTH+SETTIN_HEIGHT,SETTIN_HEIGHT,FALSE);
    // 设置窗口位置
    SetWindowPos(&CWnd::wndTopMost, 0, 0, 0, 0, SWP_NOSIZE|SWP_NOMOVE);
    SetFocus();
    基于对话框的可以把主对话框的分辨率设置成双屏的分辨率。
    把相应的对话框移动到对应位置即可。

    点赞 评论 复制链接分享
  • caozhy 从今以后生命中的每一秒都属于我爱的人 2年前
    MonitorEnumProc这个函数怎么定义的,它不能是成员函数(目测你现在是成员函数)
    
    点赞 评论 复制链接分享

相关推荐