меню
От: Spider-111  
Дата: 20.08.04 13:02
Оценка:
Собрался я прорисовать сам всё меню, и столкнулся с такой проблемой:
хочется чтобы меню было как текущее системное, но прорисовки классического
стиля и стиля XP отличаютя, как узнать текущий стиль (HWND окна к которому
принадлежит менюшка у меня нет)
Re: меню
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 20.08.04 13:06
Оценка:
Здравствуйте, Spider-111, Вы писали:

S1>Собрался я прорисовать сам всё меню, и столкнулся с такой проблемой:

S1>хочется чтобы меню было как текущее системное, но прорисовки классического
S1>стиля и стиля XP отличаютя, как узнать текущий стиль (HWND окна к которому
S1>принадлежит менюшка у меня нет)


HTHEME ht = GetWindowTheme(GetDesktopWindow());


?
Re[2]: меню
От: Spider-111  
Дата: 20.08.04 13:10
Оценка:
Здравствуйте, Flamer, Вы писали:

F>Здравствуйте, Spider-111, Вы писали:


S1>>Собрался я прорисовать сам всё меню, и столкнулся с такой проблемой:

S1>>хочется чтобы меню было как текущее системное, но прорисовки классического
S1>>стиля и стиля XP отличаютя, как узнать текущий стиль (HWND окна к которому
S1>>принадлежит менюшка у меня нет)


F>
F>HTHEME ht = GetWindowTheme(GetDesktopWindow());
F>


F>?


Крайне нежелательно использовать GetDesktopWindow(),
есть ли другие способы?
Re[3]: меню
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 20.08.04 13:15
Оценка:
Здравствуйте, Spider-111, Вы писали:

[]

S1>Крайне нежелательно использовать GetDesktopWindow(),


Почему?

S1>есть ли другие способы?


Есть :

1. Попробовать в GetWindowTheme передать NULL и посмотреть, что будет.
2.
HTHEME ht = GetWindowTheme( WindowFromDC( GetDC(NULL) )  );
Re[4]: меню
От: Spider-111  
Дата: 20.08.04 13:32
Оценка:
Здравствуйте, Flamer, Вы писали:

F>Здравствуйте, Spider-111, Вы писали:


F>[]


S1>>Крайне нежелательно использовать GetDesktopWindow(),


F>Почему?


просили обойтись без неё

S1>>есть ли другие способы?


F>Есть :


F>1. Попробовать в GetWindowTheme передать NULL и посмотреть, что будет.

F>2.
F>
F>HTHEME ht = GetWindowTheme( WindowFromDC( GetDC(NULL) )  );
F>


Передать 0 не получается, возникает ошибка
Re[5]: меню
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 20.08.04 13:38
Оценка:
Здравствуйте, Spider-111, Вы писали:
[]
F>>
F>>HTHEME ht = GetWindowTheme( WindowFromDC( GetDC(NULL) )  );
F>>


S1>Передать 0 не получается, возникает ошибка


А второй вариант?
Re[6]: меню
От: Spider-111  
Дата: 20.08.04 13:43
Оценка:
Здравствуйте, Flamer, Вы писали:

F>Здравствуйте, Spider-111, Вы писали:

F>[]
F>>>
F>>>HTHEME ht = GetWindowTheme( WindowFromDC( GetDC(NULL) )  );
F>>>


S1>>Передать 0 не получается, возникает ошибка


F>А второй вариант?


К сожалению тоже ругается
Re[7]: меню
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 20.08.04 13:54
Оценка:
Здравствуйте, Spider-111, Вы писали:

[]

F>>А второй вариант?


S1>К сожалению тоже ругается


Блин, так и будем в молчанку играть? Что говорит GetLastError? Или компилятор ругается? Непонятно нифига из вашего столь "содержательного" ответа. Я хочу помочь, но догадываться, что происходит на вашем компьютере — еще пока не научился...
Re[8]: меню
От: Spider-111  
Дата: 20.08.04 14:03
Оценка:
Здравствуйте, Flamer, Вы писали:

F>Здравствуйте, Spider-111, Вы писали:


F>[]


F>>>А второй вариант?


S1>>К сожалению тоже ругается


F>Блин, так и будем в молчанку играть? Что говорит GetLastError? Или компилятор ругается? Непонятно нифига из вашего столь "содержательного" ответа. Я хочу помочь, но догадываться, что происходит на вашем компьютере — еще пока не научился...


Ругается компилятор
Re[9]: меню
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 20.08.04 14:17
Оценка: 1 (1) :)))
Здравствуйте, Spider-111, Вы писали:

[]

S1>>>К сожалению тоже ругается


F>>Блин, так и будем в молчанку играть? Что говорит GetLastError? Или компилятор ругается? Непонятно нифига из вашего столь "содержательного" ответа. Я хочу помочь, но догадываться, что происходит на вашем компьютере — еще пока не научился...


S1>Ругается компилятор


Фсе блин Кто-то из нас очень немногословен.

Что? Именно! Говорит! Компилятор???


Так понятней? Если нет, то попробую еще раз: приведите пожалуйста тот текст, который компилятор выводит в окошке Output.

Если вы не знаете, что такое окошко Output — посмотрите в нижнюю часть окна своей IDE — обычно это окошко располагается там и содержит всякий непонятный текст в том случае, когда программа не компилируется.

Если вам непонятно значение слова IDE, то поясняю: это типа та прога, при помощи которой можно чиста другую прогу налабать. На С++ там или дельфях.

Если вы спросите, что такое C++, то отвечу, что это очень изящный способ тонкого морального издевательства над программистом, приводящий к появлению в речи подопытного всяких странных слов типа "темплейт", "STL", "буст" и (прости меня господи, мерзость какая) "функтор".

Что же касается странного слова "дельфи", то поясняю, что так называется географическое место в Греции, где в древности в одном храме сидел и учил основам поиска компонент знаменитый Дельфийский оракул.

Я все подробно объяснил?

З.Ы.
Re[10]: меню
От: Spider-111  
Дата: 21.08.04 07:49
Оценка:
Здравствуйте, Flamer,

Ошибка следующего плана:
MzlDLL error LNK2019: unresolved external symbol __imp__GetWindowTheme@4 referenced in function "public: void __thiscall PopupMenu::DrawMem(long)" (?DrawMem@PopupMenu@@QAEXJ@Z)

это когда GetWindowTheme(NULL)

и
MzlDLL error LNK2019: unresolved external symbol __imp__GetWindowTheme@4 referenced in function "public: void __thiscall PopupMenu::DrawMem(long)" (?DrawMem@PopupMenu@@QAEXJ@Z)

когда GetWindowTheme( WindowFromDC( GetDC(NULL) ) );
Re[11]: меню
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 21.08.04 08:01
Оценка:
Здравствуйте, Spider-111, Вы писали:

S1>Ошибка следующего плана:

S1>MzlDLL error LNK2019: unresolved external symbol __imp__GetWindowTheme@4

UxTheme.lib подключена?

если нет, добавь в программу строчку

#pragma comment(lib, "UxTheme.lib")
Re[12]: меню
От: Spider-111  
Дата: 21.08.04 08:58
Оценка:
Здравствуйте, Odi$$ey, Вы писали:

OE>Здравствуйте, Spider-111, Вы писали:


S1>>Ошибка следующего плана:

S1>>MzlDLL error LNK2019: unresolved external symbol __imp__GetWindowTheme@4

OE>UxTheme.lib подключена?


OE>если нет, добавь в программу строчку


OE>
OE>#pragma comment(lib, "UxTheme.lib")
OE>


Если такой код написать, то под Windows XP, например, при запуске проги будет появляться сообщение о том, что нет такой библиотеки, а хотелось бы одинакового действия под все Windows
Re[13]: меню
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 21.08.04 10:30
Оценка:
Здравствуйте, Spider-111, Вы писали:

S1>Если такой код написать, то под Windows XP, например, при запуске проги будет появляться сообщение о том, что нет такой библиотеки, а хотелось бы одинакового действия под все Windows


ты не можешь использовать GetWindowTheme "под все Windows", она появилась только под XP
Re[14]: меню
От: Spider-111  
Дата: 22.08.04 07:35
Оценка:
Здравствуйте, Odi$$ey, Вы писали:

OE>Здравствуйте, Spider-111, Вы писали:


S1>>Если такой код написать, то под Windows XP, например, при запуске проги будет появляться сообщение о том, что нет такой библиотеки, а хотелось бы одинакового действия под все Windows


OE>ты не можешь использовать GetWindowTheme "под все Windows", она появилась только под XP


А что мне тогда использовать, чтобы действовало под все windows и, чтоб я всё-таки мог узнать текущий стиль!
Re[15]: меню
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 25.08.04 11:06
Оценка:
Здравствуйте, Spider-111, Вы писали:

[]

OE>>ты не можешь использовать GetWindowTheme "под все Windows", она появилась только под XP


S1>А что мне тогда использовать, чтобы действовало под все windows и, чтоб я всё-таки мог узнать текущий стиль!


Тогда просто переписываем код для динамической подгрузки функции из dll:

typedef HTHEME (WINAPI *pGetWindowTheme)(HWND hWnd);

pGetWindowTheme pGW = NULL;

HANDLE hThemeLib = LoadLibrary("UxTheme.dll");

if(hThemeLib)
{

pGW  = (pGetWindowTheme) GetProcAddress(hThemeLib,"GetWindowTheme");

    if(pGW)
    {
      HTHEME ht = pGW( WindowFromDC( GetDC(NULL) )  );
    }


FreeLibrary(hThemeLib);
}


Надеюсь, код понятен... И кстати, понятие тем появилось только в WinXP. Выделенная жирным строчка просто не отработает на системах ниже WinXP. Т.е. программа будет нормально работать и под другими осями, но текущую тему под ними вы не получите, т.к. самого понятия темы там нет.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.