void CPaneSideBar::OnNcPaint()
{
CWindowDC windc(this);
CRect rtWin;
GetWindowRect(&rtWin);
ScreenToClient(&rtWin);
。。。
//draw line
CPen penYellow(PS_SOLID, 1, RGB(229,174,55));
CPen *pOldPen;
pOldPen = (CPen *) windc.SelectObject( &penYellow);
windc.MoveTo(0, 1);
windc.LineTo(rtWin.Width(), 1);
。。。
CString strLog;
strLog.Format(_T("before windc.SelectObject(pOldPen)"));
WriteLogFile(strLog);
windc.SelectObject(pOldPen);
strLog.Format(_T("mid windc.SelectObject(pOldPen)"));
WriteLogFile(strLog);
DeleteObject( penYellow);
strLog.Format(_T("after windc.SelectObject(pOldPen)"));
WriteLogFile(strLog);
}
以前没注意到selectobject(pen)也可以通过编译, 但是在选入oldpen的时候直接报异常,最终已写日志的方式定位到断点出。
原来是selectobject(&pen)。