class WXDLLEXPORT wxGenericScrolledWindow : public wxPanel,
public wxScrollHelper
{
- public:
+public:
wxGenericScrolledWindow() : wxScrollHelper(this) { }
wxGenericScrolledWindow(wxWindow *parent,
wxWindowID id = -1,
// wxScrollHelperEvtHandler::ProcessEvent()
void OnPaint(wxPaintEvent& event);
+ // we need to return a special WM_GETDLGCODE value to process just the
+ // arrows but let the other navigation characters through
+#ifdef __WXMSW__
+ virtual long MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam);
+#endif // __WXMSW__
+
private:
DECLARE_ABSTRACT_CLASS(wxGenericScrolledWindow)
DECLARE_EVENT_TABLE()
// common part of all ctors
void Init();
+ // intercept WM_GETDLGCODE
+ virtual long MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam);
+
// call this to increase the size limit (will do nothing if the current
// limit is big enough)
//
WXHMENU m_hMenu; // Menu, if any
- // the return value of WM_GETDLGCODE handler
- long m_lDlgCode;
-
// implement the base class pure virtuals
virtual void DoClientToScreen( int *x, int *y ) const;
virtual void DoScreenToClient( int *x, int *y ) const;
bool ok = wxPanel::Create(parent, id, pos, size, style, name);
-#ifdef __WXMSW__
- // we need to process arrows ourselves for scrolling
- m_lDlgCode |= DLGC_WANTARROWS;
-#endif // __WXMSW__
-
return ok;
}
event.Skip();
}
+#ifdef __WXMSW__
+long
+wxGenericScrolledWindow::MSWWindowProc(WXUINT nMsg,
+ WXWPARAM wParam,
+ WXLPARAM lParam)
+{
+ long rc = wxPanel::MSWWindowProc(nMsg, wParam, lParam);
+
+ // we need to process arrows ourselves for scrolling
+ if ( nMsg == WM_GETDLGCODE )
+ {
+ rc |= DLGC_WANTARROWS;
+ }
+
+ return rc;
+}
+
+#endif // __WXMSW__
+
#if WXWIN_COMPATIBILITY
void wxGenericScrolledWindow::GetScrollUnitsPerPage (int *x_page, int *y_page) const
// if your compiler is as broken as this, you should really change it: this
// code is needed for normal operation! #ifdef below is only useful for
// automatic rebuilds which are done with a very old compiler version
-#ifdef LVM_FIRST
+#ifdef HDN_BEGINTRACKA
// check for messages from the header (in report view)
HWND hwndHdr = ListView_GetHeader(GetHwnd());
// is it a message from the header?
if ( nmhdr->hwndFrom == hwndHdr )
{
-#ifdef __WATCOMC__
HD_NOTIFY *nmHDR = (HD_NOTIFY *)nmhdr;
-#else
- NMHEADER *nmHDR = (NMHEADER *)nmhdr;
-#endif
+
event.m_itemIndex = -1;
switch ( nmhdr->code )
}
}
else
-#endif // defined(LVM_FIRST)
+#endif // defined(HDN_BEGINTRACKA)
if ( nmhdr->hwndFrom == GetHwnd() )
{
// almost all messages use NM_LISTVIEW
if ( m_windowStyle & wxTE_NOHIDESEL )
msStyle |= ES_NOHIDESEL;
- // we always want the characters and the arrows
- m_lDlgCode = DLGC_WANTCHARS | DLGC_WANTARROWS;
-
- // we may have several different cases:
- // 1. normal case: both TAB and ENTER are used for dialog navigation
- // 2. ctrl which wants TAB for itself: ENTER is used to pass to the next
- // control in the dialog
- // 3. ctrl which wants ENTER for itself: TAB is used for dialog navigation
- // 4. ctrl which wants both TAB and ENTER: Ctrl-ENTER is used to pass to
- // the next control
- if ( m_windowStyle & wxTE_PROCESS_ENTER )
- m_lDlgCode |= DLGC_WANTMESSAGE;
- if ( m_windowStyle & wxTE_PROCESS_TAB )
- m_lDlgCode |= DLGC_WANTTAB;
-
// do create the control - either an EDIT or RICHEDIT
wxString windowClass = wxT("EDIT");
event.Skip();
}
+long wxTextCtrl::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam)
+{
+ // we always want the characters and the arrows
+ if ( nMsg == WM_GETDLGCODE )
+ {
+ // we always want the chars and the arrows
+ long lDlgCode = DLGC_WANTCHARS | DLGC_WANTARROWS;
+
+ // we may have several different cases:
+ // 1. normal case: both TAB and ENTER are used for dialog navigation
+ // 2. ctrl which wants TAB for itself: ENTER is used to pass to the next
+ // control in the dialog
+ // 3. ctrl which wants ENTER for itself: TAB is used for dialog navigation
+ // 4. ctrl which wants both TAB and ENTER: Ctrl-ENTER is used to pass to
+ // the next control
+ if ( m_windowStyle & wxTE_PROCESS_ENTER )
+ lDlgCode |= DLGC_WANTMESSAGE;
+ if ( m_windowStyle & wxTE_PROCESS_TAB )
+ lDlgCode |= DLGC_WANTTAB;
+
+ return lDlgCode;
+ }
+
+ return wxTextCtrlBase::MSWWindowProc(nMsg, wParam, lParam);
+}
+
bool wxTextCtrl::MSWCommand(WXUINT param, WXWORD WXUNUSED(id))
{
switch (param)
m_hWnd = 0;
- // pass WM_GETDLGCODE to DefWindowProc()
- m_lDlgCode = 0;
-
m_xThumbSize = 0;
m_yThumbSize = 0;
m_backgroundTransparent = FALSE;
{
msflags |= WS_BORDER;
}
-
- // calculate the value to return from WM_GETDLGCODE handler
- if ( GetWindowStyleFlag() & wxWANTS_CHARS )
- {
- // want everything: i.e. all keys and WM_CHAR message
- m_lDlgCode = DLGC_WANTARROWS | DLGC_WANTCHARS |
- DLGC_WANTTAB | DLGC_WANTMESSAGE;
- }
#endif // wxUniversal/!wxUniversal
if ( style & wxPOPUP_WINDOW )
#endif // defined(WM_DRAWITEM)
case WM_GETDLGCODE:
- if ( m_lDlgCode )
+ if ( GetWindowStyleFlag() & wxWANTS_CHARS )
{
- rc.result = m_lDlgCode;
+ // want everything: i.e. all keys and WM_CHAR message
+ rc.result = DLGC_WANTARROWS | DLGC_WANTCHARS |
+ DLGC_WANTTAB | DLGC_WANTMESSAGE;
processed = TRUE;
}
//else: get the dlg code from the DefWindowProc()