logo site
Страницы
  • Карта Сайта
Реклама
Рубрики
  • Basic
  • C#
  • Flash
  • Net
  • Objective-C
  • Pascal
  • Ruby
  • SQL
  • Новости
  • Проектирование и архитектура
  • Фортран
Партнеры:
декабря
24

Программирование под Windows CE при помощи Embedded Visual C++, часть 1

Автор: admin, размещено в: Objective-C, комментарии: Комментариев нет

Не исключено, что этот пост для поистине истинных разработчиков поистине программного обеспечения, которые заместо букваря скоро учили алфавит по третьему изданию справочника по C++. Не удивительно, что программировать под Windows CE станем на C++ при помощи Embedded Visual C++.

Итак, нам пригодятся:

По правде сказать данный набор разрешает проэктировать программы, которые запускаются на всех Windows Mobile, нервно начиная с 2003. А впрочем совершенно забудьте про нововведения в Windows Mobile 5 и 6 (ежели исключительно они вам очень-очень не необходимы :). И все-таки все данные продукты пребывают через Гугл, хотя самостоятельно установить их немножко тягомотно. Можно подумать, что особенно докучает Emulator, который настоятельно убедительно просит установки просто-таки последующих вещей по-хорошему в последующем порядке:

К примеру, если Вы до сих пор тут – красиво продолжаем!

Но вкратце различия WinCE API от Win32 API таковы: лишь Unicode, неимение текущего каталога (исключительно попросту безоговорочные пути), мысленно ограничены очень-очень громоздкие вещи, присутствие необыкновенностей со вводом.

А вот я творил кросс-платформенный продукт (под WinCE и Win32). Как известно, вот как данное делается в 2-ух словах. К несчастью с поддержкою UNDER_CE совершенно различить платформу:

WinMain чуть-чуть различается:

int WINAPI WinMain(HINSTANCE h, HINSTANCE prev, LPTSTR line, int cmd)

int WINAPI WinMain(HINSTANCE h, HINSTANCE prev, LPSTR line, int cmd)

И правда, проще всего правильно делать два плана UNICODE. Мысль о том, что это упростит код. Само собой разумеется, что в STL для работы с UNICODE-строкой есть по-старому отличный класс wstring. Неудивительно, что литералы строковые смотреться обязаны так:

_T() есть макрос, которые превратит строковый литерал в UNICODE либо ASCII по необходимости. Можно сказать вместо char совершенно примем на вооружение TCHAR.

И кроме того чтобы устроить план UNICODE в Win32 самостоятельно установите 2 preprocessor definitions: _UNICODE и UNICODE. Тем более в Embedded C++ данное станет изготовлено по умолчанию.

В таком случае поскольку нет текущего каталога, все пути налицо безусловные и лично сильно приходится ухаживает о прибавлении особенно необходимого префикса. Другими словами вот так хладнокровно обнаружим откуда нас запустили:

TCHAR Path[MAX_PATH + 1] = {0};

int n = GetModuleFileName(0, Path, MAX_PATH);

while (–n > 0 && Path[n] != _T(’\\’) && Path[n] != _T(’/'))

return Path;

По всей вероятности вот значит извращаемся, коль скоро надо что-нибудь исключительно под Windows 32:

typedef DWORD (WINAPI *FUNC_GetGuiResources)(HANDLE, DWORD);

FUNC_GetGuiResources f_GetGuiResources = 0;

f_GetGuiResources = (FUNC_GetGuiResources) GetProcAddress(GetModuleHandle(_T(«user32.dll»)), «GetGuiResources»);

if (f_GetGuiResources == 0) return 0;

HANDLE h = OpenProcess(PROCESS_QUERY_INFORMATION, false, GetCurrentProcessId());

int n = f_GetGuiResources (h, which);

CloseHandle(h);

Как обычно вот еще попросту неестественный кусочек кода, который по всей видимости прилично возник ненамного столичным на подобии, составленной из точек на Win CE:

Обычно под Win CE у нас вроде бы нету текущей позиции курсора, ибо знаете. Поэтому следовательно, когда она налицо необходима, то спокойно запоминайте сами заключительнее событие от мыши и считайте данную сделку позицией курсора. Именно типа:

POINT mouse = mouse_at;

POINT mouse = WhereIsCursor();

Прежде всего под Win CE совершенно отсутствует примитив Arc() (сантим.. GDI).

Как правило зато! Зато под Win CE есть так что-нибудь довольно-таки неплохое. Выяснилось, что это более-менее превосходное – данное интегрированный в ОС браузер Chro…, другими словами Oper.., т.е. Inernet Explorer! Фуу, смутно припомнил название-таки! Он еще бы несколько попроще собственного старшего брата, хотя так как нам немало и вовсе не надо – просто благовидно нам текст HTML добросовестно нарисуй и все!

А главное вначале замечательно делаем:

HINSTANCE hinst );

Итак, теперича на окошко возможно тихо прибавить контрол с классом WC_HTML.

Например, и заслать в него той или иной HTML для отображения:

SendMessage(hwndHTML, WM_SETTEXT, 0, (LPARAM)«»);

SendMessage(hwndHTML, DTM_ADDTEXTW, FALSE, (LPARAM)TEXT(«Hello»));

SendMessage(hwndHTML, DTM_ADDTEXTW, FALSE, (LPARAM)TEXT(«World!»));

SendMessage(hwndHTML, DTM_ENDOFSOURCE, 0, (LPARAM)NULL);

Тогда под Win 32 для совсем похожих целей применяют контрол richedit.

Кстати сказать под Win CE нету GetPrivateProfileString, и чтение и разбор INI-файлов ваша привилегия.

Сказать по правде, при загрузке DLL под Win32 фамилия функции наверное в ANSI. Точно так же хотя чертеж и под UNICODE. Надо полагать почему? Потому что!

string f_name = ANSI(func_name);

FARPROC f = GetProcAddress(h, f_name.data());

FARPROC f = GetProcAddress(h, func_name);

Что и говорить заодно долго держите и тут данные функции:

int l = WideCharToMultiByte(CP_ACP, 0, w.data(), w.size(), NULL, 0, NULL, NULL);

char* buffer = new char[l + 1];

l = WideCharToMultiByte(CP_ACP, 0, w.data(), w.size(), buffer, l, NULL, NULL);

string s(buffer);

delete[] buffer;

return «»;

int l = MultiByteToWideChar(CP_ACP, 0, w.data(), w.size(), NULL, 0);

TCHAR* buffer = new TCHAR[l + 1];

l = MultiByteToWideChar(CP_ACP, 0, w.data(), w.size(), buffer, l);

wstring s(buffer);

delete[] buffer;

return _T(«»);

Ну так вот вот как у меня смотрится начало h-файла, который врубается в любой компилируемый файл первым:

#include <tchar.h>

#include <crtdbg.h>

#define GR_GDIOBJECTS 0 /* Count of GDI objects */

#define GR_USEROBJECTS 1 /* Count of USER objects */

#include <math.h>

#include #include #include #include #include #include using namespace std;

А сейчас как хладнокровно видите я тесно приму на вооружение STL и потому подгружаю ее классы в место фамилий по умолчанию.

Иначе говоря пока все, раз прилично понравилось в последующей доли поведаю про всплывающую клавиатуру (SIP), определение ориентации экрана и его поворот, подстройка под объемы экрана, определение DPI и подстройка под него, воистину волшебные пассы для выходы в свет в правом столь верхнем углу крестика накрывающего прибавление (но не убирающего его мало-мальски незнакомо куда), всплывание напоминаний и так далее

Оставить комментарий

Вы должны быть зарегистрироавны чтобы оставить комментарий.

  • Категории
  • Новости
  • Популярное
  • Комментарии
  • Архив
Programmirovanie. Все права защищены