kvv's home

Форма входа

Категории раздела

Лекции [14]
Разное [4]
Статьи на тему WM, не попавшие в лекции по разным причинам.

Поиск

Каталог статей

Главная » Статьи » Программирование под Windows Mobile » Лекции

Часть 5. Специальные контролы
Специальные контролы Windows Mobile

В Windows Mobile есть несколько контролов, специфичных для этой платформы.
Посмотрим на тот минимум информации, который необходим для работы с ними

  1. RichEdit (RichInk)
Позволяет создавать и редактировать тексты с рисунками, сохраняя их в формате RTF, Text, PWI (формат, поддерживаемый Word Mobile). Примером приложения с RichEdit может служить стандартное приложение Note.


Посмотрим, как с ним работать.
Шаг 1. Инициализация библиотеки контрола.
Для инициализации контрола необходимо вызвать функцию
InitRichInkDLL();

Шаг 2. Создание контрола.
Если у нас dialog based приложение, то можно описать контрол в ресурсе:

CONTROL "RichEdit",ID_RICHINKCTL,"richink",WS_BORDER | WS_VSCROLL | 0x4,2,10,200,100

Если у нас немодальное приложение, то создаем контрол в рантайме:
g_hEdit = CreateWindow(WC_RICHINK, NULL, WS_VISIBLE | WS_CHILD | WS_VSCROLL,
0, 0, 200, 200, g_hMain, NULL, g_hInst, NULL);

Шаг 3. Работа с контролом
Для работы с RiсhInk используются сообщения, аналогичные сообщениям для работы с RichEdit в Win32

  1. HTML View

    Данный контрол позволяет отображать страницы в html, а также осуществлять переход по ссылкам.

Для работы с контролом необходимо подключить хедер htmlctrl.h
Пример создания окна контрола:
m_hwndHTML = CreateWindow(WC_HTML, NULL, WS_CHILD | WS_VISIBLE | HS_NOSCROLL,
0, 0, 100, 100, g_hwndMain, NULL, HINST_RESDLL, NULL);

Для загрузки и отображения страницы по определенному адресу используется сообщение DTM_NAVIGATE:

::SendMessage(m_hwndHTML, DTM_NAVIGATE, 0, (LPARAM)L"http://kvv.my1.ru");

Для ручной загрузки html текста можно воспользоваться сообщениями DTM_ADDTEXTW и DTM_ENDOFSOURCE:

::SendMessage(m_hwndHTML, DTM_ADDTEXTW, 0, (LPARAM)L"Hello word!");

::SendMessage(m_hwndHTML, DTM_ENDOFSOURCE, 0, 0);

  1. Voice Recorder


Предназначен для записи и воспроизведения звука, с возможностью управления процессом со стороны пользователя. Представляет собой миниокно с набором кнопок для записи и проигрывания звука.


Для работы с рекордером нужно сделать следующее:

  1. Инициализировать структуру CM_VOICE_RECORDER

Эта структура имеет следующий вид:

typedef struct tag_CM_VOICE_RECORDER {

WORD cb; // размер структуры

DWORD dwStyle; // стили контрола

Int xPos, yPos; // позиция на экране

HWND hwndParent; // хендл родительского окна

Int id; // id контрола

LPTSTR lpszRecordFileName; // имя wav файла

} CM_VOICE_RECORDER, *LPCM_VOICE_RECORDER;


Поле стилей контрола может содержать комбинацию следующих флагов

Значение флага

Описание

VRS_NO_OKCANCEL

У контрола не будет кнопки ОК и кнопки X

VRS_NO_NOTIFY

Не будут отсылаться нотификационные сообщения родительскому окну

VRS_MODAL

Контрол будет модальным окном

VRS_NO_OK

У контрола не будет кнопки OK

VRS_PLAY_MODE

После создания контрола запуститься воспроизведение звука

VRS_NO_RECORD

Кнопка записи будет заблокирована

VRS_NO_MOVE

Контрол будет нельзя двигать с помощью стилуса


Таким образом, комбинируя флаги можно приспособить рекордер под свои нужды.


  1. Вызвать функцию VoiceRecorder_Create

Это просто, покажем на примере:

CM_VOICE_RECORDER cvr = {0};

cvr.cb = sizeof(cvr);

cvr.xPos = 10;

cvr.yPos = 20;

cvr.hwndParent = hWnd;

cvr.id = 1;

cvr.lpszRecordFileName = L"\\record.wav";

HWND vrh = VoiceRecorder_Create(&cvr);


возвращаемый функцией параметр — хендл контрола, который можно будет потом использовать (например спрятать и показывать потом по необходимости).

Кстати, если выставлен флаг VRS_MODAL, то контрол будет модальным, т.е. управление передет к нему до тех пор, пока пользователь не нажмет OK или X. В этом случае возвращаемое значение будет неопределено.



  1. Обработать сообщения, посылаемые рекордером.


    Если не определен флаг VRS_NO_NOTIFY, то рекордер будет отсылать нотификационные сообщения родительскому окну.

Обработка этих собощений ведется как обычно:

case WM_NOTIFY

{

LPNMHDR pnmh = (LPNMHDR) lParam;

switch (pnmh->code);

{

case VRN_ERROR:

OutputDebugString(L"Error..."));

break;

case VRN_RECORD_START:

OutputDebugString(L"Start recording..."));

break;

case VRN_RECORD_STOP:

OutputDebugString(L"Stop recording..."));

break;

case VRN_PLAY_START:

OutputDebugString(L"Start playing..."));

break;

case VRN_PLAY_STOP:

OutputDebugString(L"Stop playing..."));

break;

case VRN_CANCEL:

OutputDebugString(L"Cancel pressed..."));

break;

case VRN_OK:

OutputDebugString(L"OK pressed..."));

break;

default:

return DefWindowProc(hwnd, msg, wp,lp);

}

}

Категория: Лекции | Добавил: kvv (02.10.2007) | Автор: kvv
Просмотров: 4375 | Комментарии: 2 | Теги: Лекции | Рейтинг: 5.0/2
Всего комментариев: 2
2 NatashaMep  
0
Где бесплатно X-Rumer 7.0.10 Elite?
Дайте мне адрес , пожалуйста!!!
Это лучшая программа для массового размещения на форумах ! XRumer может сломать большинство видов каптч !

1 NatashaMep  
0
Я хочу скачать бесплатно xrumer 7.0.10 ELITE?
Пришлите мне , пожалуйста URL!
Это лучшая программа для массового размещения на форумах ! XRumer может сломать большинство видов каптч !

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]

Друзья сайта

  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Статистика

    Облако тэгов