Расположение значка VB6 на окнах - PullRequest
0 голосов
/ 27 июля 2011

Где я могу найти оригинальный значок vb6 (или windows)? (.ico файлы)

Мне нужны значки ошибок, предупреждений, вопросов и информации, которые появляются в окне сообщений.

Большое спасибо.

Ответы [ 2 ]

2 голосов
/ 28 июля 2011

Стандартные значки окна сообщений Windows много раз менялись в разных версиях Windows.Они включены в пару системных файлов DLL, но вы не должны пытаться извлекать их динамически самостоятельно.Как я упоминал в комментарии к другому ответу, идентификационные номера недокументированы по причине: а именно потому, что они могут измениться в будущих версиях Windows или даже в будущих обновлениях Windows.Нет абсолютно никаких оснований пытаться извлечь их, либо.Windows уже получит их для вас, если вы спросите хорошо.

Хороший способ задать вопрос - использовать функцию LoadIcon и указать IDI идентификатор значка, который вы хотите.Windows вернет значение HICON или дескриптор ресурса значков.

Поскольку вы упоминаете, что используете VB.NET, вы также можете использовать SystemIcons класс , который имеет статические свойства, чтобы вернуть любой из общих значков.Это оболочка .NET, которая избавляет вас от необходимости P / Invoke функции LoadIcon из Windows API самостоятельно.

Еще лучше, если вы просто хотите отобразить окно сообщения, содержащее один из значков,все, что вам нужно сделать, это вызвать MessageBox функцию API .Сообщите Windows желаемое значение MB_ICON, и вы отключитесь.Как и прежде, это уже было добавлено для вас .NET Framework в одноименный MessageBox класс .

Преимущество обеих этих функций заключается в том, что они всегда будутверните правильные значки независимо от текущей версии Windows.В комментарии, сделанном при попытке прояснить вопрос, кажется, предлагается использовать значки old в текущей версии Windows.Но, конечно, вы не хотите этого делать.Значки были обновлены во всей оболочке Windows по уважительной причине, и ваше приложение должно ими воспользоваться.Новые значки более четкие и лучше вписываются в общую системную тему.Кроме того, если ваше приложение все еще использует старые значки, оно будет сбивать пользователей с толку и выглядеть очень неуместно. всегда лучше всего следовать стандартным соглашениям о платформе, а не пытаться делать «что-то другое», даже если вы думаете, что «что-то еще» «лучше» по любой причине, чем платформа по умолчанию.Ваши пользователи не согласятся, и ваше приложение будет отражать ваше дрянное мастерство.

Поскольку люди, которые задают этот тип вопроса, неизбежно не соглашаются со мной и настаивают, что они должны сделать это в любом случае, и чтоэто «требование» (что бы это ни значило), я укажу, что старые значки недоступны в более новых версиях Windows .Значки были полностью заменены по всей системе.Лицензионными соглашениями также строго запрещено извлекать значки из системных файлов DLL и распространять их вместе с вашим приложением.Не делайте этого.

Кроме того, прежде чем выбрать , какой значок вы должны отобразить в окне сообщений, обязательно ознакомьтесь с Руководством Microsoft по взаимодействию с пользователем, которое предоставляет некоторые очень удобные правила.при выборе правильного значка, чтобы передать правильное сообщение и соответствовать тону Windows.Более подробную информацию об этом можно найти в моем ответе здесь ;очень рекомендую к прочтению для любого разработчика приложений Windows.

Редактировать: Это все равно что тянуть зубы, чтобы получить более подробную информацию по этому вопросу.Я не уверен, почему вы так скрытны в том, что вы пытаетесь достичь, но учтите, что в будущем вам повезет больше, если вы начнете с этих вещей, а не надеетесь, что людивытащить это из себя.Большинство людей не так настойчивы, как я.

В любом случае, вы наконец-то упомянули, что вы делаете какое-то взаимодействие между кодом VB 6 и кодом .NET.Это не должно относиться к используемым значкам окна сообщений.Функция VB 6 MsgBox на 100% эквивалентна функции Win32 API MessageBox и классу .NET MessageBox, который я обсуждал ранее.Все они будут использовать текущие системные значки, и для того, чтобы они выглядели одинаково, не требуется никакой дополнительной работы.Убедитесь, что вы передали один и тот же спецификатор значка для всех функций.Вот таблица для удобства:

VB 6 "MsgBox" Icon Constant | VB.NET "MessageBox" Icon Identifier
---------------------------------------------------------------------------------
vbCritical                  | MessageBoxIcon.Error                
vbQuestion                  | MessageBoxIcon.Question  (DEPRECATED -- do not use)
vbExclamation               | MessageBoxIcon.Warning
vbInformation               | MessageBoxIcon.Information

Обратите внимание, что с тех пор значок стиля "Вопрос" устарел, и вам не следует использовать это значение .Если вы все еще используете его в коде VB 6, вы должны изменить этот код, чтобы использовать другой значок (или вообще без значка).В приведенных выше Руководствах по взаимодействию с пользователем в Windows содержится более подробная информация о том, почему этот значок устарел и как выбрать подходящую замену.

2 голосов
/ 27 июля 2011

Поскольку значки могут отличаться для каждой версии ОС, значки из Windows можно получить с помощью LoadIcon (), передав один из стандартных идентификаторов значков.
Подробнее см. http://msdn.microsoft.com/en-us/library/ms648072.aspx.
Если вы хотите, чтобы они были .ico-файлами, вы можете извлечь их (на компьютере разработчика) из user32.dll с помощью редактора ресурсов.

(Обновлено с исправленной информацией от Коди Грей)

...