Круглые элементы управления и окна.
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
-
- Сообщения: 27
- Зарегистрирован: 25 авг 2004, 15:28
- Откуда: Україна, Львів
- Контактная информация:
Как это сделать?! Прочитал что это должна делать функция SetWindowRgn(HRGN). Так и делал. Сначала создал клас окна (new CWnd()) потом создал само окно (CWnd::Create(_T("Button"),...,CRect(0,0,100,100),...)) Потом создал регион (::CreateElipticRgn(0,0,100,100)) а потом уж вызвал SetWindowRgn(). Но кнопка упрямо рисуеться квадратной! !!!HELP!!!
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
1. Попробуй спрятать окно перед тем, как вызвать SetWindowRgn, а потом снова показать.
2. Проверь выполнил ли ты все условия из ремарки к функции (на всякий случай привожу их здесь - взято из MSDN for .NET):
The coordinates of a window's window region are relative to the upper-left corner of the window, not the client area of the window.
After a successful call to SetWindowRgn, the system owns the region specified by the region handle hRgn. The system does not make a copy of the region. Thus, you should not make any further function calls with this region handle. In particular, do not delete this region handle. The system deletes the region handle when it no longer needed.
To obtain the window region of a window, call the GetWindowRgn function.
2. Проверь выполнил ли ты все условия из ремарки к функции (на всякий случай привожу их здесь - взято из MSDN for .NET):
The coordinates of a window's window region are relative to the upper-left corner of the window, not the client area of the window.
After a successful call to SetWindowRgn, the system owns the region specified by the region handle hRgn. The system does not make a copy of the region. Thus, you should not make any further function calls with this region handle. In particular, do not delete this region handle. The system deletes the region handle when it no longer needed.
To obtain the window region of a window, call the GetWindowRgn function.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
-
- Сообщения: 27
- Зарегистрирован: 25 авг 2004, 15:28
- Откуда: Україна, Львів
- Контактная информация:
Весь код:
CWnd* _mw=new CWnd();
HRGN rgn=::CreateEllipticRgn(0,0,100,100);
_mw->Create(_T("Button"),"Round",WS_VISIBLE,CRect(0,0,100,100),this,ID_WND);
_mw->ShowWindow(SW_HIDE);
_mw->SetWindowRgn(rgn,TRUE);
_mw->ShowWindow(SW_SHOW);
CWnd* _mw=new CWnd();
HRGN rgn=::CreateEllipticRgn(0,0,100,100);
_mw->Create(_T("Button"),"Round",WS_VISIBLE,CRect(0,0,100,100),this,ID_WND);
_mw->ShowWindow(SW_HIDE);
_mw->SetWindowRgn(rgn,TRUE);
_mw->ShowWindow(SW_SHOW);
Все, що не робиться - на краще!
Сходи на sources.ru - по-моему там есть готовый пример в разделе элементы управления.