Сначала посмотрите как работает. Я просто в шоке. Сначало обычный запуск.
Теперь нажмем правую кнопку мыши.
При некоторой доли сноровки можно добиться и такого эффекта.
Нажмете левую кнопку и окно вернется к начальному виду.
Итак, создаем приложение как MFC AppWizard. Пусть оно будет SDI и имя у него будет tt. В классе приложения заведем переменную типа регион.
class CTtApp : public CWinApp { public: HRGN rgn; CTtApp(); ........ };
И сохраним регион окна при инициализации окна.
//////////////////////////////////// // CTtApp initialization BOOL CTtApp::InitInstance() { ....... GetWindowRgn(m_pMainWnd->m_hWnd,rgn); return TRUE; }
Вот теперь окно можно будет востановить. Код при нажатии на правую кнопку мыши.
void CTtView::OnRButtonDown(UINT nFlags, CPoint point) { AfxGetApp()->m_pMainWnd->SetWindowRgn( CreateEllipticRgn(40, 40, 300, 200),true); CView::OnRButtonDown(nFlags, point); }
И левую при востановлении.
void CTtView::OnLButtonDown(UINT nFlags, CPoint point) { CTtApp* tt=(CTtApp*)AfxGetApp(); AfxGetApp()->m_pMainWnd->SetWindowRgn(tt->rgn,true); CView::OnLButtonDown(nFlags, point); }
Вот и всё. Смотрите на код. Основой этого года является понятие регион. Это давайте договоримся что это область окна. Её можно получить использовав функцию GetWindowRgn. И поменять SetWindowRgn помня, что все эти функции находятся в классе CWinApp. Регионы бывают разные. Например, эллипсоидные. Вот такой регион мы и делаем. Чем же регион отличается от класса CRect. Только тем, что CRect всегда прямоугольник, а регион может принимать разные формы.