fixed the value returned by GetSize()

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@25707 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2004-02-10 14:41:06 +00:00
parent 485cd20763
commit 94a77ff7af
2 changed files with 11 additions and 19 deletions

View File

@@ -103,9 +103,6 @@ protected:
virtual WXDWORD MSWGetStyle(long style, WXDWORD *exstyle) const;
// get the real height of the control
int GetVisibleHeight() const;
// update the height of the drop down list to fit the number of items we
// have (without changing the visible height)
void UpdateVisibleHeight();

View File

@@ -438,15 +438,10 @@ wxClientData* wxChoice::DoGetItemClientObject( int n ) const
// wxMSW specific helpers
// ----------------------------------------------------------------------------
int wxChoice::GetVisibleHeight() const
{
return ::SendMessage(GetHwnd(), CB_GETITEMHEIGHT, (WPARAM)-1, 0);
}
void wxChoice::UpdateVisibleHeight()
{
// be careful to not change the width here
DoSetSize(-1, -1, -1, GetVisibleHeight(), wxSIZE_USE_EXISTING);
DoSetSize(-1, -1, -1, GetSize().y, wxSIZE_USE_EXISTING);
}
void wxChoice::DoMoveWindow(int x, int y, int width, int height)
@@ -469,13 +464,11 @@ void wxChoice::DoMoveWindow(int x, int y, int width, int height)
void wxChoice::DoGetSize(int *w, int *h) const
{
// this is weird: sometimes, the height returned by Windows is clearly the
// total height of the control including the drop down list -- but only
// sometimes, and normally it isn't... I have no idea about what to do with
// this
wxControl::DoGetSize(w, h);
// we need to return only the height of the visible part, not the entire
// height in the Windows sense which includes the height of the drop down
// list as well
if ( h )
*h = GetVisibleHeight();
}
void wxChoice::DoSetSize(int x, int y,
@@ -509,10 +502,11 @@ void wxChoice::DoSetSize(int x, int y,
// as it is not affected by normal WM_SETSIZE
if ( height != -1 )
{
const int hVisibleCurrent = GetVisibleHeight();
if ( hVisibleCurrent != heightOrig )
const int delta = heightOrig - GetSize().y;
if ( delta )
{
SendMessage(GetHwnd(), CB_SETITEMHEIGHT, (WPARAM)-1, heightOrig);
int h = ::SendMessage(GetHwnd(), CB_GETITEMHEIGHT, (WPARAM)-1, 0);
SendMessage(GetHwnd(), CB_SETITEMHEIGHT, (WPARAM)-1, h + delta);
}
}
}
@@ -538,7 +532,8 @@ wxSize wxChoice::DoGetBestSize() const
// the combobox should be slightly larger than the widest string
wChoice += 5*GetCharWidth();
return wxSize(wChoice, GetVisibleHeight());
// +5 is magic but seems to work well
return wxSize(wChoice, GetCharHeight() + 5);
}
long wxChoice::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam)