эффективное перекрытие диалоговых окон в Visual C ++ 6 - PullRequest
0 голосов
/ 20 апреля 2011

Здравствуйте! У меня проблема с перекрытием дочерних окон. Я создал программное обеспечение с интерфейсом, управляемым через меню (IDR_MAINFRAME - CFormView

и т. Д.) И при нажатии на один из пунктов меню появляется другое дочернее окно (на основе диалогового окна), где я выполняю вычисления как обычно

калькулятор. Теперь, если я открою любую другую запись, скажем, преобразование метрик, которое также есть в пункте меню, то при перекрытии с любой другой такой

Окно фонового окна ужасно искажается, и если я случайно перемещаюсь по калькулятору или калькулятору преобразования метрик

они изуродованы, и это беспорядок. Также я поместил растровое изображение на фон. При перемещении калькулятора фоновое изображение также стирается.

Пожалуйста, дайте мне знать, как справиться с этой проблемой. Я нашел в Google и обнаружил, что обработка сообщений рисования или WM_ERASEBKGND помогает ... но я

попробовал этот кусок кода, который просто не помогает в OnEraseBkGnd ();

BOOL COfficesoftDlg::OnEraseBkgnd(CDC* pDC) 
{
    // TODO: Add your message handler code here and/or call default
    CRect Rect;
    GetClientRect(Rect);
    //ClientToScreen(&Rect);
    //this->ScreenToClient(&Rect);
    this->InvalidateRect(Rect);
    return CDialog::OnEraseBkgnd(pDC);
}

как мне добиться плавного перекрытия различных окон, таких как блокнот, перекрывающий текстовый документ, или даже калькулятор, или даже VC6

IDE в моем проекте. Пожалуйста, объясните это на примере. Я только новичок, и мне нужно понять в деталях ... спасибо и всего наилучшего

1 Ответ

0 голосов
/ 14 июня 2011
  1. Переопределите OnEraseBkgnd и верните true, чтобы он прекратил стирать фон, который вы рисуете.Возвращение TRUE говорит о том, что вы сделали работу.Если вы просто вызовите реализацию базового класса, он сделает это за вас, и вы потеряете фон, пока у него не появится возможность рисовать.
  2. Вы не получаете сообщения рисования в родительское окно длянекоторая причина.Убедитесь, что вы вызываете модал в правильной манере.DoModal () работает нормально.Убедитесь, что вы не просто создаете модал и показываете его.
  3. Если ваши окна являются дочерними в одном и том же диалоговом окне, они перекрываются или у вас есть дочерние элементы в одном диалоговом окне, убедитесь, что вы используете clipchildrenи clipsiblings (если дети на окне перекрываются).В противном случае они смогут рисовать в любом порядке, выбирая артефакты повсюду.
  4. Убедитесь, что вы рисуете в память и возвращаете битблеты в свой диалог, иначе вы получите мигающий эффект.
...