You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

重写HwndHost的OnRenderSizeChanged报访问权限降低错误

错误产生原因

C++/CLI 对虚方法重写有明确约束:重写版本的访问权限不得窄于基类原方法的访问权限。
OnRenderSizeChanged 是基类 FrameworkElement(HwndHost 的父类)定义的 protected virtual 方法,你当前的重写代码没有显式声明访问修饰符,而C++/CLI中类成员的默认访问级别为private,相当于将原方法的访问权限从protected收窄为private,违反了重写的访问权限约束,因此编译器抛出“以降低的访问权限重写方法”错误。

修复方法

给重写的OnRenderSizeChanged方法显式添加protected访问修饰符即可,方法内部的OpenGL视口、投影矩阵设置逻辑不存在语法问题。修正后的完整方法代码如下:

protected:
virtual void OnRenderSizeChanged(SizeChangedInfo^ sizeInfo) override
{
    if (m_hDC == NULL || m_hRC == NULL)
        return;

    // DPI适配修正
    // 注意:sizeInfo->NewSize为双精度浮点值,先做乘法运算再转整型避免精度损失
    int iHeight = (int)(sizeInfo->NewSize.Height * m_dScaleY);
    int iWidth = (int)(sizeInfo->NewSize.Width * m_dScaleX);

    if (iWidth == 0 || iHeight == 0)
        return;

    wglMakeCurrent(m_hDC, m_hRC);
    glViewport(0, 0, iWidth, iHeight);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(-1.0, 1.0, -1.0, 1.0, 1.0, 100.0);
    // gluPerspective( 67.5, ((double)(iWidth) / (double)(iHeight)), 1.0, 500.0);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
}

注:你参考的两份WPF托管Win32窗口的教程示例中,均对该重写方法显式声明了protected访问级别,漏写访问修饰符是触发本次编译错误的唯一原因。

内容的提问来源于stack exchange,提问作者Distinct_Cabinet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 06:51:21