Не исключено, что этот пост для поистине истинных разработчиков поистине программного обеспечения, которые заместо букваря скоро учили алфавит по третьему изданию справочника по 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 и подстройка под него, воистину волшебные пассы для выходы в свет в правом столь верхнем углу крестика накрывающего прибавление (но не убирающего его мало-мальски незнакомо куда), всплывание напоминаний и так далее
Вы должны быть зарегистрироавны чтобы оставить комментарий.