【发布时间】:2015-01-04 12:18:57
【问题描述】:
我正在使用CreateDialog 创建一个对话框。
在对话框过程中,我在WM_PAINT 中绘制了一些文本:
function DialogProc(hDlg: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): BOOL; stdcall;
...
case Msg of
WM_PAINT:
begin
dc := BeginPaint(hDlg, ps);
bkmodePrev := SetBkMode(dc, TRANSPARENT);
hfnt := SendMessage(hDlg, WM_GETFONT, 0, 0);
hfntPrev := SelectObject(dc, hfnt);
DrawTextW(dc, 'Text', -1, R, DT_SINGLELINE or DT_CENTER or DT_VCENTER);
SelectObject(dc, hfntPrev);
// SetBkMode(dc, bkmodePrev); // do I need this?
EndPaint(hDlg, ps);
Result := True;
end;
end;
...
现在的问题是,我是否正确使用字体,也就是说,这是使用SendMessage(hDlg, WM_GETFONT, 0, 0) 获取对话框字体句柄并使用SelectObject(dc, hfntPrev 恢复它的正确方法吗?
我是否需要使用SetBkMode(dc, bkmodePrev); 恢复旧的bkmodePrev BkMode?或者EndPaint 会为我做这件事吗?
P.S:我需要释放 DC 吗?
【问题讨论】: