![]() |
![]() |
|
![]() |
||||||||||||||||||||||
![]() |
![]() |
![]() |
||||||||||||||||||||
|
![]() |
|
![]() |
|
||||||||||||||||||
![]() |
![]() |
![]() |
![]() |
|
![]() |
155 - Борьба с однообразием, круглое окно / MFC шаг за шагом / Visual C++ |
![]() |
Шаг 155 - Борьба с однообразием, круглое окноСначала посмотрите как работает. Я просто в шоке. Сначало обычный запуск. Теперь нажмем правую кнопку мыши. При некоторой доли сноровки можно добиться и такого эффекта. Нажмете левую кнопку и окно вернется к начальному виду. Итак, создаем приложение как 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 всегда прямоугольник, а регион может принимать разные формы. Загрузить проект | | | Автор Каев Артем. |