Хотелось бы узнать как в приложении переделать интерфейс пользователя.
То есть, нарисовать элементы управления (кнопки, поля ввода, списки и т.д.) со своим дизайном,
а не использовать стандартный интерфейс Windows.
Знающие, помогите пожалуйста советом/линком/исходниками.
Заранее благодарен.
Pike, pike@torba.com
P>Хотелось бы узнать как в приложении переделать интерфейс пользователя.
P>То есть, нарисовать элементы управления (кнопки, поля ввода, списки и т.д.) со своим дизайном,
Не просто это. Нужно задавать Owner Draw и переписывать всю отрисовку для всех контролов.
Иди на
http://www.codeguru.com или
http://www.codeproject.com, там куча примеров.
Можно поискать библиотеку для написания кожи (skin), но те с которыми я работал были платными, громоздкими и глючными. Если бы найти что-то типа WinAmp'овской кожи, было бы классно.
Здравствуйте Игорь Ткачёв, вы писали:
P>>Хотелось бы узнать как в приложении переделать интерфейс пользователя.
P>>То есть, нарисовать элементы управления (кнопки, поля ввода, списки и т.д.) со своим дизайном,
ИТ>Не просто это. Нужно задавать Owner Draw и переписывать всю отрисовку для всех контролов.
ИТ>Иди на http://www.codeguru.com или http://www.codeproject.com, там куча примеров.
ИТ>Можно поискать библиотеку для написания кожи (skin), но те с которыми я работал были платными, громоздкими и глючными. Если бы найти что-то типа WinAmp'овской кожи, было бы классно.
Можно и по-другому — при запуске приложения установить свою собственную процедуру обработки сообщений для целого оконного класса. Этот метод называется Global SubClassing. Вот пример:
WNDPROC g_oldProc = NULL;
LRESULT CALLBACK ButtonWndProc(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
)
{
switch( uMsg )
{
case WM_PAINT:
.....
return 0;
}
return CallWindowProc( g_oldProc, hwnd, uMsg, wParam, lParam );
}
void f()
{
CButton btn; btn.Create(...);
g_oldProc = ( WNDPROC ) SetClassLong( btn.GetSafeHwnd(),
GCL_WNDPROC,
(LONG) ButtonWndProc );
}
В примере возможны ошибки, но, думаю, суть понятна.