保存和恢复 Canvas->Penn State
Saving and restoring Canvas->Pen State
我正在尝试保存 Canvas->Pen 的当前状态然后恢复它,但它不起作用并且所有 GDI 函数在恢复后都使用新的笔
TPen * OldPen, * newpen;
OldPen = Canvas->Pen;
newpen = new TPen;
newpen->Color = clPurple;
newpen->Width = 2;
Canvas->Pen = newpen;
// draw with the new pen...
Canvas->Pen = OldPen;
delete newpen;
Oldpen 从未恢复,为什么?
你实际上并没有保存和恢复任何东西。
您只是将 指针 保存到 Canvas
拥有的内部 TPen
对象。当您随后将新的 TPen
对象分配给 Canvas->Pen
属性 时,您根本没有交换对象,您只是从 newpen
复制 属性 值] 对象到 Canvas->Pen
对象 - oldpen
指向的同一对象。当您随后尝试 "restore" oldpen
时,您只是将 属性 值从原始(修改后的)TPen
复制回自身,这是一个空操作。
要执行您正在尝试的操作,您需要复制 Canvas->Pen
对象,然后将其复制回来,如下所示:
TPen *OldPen = new TPen;
OldPen->Assign(Canvas->Pen);
Canvas->Pen->Color = clPurple;
Canvas->Pen->Width = 2;
// draw with the new pen...
Canvas->Pen->Assign(OldPen);
delete OldPen;
或者,使用 GDI 自己的内置 save + restore functionality 代替:
int oldstate = ::SaveDC(Canvas->Handle);
Canvas->Pen->Color = clPurple;
Canvas->Pen->Width = 2;
// draw with the new pen...
::RestoreDC(Canvas->Handle, oldstate);
我正在尝试保存 Canvas->Pen 的当前状态然后恢复它,但它不起作用并且所有 GDI 函数在恢复后都使用新的笔
TPen * OldPen, * newpen;
OldPen = Canvas->Pen;
newpen = new TPen;
newpen->Color = clPurple;
newpen->Width = 2;
Canvas->Pen = newpen;
// draw with the new pen...
Canvas->Pen = OldPen;
delete newpen;
Oldpen 从未恢复,为什么?
你实际上并没有保存和恢复任何东西。
您只是将 指针 保存到 Canvas
拥有的内部 TPen
对象。当您随后将新的 TPen
对象分配给 Canvas->Pen
属性 时,您根本没有交换对象,您只是从 newpen
复制 属性 值] 对象到 Canvas->Pen
对象 - oldpen
指向的同一对象。当您随后尝试 "restore" oldpen
时,您只是将 属性 值从原始(修改后的)TPen
复制回自身,这是一个空操作。
要执行您正在尝试的操作,您需要复制 Canvas->Pen
对象,然后将其复制回来,如下所示:
TPen *OldPen = new TPen;
OldPen->Assign(Canvas->Pen);
Canvas->Pen->Color = clPurple;
Canvas->Pen->Width = 2;
// draw with the new pen...
Canvas->Pen->Assign(OldPen);
delete OldPen;
或者,使用 GDI 自己的内置 save + restore functionality 代替:
int oldstate = ::SaveDC(Canvas->Handle);
Canvas->Pen->Color = clPurple;
Canvas->Pen->Width = 2;
// draw with the new pen...
::RestoreDC(Canvas->Handle, oldstate);