Как я могу создать кнопки прямоугольника со скругленными углами в WM6? - PullRequest
0 голосов
/ 04 декабря 2008

Да, как те красивые кнопки на iPhone. ;)

Я искал и читал уже несколько дней, и каждый раз, когда я нахожу что-то, что сближает меня (например, CreateRoundRectRgn), оно взрывается, потому что Windows Mobile 6 GDI + не поддерживает его.

Я могу сделать рисование всего владельца и все такое. Но как мне изогнуть эти жесткие углы и изменить форму кнопки? : /

Примечание Доступные инструменты: только для родного Win32 (без MFC)


Эта мысль пришла мне в голову, но оставляет две проблемы:

1) Не будет ли растровое изображение с закругленными краями по-прежнему оставлять углы кнопки видимыми.

2) Растровые изображения отлично подходят для фиксированного размера экрана. Но имея различные разрешения, моя цель - динамически создавать растровое изображение кнопки в памяти во время выполнения и использовать его таким образом.

У меня это работает с квадратными кнопками. Тем не менее, я видел кнопки с закругленными краями, используемые другим программным обеспечением. должен быть способом изменения формы кнопок.

Ответы [ 2 ]

2 голосов
/ 04 декабря 2008

Чтобы получить красивые кнопки, подобные этим, обычно нужно сделать полную нарисованную владельцем кнопку и нарисовать изображение, созданное графическим дизайнером, вместо того, чтобы позволить GDI рисовать элементы управления. Вам просто нужно изображение для «вверх» и изображение для «нажатой». Вы можете вручную нарисовать фокус или использовать еще одно изображение с маской ROP, чтобы нарисовать его и на кнопке. Чтобы получить приятные "округлые" эффекты, вы просто создаете изображение с цветом фона, который затем используете в качестве цвета прозрачности.

Проблема масштабирования тройника несколько уникальна для WinMo, поскольку iPhone действительно имеет только одно разрешение. Если вам нужно настроить таргетинг на устройства WinMo с другим разрешением, вы можете сделать одну из двух вещей (которые вы используете, зависит от используемых вами изображений). Eitehr просто рисует масштабированное изображение или включает в себя версии изображений разных размеров и решает во время выполнения, какое использовать в зависимости от разрешения экрана.

1 голос
/ 30 января 2009

Вы можете использовать функцию RoundRect GDI, чтобы сделать это на элементе управления, нарисованном владельцем.

//Set up a brush and pen
HBRUSH brush = CreateSolidBrush(RGB(255, 0, 0));
HPEN pen = CreatePen(PS_SOLID, 1, RGB(0, 255, 0));

//Select it
HGDIOBJ old_brush = SelectObject(hdc, brush);
HGDIOBJ old_pen = SelectObject(hdc, pen);

//Draw your rectangle
RoundRect(hdc, m_rect.left, m_rect.top, m_rect.right, m_rect.bottom, 10, 10);

//restore the old state of your HDC
SelectObject(hdc, old_brush);
SelectObject(hdc, old_pen);

//Clean up
DeleteObject(brush);
DeleteObject(pen);

Если вы хотите сделать что-то более изворотливое, например заполнить его градиентом, вы можете нарисовать свой градиент в буфере за пределами экрана и использовать CreatePatternBrush для рисования из него.

...