#include "wx/caret.h"
#endif // wxUSE_CARET
+#if wxUSE_SPINCTRL
+ #include "wx/spinctrl.h"
+#endif // wxUSE_SPINCTRL
+
#include "wx/intl.h"
#include "wx/log.h"
exStyle |= WS_EX_DLGMODALFRAME;
#if defined(__WIN95__)
if ( style & wxRAISED_BORDER )
- exStyle |= WS_EX_WINDOWEDGE;
+ // It seems that WS_EX_WINDOWEDGE doesn't work, but WS_EX_DLGMODALFRAME does
+ exStyle |= WS_EX_DLGMODALFRAME; /* WS_EX_WINDOWEDGE */;
if ( style & wxSTATIC_BORDER )
exStyle |= WS_EX_STATICEDGE;
#endif
::ScreenToClient(hParentWnd, &point);
}
- // We may be faking the client origin. So a window that's really at (0,
- // 30) may appear (to wxWin apps) to be at (0, 0).
- wxPoint pt(parent->GetClientAreaOrigin());
- point.x -= pt.x;
- point.y -= pt.y;
+ if ( parent )
+ {
+ // We may be faking the client origin. So a window that's really at (0,
+ // 30) may appear (to wxWin apps) to be at (0, 0).
+ wxPoint pt(parent->GetClientAreaOrigin());
+ point.x -= pt.x;
+ point.y -= pt.y;
+ }
}
if ( x )
::ClientToScreen(hWnd, &point);
wxCurrentPopupMenu = menu;
::TrackPopupMenu(hMenu, TPM_RIGHTBUTTON, point.x, point.y, 0, hWnd, NULL);
- wxYield();
+ wxYieldIfNeeded();
wxCurrentPopupMenu = NULL;
menu->SetInvokingWindow(NULL);
}
else if ( lDlgCode & DLGC_BUTTON )
{
- // buttons want process Enter themselevs
+ // let IsDialogMessage() handle this for all
+ // buttons except the owner-drawn ones which it
+ // just seems to ignore
+ long style = ::GetWindowLong(msg->hwnd, GWL_STYLE);
+ if ( (style & BS_OWNERDRAW) == BS_OWNERDRAW )
+ {
+ // emulate the button click
+ wxWindow *btn = wxFindWinFromHandle((WXHWND)msg->hwnd);
+ if ( btn )
+ btn->MSWCommand(BN_CLICKED, 0 /* unused */);
+ }
+
bProcess = FALSE;
}
else
break;
case WM_MOVE:
- processed = HandleMove(LOWORD(lParam), HIWORD(lParam));
+ processed = HandleMove(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));
break;
case WM_SIZE:
break;
case WM_MOUSEMOVE:
- {
- short x = LOWORD(lParam);
- short y = HIWORD(lParam);
-
- processed = HandleMouseMove(x, y, wParam);
- }
- break;
+ processed = HandleMouseMove(GET_X_LPARAM(lParam),
+ GET_Y_LPARAM(lParam),
+ wParam);
+ break;
case WM_LBUTTONDOWN:
// set focus to this window
case WM_MBUTTONDOWN:
case WM_MBUTTONUP:
case WM_MBUTTONDBLCLK:
- {
- short x = LOWORD(lParam);
- short y = HIWORD(lParam);
-
- processed = HandleMouseEvent(message, x, y, wParam);
- }
+ processed = HandleMouseEvent(message,
+ GET_X_LPARAM(lParam),
+ GET_Y_LPARAM(lParam),
+ wParam);
break;
case MM_JOY1MOVE:
case MM_JOY2BUTTONDOWN:
case MM_JOY1BUTTONUP:
case MM_JOY2BUTTONUP:
- {
- int x = LOWORD(lParam);
- int y = HIWORD(lParam);
-
- processed = HandleJoystickEvent(message, x, y, wParam);
- }
+ processed = HandleJoystickEvent(message,
+ GET_X_LPARAM(lParam),
+ GET_Y_LPARAM(lParam),
+ wParam);
break;
case WM_SYSCOMMAND:
{
if ( m_hMenu )
{
+ wxChar buf[1024];
HMENU hMenu = (HMENU)m_hMenu;
int N = ::GetMenuItemCount(hMenu);
- int i;
- for (i = 0; i < N; i++)
+ for ( int i = 0; i < N; i++ )
{
- wxChar buf[100];
- int chars = GetMenuString(hMenu, i, buf, 100, MF_BYPOSITION);
- if ( !chars )
+ if ( !::GetMenuString(hMenu, i, buf, WXSIZEOF(buf), MF_BYPOSITION) )
{
wxLogLastError(wxT("GetMenuString"));
continue;
}
- if ( wxStrcmp(buf, wxT("&Window")) == 0 )
+ if ( wxStrcmp(buf, _("&Window")) == 0 )
{
- RemoveMenu(hMenu, i, MF_BYPOSITION);
+ if ( !::RemoveMenu(hMenu, i, MF_BYPOSITION) )
+ {
+ wxLogLastError(wxT("RemoveMenu"));
+ }
break;
}
}
// generate an artificial resize event
+/* FUNCTION IS NOW A MEMBER OF wxFrame - gt
void wxWindow::SendSizeEvent()
{
RECT r;
(void)::PostMessage(GetHwnd(), WM_SIZE, SIZE_RESTORED,
MAKELPARAM(r.right - r.left, r.bottom - r.top));
}
+*/
// ---------------------------------------------------------------------------
// command messages
return GetEventHandler()->ProcessEvent(event);
}
+#if wxUSE_SPINCTRL
+ else
+ {
+ // the text ctrl which is logically part of wxSpinCtrl sends WM_COMMAND
+ // notifications to its parent which we want to reflect back to
+ // wxSpinCtrl
+ wxSpinCtrl *spin = wxSpinCtrl::GetSpinForTextCtrl(control);
+ if ( spin && spin->ProcessTextCommand(cmd, id) )
+ return TRUE;
+ }
+#endif // wxUSE_SPINCTRL
return FALSE;
}