Новый интерфейс пользователя
От: Pike  
Дата: 04.05.01 05:13
Оценка:
Хотелось бы узнать как в приложении переделать интерфейс пользователя.
То есть, нарисовать элементы управления (кнопки, поля ввода, списки и т.д.) со своим дизайном,
а не использовать стандартный интерфейс Windows.
Знающие, помогите пожалуйста советом/линком/исходниками.

Заранее благодарен.

Pike, pike@torba.com
Re: Новый интерфейс пользователя
От: Игорь Ткачёв Россия linq2db.com
Дата: 05.05.01 13:41
Оценка:
P>Хотелось бы узнать как в приложении переделать интерфейс пользователя.
P>То есть, нарисовать элементы управления (кнопки, поля ввода, списки и т.д.) со своим дизайном,

Не просто это. Нужно задавать Owner Draw и переписывать всю отрисовку для всех контролов.
Иди на http://www.codeguru.com или http://www.codeproject.com, там куча примеров.
Можно поискать библиотеку для написания кожи (skin), но те с которыми я работал были платными, громоздкими и глючными. Если бы найти что-то типа WinAmp'овской кожи, было бы классно.
Если нам не помогут, то мы тоже никого не пощадим.
Re[2]: Новый интерфейс пользователя
От: Varchev ILYA Nickolaevich  
Дата: 07.05.01 14:43
Оценка:
Здравствуйте Игорь Ткачёв, вы писали:

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 );
}

В примере возможны ошибки, но, думаю, суть понятна.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.