Итак, у меня есть проблема, которая, как я полагаю, была изучена раньше, но я не могу ничего найти на ней. Я создал собственный класс Tab Control, который полностью настраивается и отображает/скрывает объект CDialog, когда пользователь нажимает на разные вкладки. Для этого я перегрузил метод рисования (я не использовал функцию, нарисованную пользователем). Кажется, что все работает нормально, за исключением одной проблемы, проблема заключается в том, что когда пользователь выбирает один из элементов управления в диалоговом окне, который в настоящее время отображается (т.е. CEdit), и нажимает клавишу ввода, tabCtrl получит WMPAINT сообщение, которое заставляет тело tabCtrl рисоваться поверх текущего диалога. Чтобы обойти эту проблему, я изменил метод стереть фон tabCtrl, чтобы отобразить текущий диалог, который фиксирует диалог от окрашивания, но я получаю мерцание в элементе управления каждый раз, когда клавиша ввода нажата или удерживается из-за краски/шоу диалоговое сочетание. Мне было интересно, если кто-то раньше рассматривал эту проблему и имел какое-то решение или какие-то идеи. Я не смог придумать что-нибудь, что сработает. Извините за недостаток кода, у меня нет разрешения владельца поделиться им.Tab Control draw on Enter Key
0
A
ответ
0
Двусторонняя буферизация поможет вам, возможно. Пожалуйста, google it - примеров много. Используйте this article в качестве отправной точки
Благодарим за сужение, но это не проблема с двойной буферизацией. Двойная буферизация обращается к мерцанию, вызванному запаздыванием в лакокрасочном алгоритме, к которому это не имеет никакого отношения. Мерцание происходит из-за того, как нарисованы перекрывающиеся элементы управления. Tabctrl получает сообщение wmpaint каждый раз, когда клавиша ввода нажимает на один из своих дочерних элементов управления, который заставляет его перерисовывать, а перекраска покрывает видимый диалог. – JBode
Похоже, у вас есть прямоугольник управления вкладками размером с страницы внутри него. FYI, нет абсолютно никаких оснований для этого. Элементы управления вкладками в MFC не похожи на элементы на других языках (например, VB или C++ Builder). Это просто элементы управления вкладками. Это означает, что когда их размер должен быть только размером вкладок и не должен включать в себя страницы – cha
У меня есть элемент управления вкладкой, занимающий всю область страниц внутри него. Я никогда не думал об этом. Элемент управления вкладкой рисует границу вокруг области, которую он определяет для страниц, если Im правильно думает, уменьшая ее, вы теряете эту границу? Элемент управления вкладкой также имеет метод поиска pageRect GetTabPageRect(), эта функция будет бесполезной, если элемент управления вкладкой не включает область страницы ... Это интересный способ лечения tabControls, но похоже, что это сработает. Что вы думаете о том, что не заполняете область страницы tabControl так, чтобы она была прозрачной? – JBode