Определить минимизацию диалога из элемента управления

Есть ли способ определить минимизацию диалога из элемента управления, который находится в диалоге?

Я использую сообщение окна ON_WM_SIZE который должен быть вызван с типом SIZE_MINIMIZED когда диалог свернут.

BEGIN_MESSAGE_MAP(CEditT, CEdit)
ON_WM_SIZE()
END_MESSAGE_MAP()

void CEditT::OnSize(UINT nType, int cx, int cy)
{
CEdit::OnSize(nType, cx, cy);
switch(nType)
{
case SIZE_MINIMIZED:
m_backgroundRedraw = TRUE;
}
}

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

0

Решение

Сначала найдите родительский диалог в вашем контроле, используя

CWnd *parent = GetParent();
HWND hWnd = parent->GetSafeHwnd();  // get its window handle
BOOL dlgMinimized = IsMinimized(hWnd);   // get min. state

API документируется как:

BOOL WINAPI IsIconic(
_In_  HWND hWnd
);

Ссылка Вот.

IsMinimized — это макрос, определенный в windowsx.h и соответствующий IsIconic, как это описано в Microsoft.

Я бы предложил другой метод. Перехватите тип SIZE_MAXIMIZED nType в вашем методе Dialog OnSize () и сохраните это состояние в переменной-члене. Затем вы можете проверить это у детей, настроив обработчик сообщений WM_USER + XXX в диалоговом окне, чтобы ответить текущим значением.

На этом этапе вам нужно отправить SendMessage (WM_USER + XXX, …) из части кода вашего дочернего элемента управления, которая фактически вызывается, чтобы он мог выполнить какую-то задачу. Чтобы увидеть, какие сообщения отправляются в / из ребенка, я бы проверил с помощью spy ++.

0

Другие решения

Это не должно быть так сложно. Вы должны перехватить сообщение WM_SYSCOMMAND на уровне диалога. Это сообщение обрабатывает минимизацию событий. Затем просто вызовите открытый метод элемента управления в ответ на это событие.

0

По вопросам рекламы [email protected]