// Временно ограничим перемещения курсора областью формы Form1
[DllImport("user32.dll")]
static extern bool ClipCursor(ref RECT lpRect);
[DllImport("user32.dll")]
public static extern int GetWindowRect(IntPtr hwnd, ref RECT lpRect);
[DllImport("user32.dll", EntryPoint = "GetDesktopWindow")]
public static extern IntPtr GetDesktopWindow();
[StructLayout(LayoutKind.Sequential)]
public struct RECT
{
public int left;
public int top;
public int right;
public int bottom;
}
private void button1_Click(object sender, EventArgs e)
{
RECT rc = new RECT(); // прямоугольник ограничения
GetWindowRect(this.Handle, ref rc); // помещаем координаты окна в прямоугольник
ClipCursor(ref rc); // ограничиваем перемещения курсора
}
private void button2_Click(object sender, EventArgs e)
{
//код для "освобождения" курсора.
RECT rc = new RECT(); // прямоугольник ограничения
IntPtr hWind = GetDesktopWindow(); // получаем описатель рабочего стола
GetWindowRect(hWind, ref rc); // помещаем координаты рабочего стола в прямоугольник
ClipCursor(ref rc); // "ограничиваем" курсор целым экраном
}
воскресенье, 3 апреля 2011 г.
ClipCursor
воскресенье, 13 февраля 2011 г.
Microsoft+Nokia: В одну кучку гоп!

воскресенье, 31 октября 2010 г.
ExtractAssociatedIcon
[C#]
[DllImport("shell32.dll")]
static extern IntPtr ExtractAssociatedIcon(IntPtr hInst, StringBuilder lpIconPath,
out ushort lpiIcon);
или
[DllImport("shell32.dll")]
static extern IntPtr ExtractIcon(IntPtr hInst, string lpszExeFileName, int nIconIndex);
Пример
// Отобразим значок какого-нибудь файла
// Добавим в проект элемент OpenFileDialog, кнопку и PictureBox
openFileDialog1.ShowDialog();
ushort uicon;
StringBuilder strB = new StringBuilder(openFileDialog1.FileName);
IntPtr handle = ExtractAssociatedIcon(this.Handle, strB, out uicon);
Icon ico = Icon.FromHandle(handle);
pictureBox1.Image = ico.ToBitmap();
Запустите проект и выберите любой файл на диске. На форме в PictureBox отобразится значок, который используется для выбранного файла (как это мы видим в Проводники).
Описание функции и ее параметров добавлено в справочник по функциям Windows API для .NET Framework.
К слову сказать, совсем не обязательно использовать неуправлямый код. В .NET Framework есть метод Icon.ExtractAssociatedIcon пространства имен System.Drawing, который делает ту же работу.
Добавьте в проект еще одну кнопку и напишите следующий код:
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
Icon icon = Icon.ExtractAssociatedIcon(openFileDialog1.FileName);
this.Icon = icon;
pictureBox1.Image = icon.ToBitmap();
}
Удачного вам программирования!
суббота, 30 октября 2010 г.
Разлочка эмулятора Windows Phone 7
Скачайте файл и перенесите его в папку %programfiles%\Microsoft SDKs\Windows Phone\v7.0\Emulation\Images\. В этой папке вы найдет образ оригинального эмулятора (файл WM70C1.en-US.bin). Далее переименуйте оригинальный файл эмулятора и сохраните его на всякий случай. Теперь переименуйте ваш скачанный файл, чтобы он имел нужное имя. Запустите какой-нибуль проект на Visual Studio. Ваше приложение запустится в новом эмуляторе.
Закройте свое приложение и просмотрите новый вид разлоченного эмулятора. Небо и земля. Естественно, вы все делаете на свой страх и риск. Я никаких сбоев не заметил, все работает.
Скриншоты
Видео
Пользуйтесь на здоровье.
воскресенье, 12 сентября 2010 г.
Изучайте XAML, WPF и Silverlight
Я сам в свое время очень долго не мог соскочить с Visual Basic 5.0 на Visual Basic 6.0, хотя, казалось, это всего лишь обновление номера версии. Но, я настолько привык к привычному окружению, что просто боялся все поломать. Спустя некоторое время уже сам удивлялся другим коллегам, которые не собирались переходить на VB 6.0, объясняя тем, что VB5.0 гораздо быстрее и занимает меньше места. А изменения не настолько существенны, чтобы обновляться.
Еще большим шоком стало появление .NET Framework со своей новой идеологией и полным отсутствием совместимости со старыми программами. Первые версии фреймворка благополучно пролетели мимо меня. Но Microsoft упорно гнула свою линию и убеждала переходить на новые языки. И я купил на Озоне Visual Basic.NET 2003. Но большу часть времени я все равно программировал на старом добром VB6.0.
В какой-то момент времени я вдруг понял, что пока не поздно, лучше начать изучение .NET Framework на C#. Сейчас я понимаю, что тогда я сделал правильный выбор. И, хотя, Microsoft пытается параллельно поддерживать все языки, большинство материлов в сети базируется именно на C#.
Но, успокаиваться было рано. Неожиданно на горизонте появилась новая технология XAML. Но, к тому времени я очень интенсивно изучал программирование для мобильной платформы Windows Mobile. Поэтому слова XAML, Silverlight, WPF были для меня пустым звуком, так как они не поддерживались мобильными телефонами. К сожалению, это был мой стратегический просчет. Технология XAML окрепла и стала завоевывать сердца разработчиков. Я пытался оттянуть тот момент, когда придется изучать XAML, жизнь внесла свои коррективы.
Когда Microsoft в очередной раз поменяла правила игры и объявила, что следующая платформа Windows Phone 7 будет базироваться на Silverlight, я понял, что мне придется снова переучиваться.
И чем больше я погружаюсь в этот неведомый мир, тем больше он мне нравится. Знаю, что многие программисты находятся в похожем состоянии и еще не приняли решения о переходе на новые технологии. На мой взгляд, на сегодняшний день в сети или в магазинах нет хороших материалов для начинающих, которые бы с самых азов объяснили возможности XAML. Как правило, все учебные материалы уже предполагают базовое знакомство с языком C# и имеют высокий порог вхождения.
Но, на самом деле, язык XAML очень прост и элегантен. Сейчас я попытаюсь очень популярно объяснить, как пишется код на XAML, чтобы даже самые отъявленные новички поняли суть материала.
Если у вас есть опыт работы с HTML, то вам будут понятны основные понятия. По-существу, XAML - это язык разметки, как и HTML. (Обязательно найдется зануда, который скажет, что это язык разметки XML). Код состоит из тегов: начальный, конечный, или укороченный вариант самозакрывающего тега.
Предположим, нам для работы нужна кнопка. Достаточно написать следующее
<Button Foreground="LightSeaGreen" FontSize="24pt" Width="200" Height="50">
Привет, XAML
</Button>
Как видите, все очень просто. Есть тег Button с параметрами цвета, шрифта, размеров. Также обстоят дела и с другими элементами. Нужно только запомнить, что существует самый главный единственный корневой тег (в HTML таким тегом можно считать <html>), внутри которого находятся дочерние элементы. Таким образом выстраивается целое дерево родительских и дочерних элементов.
Обратите внимание, что код XAML можно написать даже в Блокноте и запустить из Проводника. Более подробно я описал этот материал в статье Что такое XAML.
Рекомендую первое время писать код вручную, хотя в Visual Studio 2010 появился свой GUI-редактор, позволяющий визуально размещать элементы, как это делалось в Windows Forms.
Когда вы наберетесь небольшого опыта, вы заметите, что некоторые вещи делать гораздо проще в WPF и Silverlight, которые тесно завязаны на XAML (но это не одно и то же).
Даже, если вам еще не приходилось работать с WPF, все равно прочитайте другую мою статью Закругляем углы и отбрасываем тень. Код настолько простой и понятный, что вы удивитесь, как легко создать различные эффекты отбрасывающей тени или закругления уголков. Причем, возможности XAML гораздо выше. Наверняка, вы слышали, что Silverlight считают конкурентом Flash. Так вот, XAML обладает широким арсеналом анимационных эффектов и других рюшечек.
Просматривая свои старые проекты, написанные традиционным способом на WinForms, я все чаше испытываю соблазн переписать их на WPF. И, хотя я не волшебник, а только учусь, но XAML теперь стоит у меня на первом месте в плане изучения.
Присоединяйтесь!
воскресенье, 6 июня 2010 г.
ShowThumbnailsOnNavigation
Хочу поделиться с вами одним трюком, который был описан в одном блоге MSDN.
В IDE-редакторе Visual Studio 2010 при нажатии Ctrl+Tab вы можете перемещаться между открытыми активными файлами. Менеджер окон выглядит следующим образом.

При помощи небольшого трюка можно добавить в это окно эскизы файлов. Откройте редактор реестра и в разделе HKCU\Software\Microsoft\VisualStudio\10.0\General добавьте параметр DWORD ShowThumbnailsOnNavigation со значением 1. Перезапустите Visual Studio и вы увидите, что теперь появились эскизы.

Интересно отметить, что данные эскизы были доступны в Visual Studio 2008 и Visual Studio 2010beta, но затем эту функциональность убрали.
Примечание: большой сборник настроек реестра Windows вы можете найти в справочнике по реестру Windows.
понедельник, 3 мая 2010 г.
Windows Phone Developer Tools CTP
Я плевался и ругался, потому что так нельзя работать. Все пошло коту под хвост. К счастью, ребята из Microsoft подсуетились и выпустили в свет упомянутый выше пакет разработки под Windows Phone.
В состав пакета входит Visual Studio 2010 Express for Windows Phone и эмулятор. Если у вас уже стояла профессиональная версия VS2010, то у вас также появятся новые шаблоны для проектов под Windows Phone.
Теперь можно более предметно изучать примеры под новую платформу. Несмотря на то, что теперь нет никакой совместимости со старым .NET Compact Framework, я не сильно переживаю по этому поводу. Как известно, теперь требуется программировать под Silverlight и XNA. Давно собирался вплотную заняться изучением этих технологий, но стимула не было. Теперь такой стимул появился.
Сама технология интенсивно развивается, и, наверняка, много к концу года поменяется. Тем не менее можно уже сейчас создавать интересные примеры. Кстати, если вы не боитесь экспериментов, то можете разлочить эмулятор, чтобы увидеть скрытые возможности. Подробнее можете почитать на Хабре (http://habrahabr.ru/blogs/mobiledev/92600/).
А для новичков я собираюсь подготовить учебный курс, который будет располагаться по адресу http://developer.alexanderklimov.ru/winmobile/wp7/wp7-tutorial.php
Не обещаю, что наполнение курса новыми материалами будет идти быстрыми темами, но одну-две статьи в неделю, я надеюсь, разместить смогу.
Присоединяйтесь!