subclass status bar as any normal window to ensure that the events from the controls inside it are processed normally
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@10591 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -57,41 +57,6 @@ IMPLEMENT_DYNAMIC_CLASS(wxStatusBar, wxStatusBar95)
|
|||||||
#define StatusBar_GetTextLen(h, n) LOWORD(SendMessage(h, SB_GETTEXTLENGTH, (WPARAM)n, 0))
|
#define StatusBar_GetTextLen(h, n) LOWORD(SendMessage(h, SB_GETTEXTLENGTH, (WPARAM)n, 0))
|
||||||
#define StatusBar_GetText(h, n, s) LOWORD(SendMessage(h, SB_GETTEXT, (WPARAM)n, (LPARAM)(LPTSTR)s))
|
#define StatusBar_GetText(h, n, s) LOWORD(SendMessage(h, SB_GETTEXT, (WPARAM)n, (LPARAM)(LPTSTR)s))
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
|
||||||
//
|
|
||||||
// ----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
// static WNDPROC gs_wndprocStatBar = NULL;
|
|
||||||
static WXFARPROC gs_wndprocStatBar = (WXFARPROC) NULL;
|
|
||||||
|
|
||||||
LRESULT APIENTRY wxStatusBarProc(HWND hwnd,
|
|
||||||
UINT message,
|
|
||||||
WPARAM wParam,
|
|
||||||
LPARAM lParam)
|
|
||||||
{
|
|
||||||
switch (message) {
|
|
||||||
case WM_COMMAND:
|
|
||||||
case WM_DRAWITEM:
|
|
||||||
case WM_MEASUREITEM:
|
|
||||||
case WM_SIZE:
|
|
||||||
case WM_MOVE:
|
|
||||||
case WM_MOUSEMOVE:
|
|
||||||
case WM_LBUTTONUP:
|
|
||||||
case WM_LBUTTONDBLCLK:
|
|
||||||
case WM_RBUTTONDOWN:
|
|
||||||
case WM_RBUTTONUP:
|
|
||||||
case WM_RBUTTONDBLCLK:
|
|
||||||
case WM_MBUTTONDOWN:
|
|
||||||
case WM_MBUTTONUP:
|
|
||||||
case WM_MBUTTONDBLCLK:
|
|
||||||
wxStatusBar95 *sb = (wxStatusBar95 *)GetWindowLong(hwnd, GWL_USERDATA);
|
|
||||||
sb->MSWWindowProc(message, wParam, lParam);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ::CallWindowProc(CASTWNDPROC gs_wndprocStatBar, hwnd, message, wParam, lParam);
|
|
||||||
}
|
|
||||||
|
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
// implementation
|
// implementation
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
@@ -102,9 +67,9 @@ LRESULT APIENTRY wxStatusBarProc(HWND hwnd,
|
|||||||
|
|
||||||
wxStatusBar95::wxStatusBar95()
|
wxStatusBar95::wxStatusBar95()
|
||||||
{
|
{
|
||||||
SetParent(NULL);
|
SetParent(NULL);
|
||||||
m_hWnd = 0;
|
m_hWnd = 0;
|
||||||
m_windowId = 0;
|
m_windowId = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxStatusBar95::Create(wxWindow *parent,
|
bool wxStatusBar95::Create(wxWindow *parent,
|
||||||
@@ -127,7 +92,6 @@ bool wxStatusBar95::Create(wxWindow *parent,
|
|||||||
if ( style & wxCLIP_SIBLINGS )
|
if ( style & wxCLIP_SIBLINGS )
|
||||||
wstyle |= WS_CLIPSIBLINGS;
|
wstyle |= WS_CLIPSIBLINGS;
|
||||||
|
|
||||||
|
|
||||||
// setting SBARS_SIZEGRIP is perfectly useless: it's always on by default
|
// setting SBARS_SIZEGRIP is perfectly useless: it's always on by default
|
||||||
// (at least in the version of comctl32.dll I'm using), and the only way to
|
// (at least in the version of comctl32.dll I'm using), and the only way to
|
||||||
// turn it off is to use CCS_TOP style - as we position the status bar
|
// turn it off is to use CCS_TOP style - as we position the status bar
|
||||||
@@ -156,16 +120,7 @@ bool wxStatusBar95::Create(wxWindow *parent,
|
|||||||
}
|
}
|
||||||
|
|
||||||
SetFieldsCount(1);
|
SetFieldsCount(1);
|
||||||
|
SubclassWin(m_hWnd);
|
||||||
// we can't subclass this window as usual because the status bar window
|
|
||||||
// proc processes WM_SIZE and WM_PAINT specially
|
|
||||||
// SubclassWin(m_hWnd);
|
|
||||||
|
|
||||||
// but we want to process the messages from it still, so do custom
|
|
||||||
// subclassing here
|
|
||||||
gs_wndprocStatBar = (WXFARPROC)GetWindowLong(GetHwnd(), GWL_WNDPROC);
|
|
||||||
SetWindowLong(GetHwnd(), GWL_WNDPROC, (LONG)wxStatusBarProc);
|
|
||||||
SetWindowLong(GetHwnd(), GWL_USERDATA, (LONG)this);
|
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
@@ -177,17 +132,19 @@ wxStatusBar95::~wxStatusBar95()
|
|||||||
|
|
||||||
void wxStatusBar95::CopyFieldsWidth(const int widths[])
|
void wxStatusBar95::CopyFieldsWidth(const int widths[])
|
||||||
{
|
{
|
||||||
if (widths && !m_statusWidths)
|
if (widths && !m_statusWidths)
|
||||||
m_statusWidths = new int[m_nFields];
|
m_statusWidths = new int[m_nFields];
|
||||||
|
|
||||||
if ( widths != NULL ) {
|
if ( widths != NULL )
|
||||||
for ( int i = 0; i < m_nFields; i++ )
|
{
|
||||||
m_statusWidths[i] = widths[i];
|
for ( int i = 0; i < m_nFields; i++ )
|
||||||
}
|
m_statusWidths[i] = widths[i];
|
||||||
else {
|
}
|
||||||
delete [] m_statusWidths;
|
else // no widths
|
||||||
m_statusWidths = NULL;
|
{
|
||||||
}
|
delete [] m_statusWidths;
|
||||||
|
m_statusWidths = NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxStatusBar95::SetFieldsCount(int nFields, const int *widths)
|
void wxStatusBar95::SetFieldsCount(int nFields, const int *widths)
|
||||||
@@ -273,9 +230,10 @@ void wxStatusBar95::SetStatusText(const wxString& strText, int nField)
|
|||||||
wxCHECK_RET( (nField >= 0) && (nField < m_nFields),
|
wxCHECK_RET( (nField >= 0) && (nField < m_nFields),
|
||||||
_T("invalid statusbar field index") );
|
_T("invalid statusbar field index") );
|
||||||
|
|
||||||
if ( !StatusBar_SetText(GetHwnd(), nField, strText) ) {
|
if ( !StatusBar_SetText(GetHwnd(), nField, strText) )
|
||||||
wxLogLastError(wxT("StatusBar_SetText"));
|
{
|
||||||
}
|
wxLogLastError(wxT("StatusBar_SetText"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
wxString wxStatusBar95::GetStatusText(int nField) const
|
wxString wxStatusBar95::GetStatusText(int nField) const
|
||||||
@@ -283,14 +241,15 @@ wxString wxStatusBar95::GetStatusText(int nField) const
|
|||||||
wxCHECK_MSG( (nField >= 0) && (nField < m_nFields), wxEmptyString,
|
wxCHECK_MSG( (nField >= 0) && (nField < m_nFields), wxEmptyString,
|
||||||
_T("invalid statusbar field index") );
|
_T("invalid statusbar field index") );
|
||||||
|
|
||||||
wxString str;
|
wxString str;
|
||||||
int len = StatusBar_GetTextLen(GetHwnd(), nField);
|
int len = StatusBar_GetTextLen(GetHwnd(), nField);
|
||||||
if (len > 0)
|
if ( len > 0 )
|
||||||
{
|
{
|
||||||
StatusBar_GetText(GetHwnd(), nField, str.GetWriteBuf(len));
|
StatusBar_GetText(GetHwnd(), nField, str.GetWriteBuf(len));
|
||||||
str.UngetWriteBuf();
|
str.UngetWriteBuf();
|
||||||
}
|
}
|
||||||
return str;
|
|
||||||
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
int wxStatusBar95::GetBorderX() const
|
int wxStatusBar95::GetBorderX() const
|
||||||
|
Reference in New Issue
Block a user