2011-07-09 2 views
0

Я написал этот код, чтобы нарисовать простой прямоугольник в диалоговом окне, а также добавил ON_WM_PAINT() к моей карте сообщений. но он ничего не показывал по диалогу со мной! Я очень признателен, если кто-то может сказать, мои ошибки в коде:нарисовать простой прямоугольник в MFC Dialog-based

void Ctest4Dlg::OnPaint() 
{ 
    if (IsIconic()) 
    { 
     CPaintDC dc(this); // device context for painting 
     // TODO: Add your message handler code here 

     SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); 

     // Center icon in client rectangle 
     int cxIcon = GetSystemMetrics(SM_CXICON); 
     int cyIcon = GetSystemMetrics(SM_CYICON); 
     CRect rect; 
     GetClientRect(&rect); 
     int x = 2; 
     int y = 2; 

     // Draw the icon 
     dc.DrawIcon(x, y, m_hIcon); 

     //I want to draw a rectangle 
     dc.Rectangle(10,10,50,50); 
    } 
    else 
    { 
     CDialogEx::OnPaint(); 
    } 
} 

ответ

0

Ваш первый и самая большая ошибка, пытается рисовать непосредственно в диалоговом окне. Хотя это это можно сделать, это почти всегда плохая идея. Диалог обычно следует рассматривать как контейнер для элементов управления.

+0

Полезность диалога основана прежде всего на его способности содержать элементы управления. Однако нет никакой причины, почему это плохая идея рисовать прямо на нем. Если это то, что нужно, какая проблема это вызывает? –

+0

@Jonathon: При рисовании непосредственно в диалоговом окне возникают проблемы с выполнением чертежа. Я тоже не единственный, кто это видел. Например, см. Несколько [сообщений] (http://groups.google.com/group/microsoft.public.vc.mfc/browse_frm/thread/88e61b2d5ae82e0a/ed8fe4997e4878e3?hl=ru#ed8fe4997e4878e3) Джозефа Ньюком на том же предмет. –

+0

Хм ... Я делал это время от времени, и у меня не было никаких проблем. Не похоже, чтобы у Джозефа были какие-то конкретные примеры. Во всяком случае, для более интенсивных ситуаций, связанных с рисованием, я бы поставил его в свое дочернее окно. –

5

Похоже, что ваш код рисования работает только тогда, когда окно является знаковым? Зачем ты это делаешь?

Поместите его в блок else, после звонка до CDialogEx::OnPaint().

Смежные вопросы