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