Совсем кардинальный способ, который меняет икону связанную с классом окна. Мы вставим этот код в функцию перехвата OnSetIcon():
void CTestDialog::OnSetIcon(WPARAM w, LPARAM i) { SetClassLong(this->m_hWnd , GCL_HICON, i); }
Вот и все. Можно запускать все будет работать. Даже икона меняться при нажатии на кнопку.
Только теперь все окна в программе будут с данной иконой.
Плохо это или хорошо не знаю. Но при желании можно все сделать. При запуске диалога сохранять икону класса.
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. Если в первом случаем после закрытия диалога икона видна.
То при восстановлении нет.