Полагаю, CProcessSteps
происходит от CWnd
, возможно, от CDialog?
Если вы хотите нарисовать в клиентской области производного класса CWnd, вы должны получить DC, используя метод CWnd GetDC
,Я не понимаю, почему вы создаете свой собственный CDC
, вы должны получить CWnd DC в начале SetupInstructions
и использовать этот DC везде, также для создания вашего memDC
.
Также вам следуетбудьте осторожны, когда вы выделяете память (новый CStatic), если вы не вызываете delete для этих переменных, у вас будут утечки памяти.Если вам действительно нужно динамически создавать эти CStatics, вам нужно будет сохранить указатель на все из них, чтобы удалить их, прежде чем закрывать диалоговое окно / представление.
Как и предполагали люди, я не думаю, что вы следуетеправильный путь рисования с использованием OnShowWindow.Вы должны использовать OnPaint, чтобы сделать ваши вещи для рисования, если вы не хотите рисовать изображение, пока окно полностью не инициализировано, вы должны использовать переменную-член окна (например, bool), инициализированную в false в конструкторе, и установить егоистина, когда вы готовы нарисовать изображение.Затем вызов Invalidate нарисует изображение.Что-то вроде:
В .h:
class CProcessSteps : CDialog
{
...
private:
bool m_bReadyToDraw;
};
В .cpp:
CProcessSteps::CProcessSteps() : CDialog()
{
m_bReadyToDraw = false;
}
BOOL CProcessSteps::OnInitDialog()
{
CDialog:OnInitDialog();
m_bReadyToDraw = true;
return TRUE;
}
void CProcessSteps::OnPaint()
{
CPaintDC dc(this);
if(m_bReadyToDraw)
{
CFontUtil cfu;
cfu.SetFont(&LineFont,30);
CDC memDC;
memDC.CreateCompatibleDC(&dc);
...
}
}
Надеюсь, это поможет.
Хавьер