Mar
13
Как создать фигурное окошко в Windows Mobile

И вот еще один небольшой пример, демонстрирующий создание окна непрямоугольной формы в Windows Mobile с библиотекой wxWinCE.
Для реализации подобной штуки нам, прежде всего, необходима форма со стилем wxFRAME_SHAPED, без этого стиля ничего не получится.
Ну а затем нужно выполнить вот такой финт ушами:
- Создать изображение (черно-белое)
- Создать для него контекст устройства
- Нарисовать что-либо (черные пикселы станут прозрачными, белые – видимыми)
- Создать регион из изображения (wxRegion)
- Указать форме регион для отображения
void wxMobileTransparencyMainFrame::ChangeShape() { int width(0), height(0); // Получаем размер окна GetClientSize(&width, &height); // Создаем изображение wxBitmap bitmap(width, height); // Создаем Device Context для изображения wxMemoryDC mdc(bitmap); // Заполняем черным цветом mdc.SetBackground(*wxBLACK_BRUSH); mdc.Clear(); // Устанавливаем кисть белого цвета mdc.SetPen(*wxWHITE_PEN); wxPoint center(width/2, height/2); int radius = wxMin(width, height)/2; // Рисуем круг в центре mdc.DrawCircle(center, radius); // Устанавливаем кисть черного цвета mdc.SetPen(*wxBLACK_PEN); mdc.SetBrush(*wxBLACK_BRUSH); // Рисуем mdc.DrawCircle(center.x - radius/3, center.y-radius/4, radius/6); mdc.DrawCircle(center.x + radius/3, center.y-radius/4, radius/6); mdc.DrawEllipticArc(center.x-radius/3, center.y+radius/4, 2 * radius / 3, radius/2, 180, 360); // Освобождаем Device Context mdc.SelectObject(wxNullBitmap); // Создаем новый регион m_Region = new wxRegion(bitmap, *wxBLACK); #if defined(__WXWINCE__) // Для wxWinCE метод SetRegion() ничего не делает, просто возвращает false. // Поэтому приходится устанавливать регион вручную HRGN hRgn = (HRGN)m_Region->GetHRGN(); ::SetWindowRgn((HWND)GetHWND(), hRgn, FALSE); #else int offset = GetSize().GetHeight()-GetClientSize().GetHeight(); m_Region->Offset(0, offset); // Устанавливаем регион SetShape(*m_Region); #endif }
Скачать исходник: Создаем окно непрямоугольной формы в Windows Mobile
Еще интересные посты о программировании для мобильных устройств:
No Comments
Make A CommentNo comments yet.
Comments RSS Feed TrackBack URL