» Главная
eXcode.ru » Статьи » WinAPI
» Новости
» Опросы
» Файлы
» Журнал



Пользователей: 0
Гостей: 9





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




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

источник www.softcraft.ru

Элементы управления могут быть добавлены к основному окну или к любому диалоговому окну вашей программы. Их лучше всего выбрать и позиционировать, используя графический редактор ресурсов. Такой редактор позволяет задавать символические имена, которые можно использовать для идентификации элементов управления.

Большинство средств управления можно инкапсулировать в объектах, которые внедрены или в соответствующий "Контроллер" (Вы можете иметь отдельные объекты Controller для каждого диалогового окна программы), или, для статических элементов управления, в "Виде".

Объекты - "Контроллеры" создаются при обработке сообщения WM_CREATE или, в случае диалоговых окон, сообщением WM_INITDIALOG. При этом выполняются конструкторы элементов управления, внедренных в эти "Контроллеры".

Базовым классом для большинства элементов управления является SimpleControl. Он получает и сохраняет дескриптор окна специфического элемента управления. Чтобы получить этот дескриптор, необходимо иметь дескриптор родительского окна и идентификатор элемента управления.

<table class=code cellpadding=5 align=center width=98% border=1 bordercolor=#3B3B3B><tr><td>

class SimpleControl
{
public:
SimpleControl (HWND hwndParent, int id)
: _hWnd (GetDlgItem (hwndParent, id))
{}

void SetFocus ()
{
::SetFocus (_hWnd);
}

HWND Hwnd () const { return _hWnd; }

protected:
HWND _hWnd;
};

</td></tr></table>

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

<table class=code cellpadding=5 align=center width=98% border=1 bordercolor=#3B3B3B><tr><td>

class Edit: public SimpleControl
{
public:
Edit (HWND hwndParent, int id)
: SimpleControl (hwndParent, id)
{}

void SetString (char* buf)
{
SendMessage (Hwnd (), WM_SETTEXT, 0, (LPARAM) buf);
}

// code is the HIWORD (wParam)
static BOOL IsChanged (int code)
{
return code == EN_CHANGE;
}

int GetLen ()
{
return SendMessage (Hwnd (), WM_GETTEXTLENGTH, 0, 0);
}

void GetString (char* buf, int len)
{
SendMessage (Hwnd (), WM_GETTEXT,
(WPARAM) len, (LPARAM) buf);
}

void Select ()
{
SendMessage (Hwnd (), EM_SETSEL, 0, -1);
}
};

</td></tr></table>

Здесь показано, как элемент управления редактированим может использоваться:

<table class=code cellpadding=5 align=center width=98% border=1 bordercolor=#3B3B3B><tr><td>

class Controller
{
public:
Controller(HWND hwnd);
...
private:
Edit _edit;
char _string [maxLen];
};

Controller::Controller (HWND hwnd)
: _edit (hwnd, IDC_EDIT)
{
_edit.SetFocus ();
...
}

void Controller::Command (HWND hwnd, WPARAM wParam, LPARAM lParam)
{
switch (LOWORD(wParam))
{
case IDC_EDIT:
if (_edit.IsChanged(HIWORD (wParam)))
{
_edit.GetString (_string, maxLen);
}
break;
...
}
}
</td></tr></table>
К началу статьи





Добавил: MadvEXДата публикации: 2005-06-03 19:08:08
Рейтинг статьи:3.00 [Голосов 5]Кол-во просмотров: 13310

Комментарии читателей

Всего комментариев: 0
Ваше имя: *
Текст записи: *
Имя:

Пароль:



Регистрация

Как вы относитесь к AJAX?
Считаю это ЗЛОМ
11% (12)
Бесполезная технология
2% (2)
Мне параллельно
9% (10)
Неплохая технология
20% (23)
Рулез, как я без нее жил!
7% (8)
Я разработчик AJAX-приложений
5% (6)
А что? Хороший футбольный клуб!
12% (14)
Я в танке!!!
34% (38)

Проголосовало: 113
Объявление в Интернете: Куплю винчестер. Жёсткие диски не предлагать!
Рейтинг: 7.7/10 (6)
Посмотреть все анекдоты