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



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





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




Элементы управления 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]Кол-во просмотров: 13160

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

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

Пароль:



Регистрация

Какой поисковик лучше?
Yandex
41% (63)
Rambler
10% (15)
Google
42% (65)
Yahoo!
1% (1)
MSN
0% (0)
Mail.ru
2% (3)
Aport
1% (1)
AltaVista
1% (2)
Другой
2% (3)

Проголосовало: 153
Стоит программист перед светофором:
- Никак не могу понять, что там за видеоадаптер:
у Геркулеса - 2 цвета, у CGA - 4, у EGA - 16, у VGA -256, у XGA - 65535, а 3-х - ну ни у кого нет!
Рейтинг: 9/10 (5)
Посмотреть все анекдоты