|
| БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО! |
|
|
Subclassing a Window
To subclass an instance of a window, call the SetWindowLong function and specify the handle of the window to subclass the GWL_WNDPROC flag and a pointer to the subclass procedure. SetWindowLong returns a pointer to the original window procedure; use this pointer to pass messages to the original procedure. The subclass window procedure must use the CallWindowProc function to call the original window procedure.
The following example shows how to subclass an instance of an edit control in a dialog box. The subclass window procedure enables the edit control to receive all keyboard input, including the ENTER and TAB keys, whenever the control has the input focus.
WNDPROC wpOrigEditProc; LRESULT APIENTRY EditBoxProc( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { HWND hwndEdit; switch(uMsg) { case WM_INITDIALOG: // Retrieve the handle of the edit control. hwndEdit = GetDlgItem(hwndDlg, ID_EDIT); // Subclass the edit control. wpOrigEditProc = (WNDPROC) SetWindowLong(hwndEdit, GWL_WNDPROC, (LONG) EditSubclassProc);
// // Continue the initialization procedure. // return TRUE; case WM_DESTROY: // Remove the subclass from the edit control. SetWindowLong(hwndEdit, GWL_WNDPROC, (LONG) wpOrigEditProc); // // Continue the cleanup procedure. // break; } return FALSE; UNREFERENCED_PARAMETER(lParam); }
// Subclass procedure LRESULT APIENTRY EditSubclassProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { if (uMsg == WM_GETDLGCODE) return DLGC_WANTALLKEYS; return CallWindowProc(wpOrigEditProc, hwnd, uMsg, wParam, lParam); }
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
Subclassing Окно
В подкласс пример окна, назовите функцию SetWindowLong и определяйте ручку окна в подкласс флаг GWL_WNDPROC и указатель в процедуру подкласса. SetWindowLong ВОЗВРАЩАЕТ указатель в оригинальную процедуру окна; используйте этот указатель, чтобы передавать сообщения в оригинальную процедуру. Процедура окна подкласса должна использовать функцию CallWindowProc, чтобы вызывать оригинальную процедуру окна.
Следующий пример показывает как в подкласс пример управления редактирования в диалоговом ящике. Процедура окна подкласса позволяет управление редактирования, чтобы получать весь ввод данных с клавиатуры, включая ВВОД и ключи ТАБ., всякий раз, когда управление имеет входной фокус.
WNDPROC wpOrigEditProc; LRESULT APIENTRY EditBoxProc( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { HWND hwndEdit; ключ(uMsg) { случай WM_INITDIALOG: // Извлекать ручку управления редактирования. hwndEdit = GetDlgItem(hwndDlg, ID_EDIT); // Подкласс управление редактирования. wpOrigEditProc = (WNDPROC) SetWindowLong(hwndEdit, GWL_WNDPROC, (ДОЛГО (ДЛИНОЙ)) EditSubclassProc);
// // Продолжите процедуру инициализации. // возвращайтесь ВЕРНО; случай WM_DESTROY: // Удаление подкласс с управления редактирования. SetWindowLong(hwndEdit, GWL_WNDPROC, (ДОЛГО (ДЛИНОЙ)) wpOrigEditProc); // // Продолжите процедуру очистки. // прерывание; } обратная ЛОЖЬ; UNREFERENCED_PARAMETER(lParam); }
// Подкласс процедуры LRESULT APIENTRY EditSubclassProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { если возврат (uMsg == WM_GETDLGCODE) DLGC_WANTALLKEYS; возвращайте CallWindowProc(wpOrigEditProc, hwnd, uMsg, wParam, lParam); }
|
|
|
|
| |