И вот еще один небольшой пример, демонстрирующий создание окна непрямоугольной формы в 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
Скачать исходник: Создаем окно непрямоугольной формы в Windows Mobile

Previous ArticleNext Article
Технический директор IT-Dimension, компании-разработчика кросс-платформенного программного обеспечения

Leave a Reply

Your email address will not be published. Required fields are marked *

W.

Windows Marketplace for Mobile доступен для WM 6.0 и WM 6.1

Windows Marketplace for MobileКак известно, запущенный ранее Windows Marketplace for Mobile был направлен на работу с Windows Mobile 6.5, но теперь пользователи Windows Mobile 6.0 и 6.1 также смогут пользоваться этим сервисом.

Если у вас смартфон на базе Windows Mobile 6 и выше, то зайдя с него на адрес mp.windowsphone.com вы можете установить небольшой клиент, который позволит вам производить навигацию по магазину.

На данный момент доступно около 800 приложений. Пользователям с русскими аккаунтами доступны только бесплатные приложения.

Для разработчиков, создающих программы для Windows Mobile, подобный шаг Microsoft поможет знач.ительно расширить целевую аудиторию для своих приложений. Надеюсь, в скором времени появится возможность позиционировать платные продукты и для российского рынка.