|
||||
|
Классовая обертка для элементов управленияЭлементы управления WindowsПеревод А. И. Легалова Англоязычный оригинал находится на сервере компании Reliable Software Элементы управления могут быть добавлены к основному окну или к любому диалоговому окну вашей программы. Их лучше всего выбрать и позиционировать, используя графический редактор ресурсов. Такой редактор позволяет задавать символические имена, которые можно использовать для идентификации элементов управления. Большинство средств управления можно инкапсулировать в объектах, которые внедрены или в соответствующий "Контроллер" (Вы можете иметь отдельные объекты Controller для каждого диалогового окна программы), или, для статических элементов управления, в "Виде". Объекты — "Контроллеры" создаются при обработке сообщения WM_CREATE или, в случае диалоговых окон, сообщением WM_INITDIALOG. При этом выполняются конструкторы элементов управления, внедренных в эти "Контроллеры". Базовым классом для большинства элементов управления является SimpleControl. Он получает и сохраняет дескриптор окна специфического элемента управления. Чтобы получить этот дескриптор, необходимо иметь дескриптор родительского окна и идентификатор элемента управления. class SimpleControl { public: SimpleControl(HWND hwndParent, int id) : _hWnd(GetDlgItem(hwndParent, id)) {} void SetFocus() { ::SetFocus (_hwnd); } HWND Hwnd() const { return _hWnd; } protected: HWND _hWnd; }; Ниже представлен пример элемента управления редактированием. 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); } }; Здесь показано, как элемент управления редактированим может использоваться: 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; … } } Далее: Естественно, что наиболее вероятным местом использования элемента управления является диалоговое окно. |
|
||
Главная | В избранное | Наш E-MAIL | Добавить материал | Нашёл ошибку | Наверх |
||||
|