Sun*_*nue 0 c++ mfc gdi windows-ce
我在 MFC (Visual Studio 2013) 中为 WinCE 2013 开发了一个简单的程序,使用 GDI 方法在设备上下文上绘图。不幸的是,当我尝试在上下文设备句柄上调用 SelectObject 时,我收到错误:“错误 C2248:‘CObject::CObject’:无法访问在类‘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;
}
Run Code Online (Sandbox Code Playgroud)
我试着用谷歌搜索这个错误,但我找不到可以帮助我的东西。
你的 SelectObject() 代码对我来说看起来不错。但是,按值传递 CDC 是一个很大的错误。您应该通过引用传递它或将指针传递给 CDC。我希望可能会在参数 CDC hDC 尝试复制时看到错误。CObject 的复制构造函数和赋值运算符被声明为私有且未实现。你不能复制它们。相反,将函数的签名更改为:
BOOL Druk::DrawGrid(CDC& hDC,int start_x, int start_y, int limit_x, int limit_y, int width)
{
// your code
}
Run Code Online (Sandbox Code Playgroud)
您还有一些其他问题……您需要保存最初选择的笔,然后最后将其选回CDC……
CPen* pOldPen = hdc.SelectObject(&pen);
Run Code Online (Sandbox Code Playgroud)
在末尾
hdc.SelectObject(pOldPen);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
62 次 |
| 最近记录: |