wxAssociateWinWithHandle(m_hWnd, this);
wxAssociateWinWithHandle(m_hFrame, this);
+ m_backgroundColour.Set(wxString("GREY"));
+
+ LONG lColor = (LONG)m_backgroundColour.GetPixel();
+
+ if (!::WinSetPresParam( m_hWnd
+ ,PP_BACKGROUNDCOLOR
+ ,sizeof(LONG)
+ ,(PVOID)&lColor
+ ))
+ {
+ vError = ::WinGetLastError(vHabmain);
+ sError = wxPMErrorToStr(vError);
+ wxLogError("Error creating frame. Error: %s\n", sError);
+ return FALSE;
+ }
+
//
// Now need to subclass window. Instead of calling the SubClassWin in wxWindow
// we manually subclass here because we don't want to use the main wxWndProc
//
if (!::WinSetWindowPos( m_hWnd
,HWND_TOP
- ,nX + 20
- ,nY + 20
- ,nWidth - 60
- ,nHeight - 60
+ ,nX // + 20
+ ,nY // + 20
+ ,nWidth // - 60
+ ,nHeight // - 60
,SWP_SIZE | SWP_MOVE | SWP_ACTIVATE | SWP_ZORDER
))
{
wxLogError("Error sizing client. Error: %s\n", sError);
return FALSE;
}
-
-/*
- uCtlCount = SHORT1FROMMP(::WinSendMsg(GetHWND(), WM_FORMATFRAME, (MPARAM)vSwp, (MPARAM)vRect));
- for (int i = 0; i < uCtlCount; i++)
- {
- if (vSwp[i].hwnd == GetHWND())
- memcpy(&m_vSwp, &vSwp[i], sizeof(SWP));
- else if (vSwp[i].hwnd == m_hVScroll)
- memcpy(&m_vSwpVScroll, &vSwp[i], sizeof(SWP));
- else if (vSwp[i].hwnd == m_hHScroll)
- memcpy(&m_vSwpVScroll, &vSwp[i], sizeof(SWP));
- else if (vSwp[i].hwnd == m_hTitleBar)
- memcpy(&m_vSwpTitleBar, &vSwp[i], sizeof(SWP));
- }*/
return TRUE;
} // end of wxFrame::OS2Create
wxActivateEvent& rEvent
)
{
- for (wxWindowList::Node* pNode = GetChildren().GetFirst();
- pNode;
- pNode = pNode->GetNext())
+ if ( rEvent.GetActive() )
{
- // FIXME all this is totally bogus - we need to do the same as wxPanel,
- // but how to do it without duplicating the code?
+ // restore focus to the child which was last focused
+ wxLogTrace(_T("focus"), _T("wxFrame %08x activated."), m_hWnd);
+
+ wxWindow* pParent = m_pWinLastFocused ? m_pWinLastFocused->GetParent()
+ : NULL;
+ if (!pParent)
+ {
+ pParent = this;
+ }
- // restore focus
- wxWindow* pChild = pNode->GetData();
+ wxSetFocusToChild( pParent
+ ,&m_pWinLastFocused
+ );
+ }
+ else // deactivating
+ {
+ //
+ // Remember the last focused child if it is our child
+ //
+ m_pWinLastFocused = FindFocus();
- if (!pChild->IsTopLevel()
+ for (wxWindowList::Node* pNode = GetChildren().GetFirst();
+ pNode;
+ pNode = pNode->GetNext())
+ {
+ // FIXME all this is totally bogus - we need to do the same as wxPanel,
+ // but how to do it without duplicating the code?
+
+ // restore focus
+ wxWindow* pChild = pNode->GetData();
+
+ if (!pChild->IsTopLevel()
#if wxUSE_TOOLBAR
- && !wxDynamicCast(pChild, wxToolBar)
+ && !wxDynamicCast(pChild, wxToolBar)
#endif // wxUSE_TOOLBAR
#if wxUSE_STATUSBAR
- && !wxDynamicCast(pChild, wxStatusBar)
+ && !wxDynamicCast(pChild, wxStatusBar)
#endif // wxUSE_STATUSBAR
- )
- {
- pChild->SetFocus();
- return;
+ )
+ {
+ pChild->SetFocus();
+ return;
+ }
}
}
} // end of wxFrame::OnActivate
}
else
{
- return wxWindow::HandlePaint();
+ return(wxWindow::HandlePaint());
}
}
else
break;
case WM_PAINT:
- {
- HPS hPS;
- RECTL vRect;
- wxPaintEvent vEvent;
-
- hPS = WinBeginPaint(m_hWnd, 0L, &vRect);
- ::WinFillRect(hPS, &vRect, CLR_BLUE /* SYSCLR_WINDOW */);
- ::WinEndPaint(hPS);
+ bProcessed = HandlePaint();
+ mRc = (MRESULT)FALSE;
+ break;
- mRc = (MRESULT)FALSE;
- vEvent.SetEventObject(this);
- GetEventHandler()->ProcessEvent(vEvent);
- bProcessed = TRUE;
- }
+ case WM_ERASEBACKGROUND:
+ //
+ // Returning TRUE to requests PM to paint the window background
+ // in SYSCLR_WINDOW. We capture this here because the PS returned
+ // in Frames is the PS for the whole frame, which we can't really
+ // use at all. If you want to paint a different background, do it
+ // in an OnPaint using a wxPaintDC.
+ //
+ mRc = (MRESULT)(TRUE);
break;
- case WM_COMMAND:
+ case WM_COMMAND:
{
WORD wId;
WORD wCmd;
mRc = (MRESULT)FALSE;
break;
- case WM_ERASEBACKGROUND:
- //
- // Return TRUE to request PM to paint the window background
- // in SYSCLR_WINDOW.
- //
- bProcessed = TRUE;
- mRc = (MRESULT)(TRUE);
- break;
-
case CM_QUERYDRAGIMAGE:
{
HPOINTER hIcon;