繁体   English   中英

错误 C2248: 'CObject::CObject': 当我在 ZD7421054471AB272ZCEAC18FD97BBD237

[英]error C2248: 'CObject::CObject' : cannot access private member declared in class 'CObject' when I calling hDC.SelectObject function in MFC

我在 MFC (Visual Studio 2013) 中为 WinCE 2013 开发了一个简单的程序,使用 GDI 方法在设备上下文上绘图。 不幸的是,当我尝试在上下文设备句柄上调用 SelectObject 时出现错误:“错误 C2248:'CObject::CObject':无法访问在 class'CObject 中声明的私有成员”

我附上了调用 SelectObject 方法的函数之一。

    BOOL Druk::DrawGrid(CDC hDC,int start_x, int start_y, int limit_x, int limit_y, int width)
{
    CPen pen;
    COLORREF linecol;
    pen.CreatePen(PS_SOLID, width, NULL);
    hDC.SelectObject(&pen);
    for (float i = start_y; i < limit_y; i += 5 * MILIMETER)
    {
        hDC.MoveTo(start_x, i);
        hDC.LineTo(limit_x, i);
    }
    for (float j = start_x; j < limit_x; j += 5 * MILIMETER)
    {
        hDC.MoveTo(j, start_y);
        hDC.LineTo(j, limit_y);

    }
    for (float i = start_x; i < limit_x; i += MILIMETER)
    {
        for (float j = start_y; j < limit_y; j += MILIMETER)
        {
            hDC.MoveTo(i, j);
            hDC.LineTo(i + 1, j);
        }
    }

    return TRUE;
}

我尝试用谷歌搜索这个错误,但我找不到可以帮助我的东西。

您的 SelectObject() 代码对我来说看起来不错。 但是,按值传递 CDC 是一个很大的错误。 您应该通过引用传递它或传递一个指向 CDC 的指针。 我希望当参数 CDC hDC 尝试制作副本时可能会看到错误。 CObject 的复制构造函数和赋值运算符被声明为私有且未实现。 您不能复制它们。 相反,将 function 的签名更改为:

BOOL Druk::DrawGrid(CDC& hDC,int start_x, int start_y, int limit_x, int limit_y, int width)
{
// your code
}

您还有一些其他问题...您需要保存最初选择的笔,然后将 select 保存回 CDC 最后....

CPen* pOldPen = hdc.SelectObject(&pen);

在最后

hdc.SelectObject(pOldPen);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM