【发布时间】:2014-12-23 10:21:32
【问题描述】:
我是 C++ 新手,正在学习最好的方法。 我看到了很多关于绘画的有用示例,但我没有看到任何带有智能类的简单疙瘩 getdc。
所以我自己写了一个:
class DCObject
{
public:
DCObject(HWND handle)
{
my_handle = handle;
my_hdc = GetDC(my_handle);
}
HDC GetHDC() {
return my_hdc;
}
~DCObject()
{
ReleaseDC(my_handle, my_hdc);
}
private:
HWND my_handle;
HDC my_hdc;
};
我试图像这样获得 hdc:
HDC mydc = DCObject(dialog_item_handle).GetHDC();
这是正确的吗?要求类方法,首先不创建类对象?在这种情况下,类会发生什么?也许我确实得到了 hdc 并且它立即被释放了?(它可以工作,但它可能会对 hdc 产生未定义的行为?)
也许我应该这样做:
DCObject myhdcobj(dialog_item_handle);
HDC mydc = myhdcobj.GetHDC();
【问题讨论】:
-
你使用 MFC 吗?然后查看 CDC(加上派生)类!
-
哦不,我知道 cdc(只是红色),我没有使用 mfc,还没有学过。现在简单的疙瘩win32。
-
对您的类的一项重要改进:禁用复制(删除和/或将复制构造函数和复制赋值运算符设为私有),并支持移动(定义移动构造函数)。
-
@Cheersandhth.-Alf 我想了解你提供的内容,但我仍然不太确定该怎么做。如果可以的话,举个例子就好了。
-
@Amas:好的,我刚刚发布了一个新答案。