我已经将一个图形控件归为一个图形控件,该图形控件将设备上下文句柄HDC作为输入,并将其用于绘图。我的新控制只是以较大图像为中心的原始控制。我希望能够调用原始控件的draw()方法重复使用,但是我不确定如何进行。

这是这个想法:

void CCheckBox::DrawCtrl( HDC hdc, HDC hdcTmp, LPSIZE pCtlSize, BYTE alpha ) {
    // original method draws a checkbox
}

void CBorderedCheckBox::DrawCtrl( HDC hdc, HDC hdcTmp, LPSIZE pCtlSize, BYTE alpha ) {
    // Draw my image here
    // Create new hdc2 and hdcTemp2 which are just some portion of hdc and hdcTemp
    //   For example, hdc2 may just be a rectangle inside of hdc that is 20 pixels 
    //   indented on all sides.
    // Call CCheckBox::DrawCtrl() with hdc2 and hdcTemp2
}
有帮助吗?

解决方案

我认为您可能会对设备上下文感到困惑。设备上下文是您可以绘制的内存中的一个地方,无论是屏幕缓冲区还是位图还是其他。由于我想您只想在屏幕上绘制,因此您只需要一个DC即可。为了完成您想要的目标,我建议将矩形传递给告诉它在哪里绘制的功能。可选地,并且性能较差,您可以为较小的区域创建一个新的位图,并为函数提供位图的DC。现在我想了,这可能是您首先的意思:P好运!

其他提示

虽然不是万无一失,但您可以通过使用的组合将DC伪造为DC的小节 setViewportorgexselectObject 区域剪裁到了相关区域。

这种方法的问题是,如果绘图代码已经使用了这些API,则需要重写以意识到它需要将其掩盖和抵消与现有偏移和剪辑区域相结合。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top