C++ 在连接到CDC的HDC上绘图时出现问题

C++ 在连接到CDC的HDC上绘图时出现问题,c++,mfc,drawing,gdi,C++,Mfc,Drawing,Gdi,我有一个工作应用程序,它有一些自定义绘制的控件,这个应用程序是基于OWL库的,我正在将它移到MFC中,已经做了很多工作,但是自定义绘制是一个真正的问题,应用程序使用了MFCCDC的替代品TDC,我创建了类caled TDC,它继承自CDC,并提供了所需的方法 贸发局的工作方式如下: HDC hdc = GetDC(); TDC dc(hdc);//in this constructor I call the CDC::Attach method to attach the hdc //start

我有一个工作应用程序,它有一些自定义绘制的控件,这个应用程序是基于OWL库的,我正在将它移到MFC中,已经做了很多工作,但是自定义绘制是一个真正的问题,应用程序使用了MFCCDC的替代品TDC,我创建了类caled TDC,它继承自CDC,并提供了所需的方法

贸发局的工作方式如下:

HDC hdc = GetDC();
TDC dc(hdc);//in this constructor I call the CDC::Attach method to attach the hdc
//start drawing....
这会导致在绘制时出现问题,仅定义一个采用hdc的TDC,然后在该hdc上绘制将不会成功,如果我直接绘制到本机hdc而不附加它,则工作正常

HDC hdc = GetDC();
//TDC dc(hdc);//when this line is commented everything is fine but if it is uncommented this will lead to problems
GdiPlus::Graphics gx(hdc);
//start drawing....
这些图片描述了转换前后的问题,左边的图片是我从MFCDC继承TDC后的图片,右边的图片是在OWL上构建的运行良好的图片

这是什么原因造成的?我刚刚将hdc连接到TDC的CDC父级!这真奇怪


此外,当鼠标移动到菜单项上时,它被正确聚焦。

您应该提供更多的代码。您的示例没有显示TDC对象的生命周期。在销毁hDC之前,是否拆下它?请提供构造函数/析构函数和绘图例程(缩短到bug)。当你连接到CDC时,销毁后你会做什么?希望你再次分离DC,否则析构函数会做“坏事”。。。我不认为引入新的TDC类是明智的,因为CDC是CWindowDC和其他类的基类。。。为什么你需要自己的类?@MartinSchlott:TDC只是从CDC继承,将它附加到构造函数上,在销毁时什么也不做,因为我认为CDC析构函数会这样做,我应该分离它吗?如果是,为什么CDC会分离它。@xMRi:正如我对Martin Schlott说的,我在析构函数中什么也没做,请看前面的评论,对于你关于拥有一个新类TDC的问题,答案是我正在转换一个如此混乱和庞大的代码,它大约从1994年开始开发和增长,它有数百万行一个很大的东西,我不能移动它并重写它的图形或GUI类,我的任务是在不涉及任何逻辑的情况下从OWL转换为MFC,它们依赖于OWL的TDC类我删除了OWL,为了解决这个依赖关系,我提供了新的TDC作为软件和CDC之间的接口。@xMRi:TDC与CDC相比没有什么方法,但签名不同,例如TRect而不是CRect,TPoint而不是CPoint,以及通过引用或指针传递。。。。为了解决这个问题,我为我的新类TDC提供了软件所期望的方法,在这些方法中,我在CDC中调用了替代方法。