powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / MFC: Мигание при ресайзе
4 сообщений из 4, страница 1 из 1
MFC: Мигание при ресайзе
    #34047910
_traveller_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Помогите избавится от мигания диалога при ресайзе.

Делаю:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
class CSampleView: public CView
{
   ...
   CSampleDialog m_Dlg;
   ...
}

void CSampleView::OnInitialUpdate()
{
	CView::OnInitialUpdate();
		m_TabDlg.Create(IDD_DIALOG1, this);
	m_Dlg.ShowWindow(SW_SHOW);

	CRect rect;
	this->GetClientRect(&rect);
	m_Dlg.MoveWindow(&rect);
}

void CDialogView::OnSize(UINT nType, int cx, int cy)
{
	CView::OnSize(nType, cx, cy);

	if (IsWindow(m_Dlg))
		m_Dlg.MoveWindow( 0 ,  0 , cx, cy);

}

На диалоге лежит CTabCtrl, который ресайзится вместе с диалогом:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
void CSampleDlg::OnSize(UINT nType, int cx, int cy)
{
	CDialog::OnSize(nType, cx, cy);

	if (IsWindow(m_Tabs))
	{
		m_Tabs.MoveWindow( 4 ,  4 , cx- 8 , cy- 8 );

		CRect rect;
		m_Tabs.GetClientRect(&rect);

		m_Page1->MoveWindow( 10 ,  30 , rect.Width()- 20 , rect.Height()- 40 ); 
		m_Page2->MoveWindow( 10 ,  30 , rect.Width()- 20 , rect.Height()- 40 );
	}
}

как избавится от мигания? помогите.
Пытался сбросить соотв. стили, но помоему при создании диалога ф-ция
preCreateWindow не вызывается.

Код: plaintext
1.
2.
3.
4.
5.
BOOL CDlgTab::PreCreateWindow(CREATESTRUCT& cs)
{
	cs.style &= ~CS_HREDRAW;
	cs.style &= ~CS_VREDRAW;
	return CDialog::PreCreateWindow(cs);
}

Буду рад любым советам!
...
Рейтинг: 0 / 0
MFC: Мигание при ресайзе
    #34048055
Фотография Makar4ik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть ли у класса свойство типа "DoubleBuffered"?

Если нет, то лечится так:
Создается в памяти битмап, и весь диалог рисуется в него.
А потом блитается на экран.

тынц
...
Рейтинг: 0 / 0
MFC: Мигание при ресайзе
    #34048082
_traveller_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, я так и предполагал.. спасибо. А можно пример для unmanaged?
...
Рейтинг: 0 / 0
MFC: Мигание при ресайзе
    #34048470
Фотография Makar4ik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_traveller_Да, я так и предполагал.. спасибо. А можно пример для unmanaged?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam){
......
  switch (message)
  {
    case WM_PAINT:
      RECT rt;
      GetClientRect(hWnd, &rect);	
      hdc = GetDC( 0 );
      MemBitmap = CreateCompatibleBitmap(hdc, rect.right-rect.left, rect.bottom-rect.top);
      ReleaseDC( 0 , hdc);
      memDC := CreateCompatibleDC( 0 );
      OldBitmap := SelectObject(memDC , MemBitmap);
      hdc = BeginPaint(hWnd, &ps);
      //PAINT HERE to MemDC
      BitBlt(hdc ,  0 ,  0 , rect.right-rect.left, .bottom-rect.top, MemDC,  0 ,  0 , SRCCOPY);
      EndPaint(hWnd, &ps);
      SelectObject(memDC, OldBitmap);
      DeleteDC(memDC);
      DeleteObject(MemBitmap);
      break;
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / MFC: Мигание при ресайзе
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]