Программирование >>  Автоматически обновляемые приложения 

1 ... 154 155 156 [ 157 ] 158 159 160 ... 170


Листинг 17.20. Вызов диалогового окна Смена значка

[Dlllmport( shell32.dll , CharSet = CharSet.Auto, CallingConvention CallingConvention.Winapi)]

private static extern int PicklconDlg(IntPtr hwndOwner, string FileName, int nMaxFile, ref int Ipdwiconlndex);

private void butShowPickDial Click(object sender, EventArgs e) (

Вьшодим диалоговое окно Смена значка

и показываем выбранный значок в PictureBox

Индекс выбираемого значка при открытии диалогового окна int iconindex = 3;

Выводим диалоговое окно

PicklconDlg(this.Handle, filename. О, ref iconindex); IntPtr retval;

Извлекаем значок по индексу

retval = Extracticon(this.Handle, filename, iconindex);

Выводим в заголовке номер индекса (для проверки) this.Text = iconindex.ToStringО;

Выводим значок в рисуночной области

Icon icon = Icon.FromHandle(retval);

Graphics g = pictureBoxl.CreateGraphics();

g.DrawIconUnstretched(icon, new Rectangle(0, 0, 50, 50));

g.Dispose ();

Продолжаем работать со значками

Вы еще не устали? Тогда я расскажу вам еще об одной функции Windows API, а именно о функции SHGetFiieinfo, с помощью которой также можно

Тем самым мы можем предоставить пользователю возможность самому выбирать нужный значок, после чего вывести его на форму (или произвести другие операции). В листинге 17.20 показано, как это может выглядеть в программе.



Листинг 17.21. Вызов функции SHGetFilelnfo

[Dlllmport( shell32.dll )]

public static extern IntPtr SHGetFilelnfo(string pszPath, uint dwFileAttributes, ref SHFILEINFO psfi, uint cbSizeFilelnfo, uint uFlags);

public struct SHFILEINFO {

public IntPtr hicon; public IntPtr ilcon; public uint dwAttributes;

[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)] public string szDisplayName;

[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)] public string szTypeName;

public const uint SHGFI ICON = 0x100; public const uint SHGFI LARGEICON = 0x0; public const uint SHGFI SMALLICON = 0x1;

private void butSHGetFileInfo Click(object sender, EventArgs e) {

int nindex = 0; IntPtr hImgSmall;

string fName = (3 с: \windows\system32\mspaint. exe ; SHFILEINFO shinfo = new SHFILEINFO () ;

listViewl.SmalllmageList = imageListl; listViewl.LargelmageList = imageListl;

Получаем маленькие значки hImgSmall = SHGetFilelnfo(fName, 0,

ref shinfo, (uint)Marshal.SizeOf(shinfo),

SHGFI ICON I SHGFI SMALLICON);

работать со значками, хотя возможности функции этим не ограничиваются. Ее применение для извлечения значка из приложения mspaint.exe показано в листинге 17.21.



Примечание

Примеры работы со значками находится в папке Icons на прилагаемом диске.

Панель задач, кнопка Пуск

и часы в области уведомлений

Очень часто программисты хотят получить доступ к стандартным элементам интерфейса Рабочего стола Windows. Например, разработчики хотят получить координаты панели задач, программно нажать на кнопку Пуск, спрятать и показать эту кнопку Пуск и многое другое. В примере, приведенном в листинге 17.22, я покажу, как это делается.

i Листинг 17.22. Работа с элементами Рабочего стола

using System.Runtime.InteropServices;

[Dlllmport( user32.dll )] private static extern IntPtr FindWindow( string className, string windowName);

[Dlllmport( user32.dll )]

private static extern IntPtr FindWindowEx( IntPtr hwndParent, IntPtr hwndChildAfter, string className, string windowName);

[Dlllmport( user32.dll )]

private static extern bool GetWindowRect(

Полученный значок возвращается как член структуры shinfo Icon mylcon = Icon.FromHandle(shinfo.hicon);

imageLiSt1.Images.Add(myIcon);

добавляем имя файла и значок в listview listViewl.Items.Add(fName, nlndex++);



1 ... 154 155 156 [ 157 ] 158 159 160 ... 170

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика