Merge pull request #3448 from Ashod:highgui_trackbar_improvements

This commit is contained in:
Vadim Pisarevsky
2014-12-15 18:03:01 +00:00
7 changed files with 150 additions and 22 deletions

View File

@@ -1978,22 +1978,6 @@ icvFindTrackbarByName( const CvWindow* window, const char* name )
}
typedef struct
{
UINT cbSize;
DWORD dwMask;
int idCommand;
int iImage;
BYTE fsState;
BYTE fsStyle;
WORD cx;
DWORD lParam;
LPSTR pszText;
int cchText;
}
ButtonInfo;
static int
icvCreateTrackbar( const char* trackbar_name, const char* window_name,
int* val, int count, CvTrackbarCallback on_notify,
@@ -2013,7 +1997,7 @@ icvCreateTrackbar( const char* trackbar_name, const char* window_name,
if( !window_name || !trackbar_name )
CV_ERROR( CV_StsNullPtr, "NULL window or trackbar name" );
if( count <= 0 )
if( count < 0 )
CV_ERROR( CV_StsOutOfRange, "Bad trackbar maximal value" );
window = icvFindWindowByName(window_name);
@@ -2023,8 +2007,8 @@ icvCreateTrackbar( const char* trackbar_name, const char* window_name,
trackbar = icvFindTrackbarByName(window,trackbar_name);
if( !trackbar )
{
TBBUTTON tbs;
ButtonInfo tbis;
TBBUTTON tbs = {0};
TBBUTTONINFO tbis = {0};
RECT rect;
int bcount;
int len = (int)strlen( trackbar_name );
@@ -2034,9 +2018,14 @@ icvCreateTrackbar( const char* trackbar_name, const char* window_name,
{
const int default_height = 30;
window->toolbar.toolbar = CreateToolbarEx(
window->frame, WS_CHILD | CCS_TOP | TBSTYLE_WRAPABLE,
1, 0, 0, 0, 0, 0, 16, 20, 16, 16, sizeof(TBBUTTON));
// CreateToolbarEx is deprecated and forces linking against Comctl32.lib.
window->toolbar.toolbar = CreateWindowEx(0, TOOLBARCLASSNAME, NULL,
WS_CHILD | CCS_TOP | TBSTYLE_WRAPABLE | BTNS_AUTOSIZE | BTNS_BUTTON,
0, 0, 0, 0,
window->frame, NULL, GetModuleHandle(NULL), NULL);
// CreateToolbarEx automatically sends this but CreateWindowEx doesn't.
SendMessage(window->toolbar.toolbar, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0);
GetClientRect(window->frame, &rect);
MoveWindow( window->toolbar.toolbar, 0, 0,
rect.right - rect.left, default_height, TRUE);
@@ -2284,6 +2273,38 @@ CV_IMPL void cvSetTrackbarPos( const char* trackbar_name, const char* window_nam
}
CV_IMPL void cvSetTrackbarMax(const char* trackbar_name, const char* window_name, int maxval)
{
CV_FUNCNAME( "cvSetTrackbarMax" );
__BEGIN__;
if (maxval >= 0)
{
CvWindow* window = 0;
CvTrackbar* trackbar = 0;
if (trackbar_name == 0 || window_name == 0)
{
CV_ERROR(CV_StsNullPtr, "NULL trackbar or window name");
}
window = icvFindWindowByName(window_name);
if (window)
{
trackbar = icvFindTrackbarByName(window, trackbar_name);
if (trackbar)
{
// The position will be min(pos, maxval).
trackbar->maxval = maxval;
SendMessage(trackbar->hwnd, TBM_SETRANGEMAX, (WPARAM)TRUE, (LPARAM)maxval);
}
}
}
__END__;
}
CV_IMPL void* cvGetWindowHandle( const char* window_name )
{
void* hwnd = 0;