windows_programming_notes.nbk: Home | Index | Next Page: how to subclass a dialog control - installing and removing | Previous Page: How To Handle Checkboxes
Installing and removing the subclass function
A simple subclass function:
//############################################################################## // Edit Control subclass callback function //############################################################################## LRESULT CALLBACK EditControlSubclass(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { int shift = (GetKeyState(VK_SHIFT) < 0) ? SHFT : 0; int control = (GetKeyState(VK_CONTROL) < 0) ? CTRL : 0; int my_id = GetWindowLong(hwnd, GWL_ID); HWND parent = GetParent(hwnd); dbgprintf("EditControlSubclass %s %08X %08X", message_name(message), wparam, lparam); switch(message) { /* // case WM_CHAR: // DumpMessage("EditControlSubclass WM_CHAR ", hwnd, message, wparam, lparam); case WM_KEYDOWN: // DumpMessage("EditControlSubclass WM_KEYDOWN", hwnd, message, wparam, lparam); switch(wparam + control + shift) { case VK_ESCAPE: SendMessage(parent, WM_COMMAND, MAKEWPARAM(my_id, EN_ABORT_EDIT), (LPARAM)hwnd); return TRUE; case VK_F2: SendMessage(parent, WM_COMMAND, MAKEWPARAM(my_id, EN_END_EDIT), (LPARAM)hwnd); return TRUE; case VK_RETURN: SendMessage(parent, WM_COMMAND, MAKEWPARAM(my_id, EN_COL_RIGHT), (LPARAM)hwnd); return TRUE; case CTRL + VK_HOME: case CTRL + VK_UP: SendMessage(parent, WM_COMMAND, MAKEWPARAM(my_id, EN_FIRST_ROW), (LPARAM)hwnd); return TRUE; break; case CTRL + VK_END: case CTRL + VK_DOWN: SendMessage(parent, WM_COMMAND, MAKEWPARAM(my_id, EN_LAST_ROW), (LPARAM)hwnd); return TRUE; break; case VK_UP: SendMessage(parent, WM_COMMAND, MAKEWPARAM(my_id, EN_ROW_UP), (LPARAM)hwnd); return TRUE; break; case VK_DOWN: SendMessage(parent, WM_COMMAND, MAKEWPARAM(my_id, EN_ROW_DOWN), (LPARAM)hwnd); return TRUE; break; case VK_NEXT: // page up SendMessage(parent, WM_COMMAND, MAKEWPARAM(my_id, EN_PAGE_DOWN), (LPARAM)hwnd); return TRUE; break; case VK_PRIOR: // page down SendMessage(parent, WM_COMMAND, MAKEWPARAM(my_id, EN_PAGE_UP), (LPARAM)hwnd); return TRUE; break; case VK_TAB: SendMessage(parent, WM_COMMAND, MAKEWPARAM(my_id, EN_COL_RIGHT), (LPARAM)hwnd); return TRUE; break; case SHFT + VK_TAB: SendMessage(parent, WM_COMMAND, MAKEWPARAM(my_id, EN_COL_LEFT), (LPARAM)hwnd); return TRUE; break; case CTRL + VK_TAB: case SHFT + CTRL + VK_TAB: // control-tab and control-shift-tab are forwarded to the parent, SendMessage(parent, message, wparam, lparam); return TRUE; break; } */ } // call the original window function for anything we don't care to deal with. return CallWindowProc((WNDPROC)GetWindowLong(hwnd, GWL_USERDATA), hwnd, message, wparam, lparam); }
windows_programming_notes.nbk: Home | Index | Next Page: how to subclass a dialog control - installing and removing | Previous Page: How To Handle Checkboxes
Notebook exported on Monday, 7 July 2008, 18:56:50 PM Eastern Daylight Time