Создал своё класс окошка на котором создаю COM врапер (визуальный компонент) сам компонент перерисовывается, а вот фон моего окошка нет, не знаю как с этим бороться, но наверное есть какой то совсем простой способ
Создание компонента:
CMyWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CWnd::OnCreate(lpCreateStruct) == -1)
return -1;
AfxEnableControlContainer();
m_mapCtrl.Create( NULL, NULL, WS_CHILD|WS_OVERLAPPED|WS_VISIBLE, CRect( 0,0, 0, 0), this, 0 );
return 0;
}
Создание окошка:
BOOL CMyWnd::CreateMap( CWnd* pWnd, const CRect& rect)
{
return this->CreateEx( NULL, NULL, " ", WS_POPUP | WS_CHILD | WS_BORDER | WS_THICKFRAME | WS_VISIBLE, rect, pWnd, 0);
}
А теперь как я пытаюсь закрашивать фон:
void CMyWnd::OnPaint()
{
CBrush backBrush(RGB(0, 128, 128));
CRect rect;
GetUpdateRect( &rect, true );
CPaintDC dc(this);
dc.FillRect( &rect, &backBrush );
}
Фон то так закрашивается, но есть одна проблема: если необходимо часто очищать фон (у меня прописана процедура ресайзинга окна с изменением размера компонента) то видно мерцание.... я пытался сделать через Rng но тут вообще ничего не получается, т.к. GetUpdateRng выдаёт ERROR_RNG...
ну конечно можно вычислять фрагмент который занимает компонент и его вычитать, но это тупо и если компонентов много вообще плохо
плиз, если кто знает, подскажите как сделать грамотную перерисовку фона
Здравствуйте, Brun, Вы писали:
B>Фон то так закрашивается, но есть одна проблема: если необходимо часто очищать фон (у меня прописана процедура ресайзинга окна с изменением размера компонента) то видно мерцание
BEGIN_MESSAGE_MAP(CMyWnd, CWnd)
ON_WM_ERASEBKGND(OnEraseBkgnd)
END_MESSAGE_MAP()
BOOL CMyWnd::OnEraseBkgnd(CDC* pDC) {
return TRUE;
}
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
It is always bad to give advices, but you will be never forgiven for a good one.
Oscar Wilde
Здравствуйте, Master Yoda, Вы писали:
MY>Здравствуйте, Brun, Вы писали:
B>>Фон то так закрашивается, но есть одна проблема: если необходимо часто очищать фон (у меня прописана процедура ресайзинга окна с изменением размера компонента) то видно мерцание
MY>MY>BEGIN_MESSAGE_MAP(CMyWnd, CWnd)
MY> ON_WM_ERASEBKGND(OnEraseBkgnd)
MY>END_MESSAGE_MAP()
MY>BOOL CMyWnd::OnEraseBkgnd(CDC* pDC) {
MY> return TRUE;
MY>}
MY>
неа, не катит, всё то же, окно не закрашивается...
Здравствуйте, Brun, Вы писали:
B>Фон то так закрашивается, но есть одна проблема: если необходимо часто очищать фон (у меня прописана процедура ресайзинга окна с изменением размера компонента) то видно мерцание.... я пытался сделать через Rng но тут вообще ничего не получается, т.к. GetUpdateRng выдаёт ERROR_RNG...
flicker free drawing In MFC[ posted via RSDN@Home 1.1.4 stable SR1 r568, accompanied by silence ]
Здравствуйте, Brun, Вы писали:
B>мне не нужно эфективно буферизовать и рисовать на CWnd мне просто нужен простой способ закрасить его не трогая территорию своих компонентов так как делает финда и например класс CDialog
В диалогах обычно используют стиль WS_CLIPCHILDREN:
Excludes the area occupied by child windows when you draw within the parent window. Used when you create the parent window.
[ posted via RSDN@Home 1.1.4 stable SR1 r568, accompanied by silence ]