|
Программирование >> Автоматически обновляемые приложения
Листинг 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++);
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |