Шаг 68 - Смена иконы с SetClassLong

Совсем кардинальный способ, который меняет икону связанную с классом окна. Мы вставим этот код в функцию перехвата OnSetIcon():

void CTestDialog::OnSetIcon(WPARAM w, LPARAM i)
{
	SetClassLong(this->m_hWnd , GCL_HICON, i);
}

Вот и все. Можно запускать все будет работать. Даже икона меняться при нажатии на кнопку.

68_1.gif (3791 b)

Только теперь все окна в программе будут с данной иконой.

68_2.gif (3941 b)

Плохо это или хорошо не знаю. Но при желании можно все сделать. При запуске диалога сохранять икону класса.

BOOL CTestDialog::OnInitDialog() 
{
	CDialog::OnInitDialog();
	dwIcon=GetClassLong(this->m_hWnd , GCL_HICON);
......
};

А при закрытии диалога восстанавливать:

void CTestDialog::OnDestroy() 
{
	CDialog::OnDestroy();
	SetClassLong(this->m_hWnd , GCL_HICON, dwIcon);
}

Это легко проверить по окну About. Если в первом случаем после закрытия диалога икона видна.

68_3.gif (7448 b)

То при восстановлении нет.

68_4.gif (6912 b)


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 04.07.2002