Вопрос + ответ = Совет

Windows Phone

Как закрепить приложение в эмуляторе?

Чтобы закрепить приложение на главной странице Start, найдите значок вашей программы в эмуляторе и через контекстное меню выберите команду pin to start

Как определить разрешение используемого устройства?

Воспользуйтесь свойствами ActualHeight и ActualWidth


double h = (App.Current.RootVisual as FrameworkElement).ActualHeight;
double w = (App.Current.RootVisual as FrameworkElement).ActualWidth;

textBox1.Text = h.ToString() + "x" + w.ToString();

Как подключить камеру в эмуляторе?

В эмуляторе камера не поддерживается.

Поддерживается ли формат BMP?

Нет, BMP не поддерживается. Используйте форматы JPG и PNG.

Как узнать, где запущена программа - на эмуляторе или на устройстве?

Воспользуйтесь перечислением DeviceType


textBox1.Text = System.Environment.DeviceType.ToString(); // возвращает Emulator, Device, Unknown

Windows Mobile

Определение разрешения экрана на WM устройствах

При разработке приложений необходимо обращать внимание на разрешение экрана устройств. В большинстве случаев, используются разрешения VGA (480x640) и QVGA (240x320). Если в свойстве AutoScaleMode вашей формы установленно значение Dpi, то элементы управления TextBox, Label, кнопки и т.д. будут масштабироваться автоматически. А вот с изображениями ситуация другая - они не будут масштабироваться. Для определения разрешения экрана устройства можете использовать следуший код:

	
public static bool IsHighResolution(this Form form)
{
    SizeF currentScreen = form.CurrentAutoScaleDimensions;

    if (currentScreen.Height == 192)
    {
        return true;
    }

    return false;
}
    

Использовать данный метод можно сделать следующим образом:


private void HandleHiRes()
{
    if (this.IsHighResolution())
    {
        this.imageList1.ImageSize = new Size(32 * 2, 32 * 2);
    }
}	

Источник: http://blogs.msdn.com/priozersk/archive/2009/05/04/identifying-vga-resolution-on-wm-devices.aspx

Как получить и изменить имя устройства

Получить имя устройства очень легко можно через метод GetHostName:


using System.Net;

MessageBox.Show(Dns.GetHostName(), "Current Device Name");

Кстати, имя устройства отображается в окне ActiveSync при синхронизации. Windows Mobile хранит имя устройства в реестре в параметре Name раздела HKEY_LOCAL_MACHINE\Ident\Name. Поэтому не составит никакого труда изменить имя устройства программно через методы класса Microsoft.Win32.Registry. Напишем простую функцию-обертку для этой задачи:


//  Устанавливаем новое имя для устройства
void SetDeviceName(string deviceName)
{            
    using (RegistryKey key = Registry.LocalMachine.OpenSubKey("Ident", true))
    {
        key.SetValue("Name", deviceName);
    }
}

Методы Sinh, Cosh, Tanh

В составе класса System.Math есть методы Sinh, Cosh и Tanh, которые возвращают гиперболические синус, косинус и тангенс соответственно. Если вы посмотрите в справочной системе, то увидите, что данные методы поддерживаются, начиная с CF 1.0. Но на самом деле при использовании этих методов мы получаем ошибку NotSupportedException. К счастью, не все так страшно. Эти методы легко создать самостоятельно.


double angle = 1.2;

// sinh(double angle): (e^x - e^-x) / 2
double res = (Math.Exp(angle) - Math.Exp(-angle)) / 2.0;

// cosh(double angle): (e^x + e^-x) / 2
res = (Math.Exp(angle) + Math.Exp(-angle)) / 2.0;

// tanh(double angle): sinh / cosh
res = (Math.Exp(angle) - Math.Exp(-angle)) /    (Math.Exp(angle) + Math.Exp(-angle));

Приложения

Как создать полноэкранную форму?

Во-первых, установите свойство WindowState в Maximized. Далее установите свойство FormBorderStyle в None, отключите ControlBox и удалите меню.


this.WindowState = FormWindowState.Maximized;
this.FormBorderStyle = FormBorderStyle.None;
this.ControlBox = false;
this.Menu = null;

Как отцентрировать форму на экране

Если вы используете форму, которая не заполняет весь экран устройства (FormBorderStyle = FormBorderStyle.None), то для ее вывода по центру используйте следующий код в событии Load:


Rectangle screen = Screen.PrimaryScreen.Bounds;

this.Location = new Point((screen.Width - this.Width) / 2, (screen.Height - this.Height ) / 2);

Как получить полный путь к запущенному приложению?

Чтобы получить путь к запущенному приложению, нужно воспользоваться отражением (Reflection). Также не составить труда получить и имя папки, из которой запускается приложение.


using System.Reflection;
using System.IO;

// получим полный путь к запущенному приложению, включая сам исполняемый файл
string fullAppName = Assembly.GetExecutingAssembly().GetName().CodeBase;

// получим полное имя папки, отсекая имя исполняемого файла
string fullAppPath = Path.GetDirectoryName(fullAppName);

// добавляем имя файла, который находится в одной папке с исполняемым файлом
string fullFileName = Path.Combine(fullAppPath, "myfile.txt");

Как извлечь значок любого приложения

Для извлечения значков из программы воспользуйтесь функцией Windows API ExtractIconEx. Описание данной функции есть в моем справочнике Справочник по функциям Windows API для .NET Framework

Как измерить время выполнения кода в приложении

Существует несколько способов для решения этой задачи. Каждый способ имеет различную степень точности. Наименьшую точность имеет способ измерения при помощи свойства Environment.TickCount. Более высокую степень точности можно получить при помощи вызова функции Windows API QueryPerformanceCounter. Эти и другие способы измерения времени выполнения кода в приложении описаны в книге C#.Советы программистам

Запустить апплеты Панели управления

На устройствах Windows Mobile как и в обычных версиях Windows есть апплеты Панели управления, которая носит название Настройка и доступна через команды Пуск | Настройка. Для запуска различных апплетов из Настроек система использует программу ctlpnl.exe с различными параметрами командной строки. В некоторых случаях бывает удобно программно вызвать необходимую настройку из своей программы. Например, если вы хотите вызвать окно Список запущенных программ, то используйте следующий код


using System.Diagnostics;

private void butRunningPrograms_Click(object sender, EventArgs e)
{
    // Список запущенных программ
    Process.Start(@"\windows\ctlpnl.exe", "cplmain.cpl, 4, 2");
}

Как видите, достаточно одной строчки, чтобы вызвать необходимое окно. Если варьировать различные сочетания после строчки cplmain.cpl, то можно вызвать и другие окна настроек. С полным списком настроек можно ознакомиться в книге Программирование для мобильных устройств под управлением Windows Mobile

Как создать zip-файл

Можете воспользоваться бесплатной библиотекой DotNetZip (open-source), с помощью которой можно создавать, распаковывать zip-файлы. Скачать программу можно с сайта http://www.codeplex.com/DotNetZip

Элементы управления

Как программно раскрыть DateTimePicker

На данный момент .NET Compact Framework не поддерживает метод SendKeys.Send, с помощью которого можно было бы добиться этого эффекта (см. книгу C#. Советы программистам). Поэтому приходится пользоваться неуправляемым кодом.


[DllImport("coredll.dll")]
static extern int SendMessage(
  IntPtr hWnd, uint uMsg, int wParam, int lParam);

const int WM_LBUTTONDOWN = 0x0201;

private void button1_Click(object sender, EventArgs e)
{
    int x = dateTimePicker1.Width - 10;
    int y = dateTimePicker1.Height / 2;
    int lParam = x + y * 0x00010000;

    SendMessage(dateTimePicker1.Handle, WM_LBUTTONDOWN, 1, lParam);
}

Настроить ширину столбцов у ListView

Вы можете автоматически подгонять ширину заголовка столбца ListView в режиме Details. Смотри совет здесь.

Многострочное выделение у ListView

Многострочное выделение не доступно через управляемые методы. Для решения этой проблемы нужно использовать вызовы функций Windows API GetWindowLong и SetWindowLong. Пример многострочного выделения описан в моей новой книге Программирование для мобильных устройств под управлением Windows Mobile

Амперсанд в меню

.NET Compact Framework не поддерживает использование амперсандов (&) в меню.

Как получить описатель (HWND) элемента управления?

Существует несколько способов получения описателя элемента управления через механизм P/Invoke. Например, через вызовы функций Windows API GetCapture или FindWindow. Описания функций и примеры их использования можно найти в справочнике по функциям Windows API в среде .NET Framework или моих книгах. Обратите внимание, что в .NET Compact Framework 2.0 появилась поддержка Control.Handle, которая избавила от необходимости использовать неуправляемый код.

Как разместить строку состояния (StatusBar) в нужном месте формы?

Строка состояния в мобильной версии может находиться только в нижней части формы и ее размер нельзя изменить.

Ресурсы

Как получить доступ к встроенным ресурсам?

Чтобы получить доступ к встроенным ресурсам (embedded resource), ваше приложение должно сначала получить доступ к сборке и вызвать функцию GetManifestResourceStream. Предположим, вы добавили в проект картинку и поместили ее в ресурсы.


using System.Reflection;
Assembly asm = Assembly.GetExecutingAssembly();
Bitmap bmpSprite = new Bitmap(asm.GetManifestResourceStream("AssemblyName.FileName"));

AssemblyName нужно заменить именем пространства имен, а FileName именем файла. Также строку AssemblyName можно получить во время исполнения программы, вызвав asm.GetName().Name. Готовые примеры описаны в моих книгах.

Как добавить значок своей программы в список MRU (Most Recently Used) кнопки Пуск для смартфонов

Чтобы добавить значок в список недавно используемых программ в устройствах Windows Mobile Standard (бывшие смартфоны), нужно создать ярлык к своей программе и поместить его в папку \windows\start menu\. Когда приложение будет запущено при помощи этого ярлыка, то значок программы появится в этом списке. Для большей ясности можете посмотреть видео How Do I: Launch Smartphone Applications from Visual Studio? на эту тему.

Реклама

Репродукции и картины в багете: картины Сваровски . Украшение стразами Swarovski.;Уст-ка доп оборудования в подарок: винил на авто .;Теперь! Коллекция клипартов для создания веб сайтов . Москва;חשפניות;читать спорт России