最近遇到一个问题记录下
我现在有com组件中一个Graphics gc对象, 而外部动态库的接口func(HDC hdc,......)函数要求传入 HDC hdc,
我使用了 HDC hdc = gc.GetHDC();
但是忘记了 gc.ReleaseHDC(hdc) 使得屏幕上没有绘制出来图形.
另外听老大说 GetHDC 是得到整个屏幕的DC. func内部实现是将整个dc又转成GDI对象,这样绘制效率不高
于是在外部动态库上又增加一个函数 func(void *pGC...);这样将 gc强转成 (void*)(&gc) void 类型的指针.
com组件中使用的GDI与外部动态库使用的是同一个. 但当对外部动态库中的gdi 做矩阵转换,影响到com组件库中其他使用GDI绘制的地方
Graphics gc(hdc);
GraphicsState oldState = gc.Save();
func(void*)(&gc ....);
gc.Restore(oldState);
Restore 将此Graphics 的状态还原到GraphicsState 表示的状态。
Save 保存此Graphics 的当前状态,并用GraphicsState 标识保存的状态。