Круглые элементы управления и окна.

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Marjan
Сообщения: 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.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Marjan
Сообщения: 27
Зарегистрирован: 25 авг 2004, 15:28
Откуда: Україна, Львів
Контактная информация:

2. Да, да. Я это читал, а 1. попробую!
Все, що не робиться - на краще!
Marjan
Сообщения: 27
Зарегистрирован: 25 авг 2004, 15:28
Откуда: Україна, Львів
Контактная информация:

Попробовал 1.

_mw->ShowWindow(SW_HIDE);
_mw->SetWindowRgn(rgn,TRUE);
_mw->ShowWindow(SW_SHOW);

Ничего не вышло :(
Все, що не робиться - на краще!
Marjan
Сообщения: 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);
Все, що не робиться - на краще!
Marjan
Сообщения: 27
Зарегистрирован: 25 авг 2004, 15:28
Откуда: Україна, Львів
Контактная информация:

this==CView;
Все, що не робиться - на краще!
Kolinus
Сообщения: 449
Зарегистрирован: 23 авг 2004, 14:02
Откуда: Минск

Сходи на sources.ru - по-моему там есть готовый пример в разделе элементы управления.
Ответить