Subject |
Author |
Date |
|
Alastair Watts
|
Apr 6, 2011 - 6:43 AM
|
Other windows located below a CExtRichContentScrollWnd become in-accessable when there is undisplayed horizontal content to the bottom. Interestly, the area that becomes in-accessable is directly related the size of undisplayed scroll content. I’ve also noticed that sometimes the scrollbars don’t work having just re-sized the control.
|
|
Technical Support
|
Apr 6, 2011 - 12:00 PM
|
Thank you very much for reporting this issue. To fix it, please update the source code for the following method: bool CExtRichContentScrollWnd::OnRcsAnalyzeMouseMoveEvent(
UINT nFlags, // mouse event flags
CPoint point // mouse pointer in client coordinates
)
{
ASSERT_VALID( this );
nFlags;
if( m_bPressedTracking )
return true;
CExtRichContentLayout * pRCL = RcsLayoutGet();
CExtRichContentItem * pRootRCI = ( pRCL->m_listHeap.GetCount() > 0 ) ? pRCL->m_listHeap.GetHead() : NULL;
if( pRootRCI == NULL )
{
if( ! m_htInfoHover.IsEmpty() )
{
m_htInfoHover.Empty();
RcsDelayRecalcLayout();
OnSwRecalcLayout( true );
OnSwUpdateScrollBars();
OnSwInvalidate( m_bRedrawErase );
} // if( ! m_htInfoHover.IsEmpty() )
return true;
} // if( pRootRCI == NULL )
CPoint ptScreen( point );
ClientToScreen( &ptScreen );
HWND hWndFromPoint = ::WindowFromPoint( ptScreen );
CExtRichContentHitTestInfo htInfoHover( point + OnSwGetScrollPos(), *pRCL );
if( hWndFromPoint == m_hWnd ) // do hit testing only in this case
htInfoHover.HitTest();
// if( m_htInfoHover == htInfoHover )
// return true;
bool bQuickReStyleMode = ( ( RcsGetStyle() & __EXT_RCS_QUICK_RESTYLE_MODE ) ) ? true : false;
CExtRichStyleDescription::pseudo_class_def_t statesHoverOnly;
statesHoverOnly.m_eynHover = CExtRichStyleDescription::e_ui_yn_yes;
POSITION pos1 = m_htInfoHover.m_listHtBranch.GetHeadPosition();
POSITION pos2 = htInfoHover.m_listHtBranch.GetHeadPosition();
#ifdef _DEBUG
POSITION pos1r = NULL;
#endif // _DEBUG
POSITION pos2r = NULL;
bool bHaveEqualTop = true, bHaveElementsWithResetStyles = false;
CExtRichContentItem * pResetStyleRCI;
for( pResetStyleRCI = NULL; pos1 != NULL; )
{
if( bHaveEqualTop )
{
#ifdef _DEBUG
pos1r = pos1;
#endif // _DEBUG
pos2r = pos2;
}
CExtRichContentHitTestInfo::ht_item_t & _ht_item1 = m_htInfoHover.m_listHtBranch.GetNext( pos1 );
__EXT_DEBUG_RICH_CONTENT_ASSERT( _ht_item1.m_pRCI != NULL );
if( pos2 != NULL && bHaveEqualTop )
{
CExtRichContentHitTestInfo::ht_item_t & _ht_item2 = htInfoHover.m_listHtBranch.GetNext( pos2 );
__EXT_DEBUG_RICH_CONTENT_ASSERT( _ht_item2.m_pRCI != NULL );
if( _ht_item1.m_pRCI == _ht_item2.m_pRCI )
continue;
else
bHaveEqualTop = false;
}
else
bHaveEqualTop = false;
_ht_item1.m_pRCI->RciEvent_OnMouseLeave( m_htInfoHover, htInfoHover, m_hWnd );
_ht_item1.m_pRCI->ResetElementStateInfo( statesHoverOnly, CExtRichStyleDescription::e_ui_yn_unspecified );
if( _ht_item1.m_pRCI->HaveAffectedCssPseudoClasses( statesHoverOnly ) )
{
bHaveElementsWithResetStyles = true;
pResetStyleRCI = _ht_item1.m_pRCI;
}
} // for( pResetStyleRCI = NULL; pos1 != NULL; )
if( pResetStyleRCI != NULL )
OnRcsResetElementStyle( pResetStyleRCI );
if( ! bHaveEqualTop )
#ifdef _DEBUG
pos1r =
#endif // _DEBUG
pos2r = NULL;
__EXT_DEBUG_RICH_CONTENT_ASSERT( ( pos1r != NULL && pos2r != NULL ) || ( pos1r == NULL && pos2r == NULL ) );
// pos1 = ( pos1r != NULL ) ? pos1r : m_htInfoHover.m_listHtBranch.GetHeadPosition();
pos2 = ( pos2r != NULL ) ? pos2r : htInfoHover.m_listHtBranch.GetHeadPosition();
#ifdef _DEBUG
pos1r;
#endif // _DEBUG
for( pResetStyleRCI = NULL; pos2 != NULL; )
{
CExtRichContentHitTestInfo::ht_item_t & _ht_item2 = htInfoHover.m_listHtBranch.GetNext( pos2 );
__EXT_DEBUG_RICH_CONTENT_ASSERT( _ht_item2.m_pRCI != NULL )
_ht_item2.m_pRCI->ResetElementStateInfo( statesHoverOnly, CExtRichStyleDescription::e_ui_yn_yes );
if( _ht_item2.m_pRCI->HaveAffectedCssPseudoClasses( statesHoverOnly ) )
{
bHaveElementsWithResetStyles = true;
pResetStyleRCI = _ht_item2.m_pRCI;
}
_ht_item2.m_pRCI->RciEvent_OnMouseEnter( m_htInfoHover, htInfoHover, m_hWnd );
} // for( pResetStyleRCI = NULL; pos2 != NULL; )
if( pResetStyleRCI != NULL )
OnRcsResetElementStyle( pResetStyleRCI );
m_htInfoHover = htInfoHover;
if( htInfoHover.IsEmpty() )
{
if( ::GetCapture() == m_hWnd )
::ReleaseCapture();
}
else
{
if( ::GetCapture() != m_hWnd )
::SetCapture( m_hWnd );
}
bool bSbInvalidate = false;
if( m_pRCI_ScrollBarTracking != NULL )
{
m_pRCI_ScrollBarTracking->m_nSBMHT = INT(CExtPaintManager::__ESBMHT_NOWHERE);
m_pRCI_ScrollBarTracking->m_bSbProcessingClick = false;
m_pRCI_ScrollBarTracking->m_bSbProcessingOutClick = false;
m_pRCI_ScrollBarTracking->m_bSbProcessingHover = false;
bSbInvalidate = true;
m_pRCI_ScrollBarTracking = NULL;
}
m_pHtItemScrollBarTracking = NULL;
if( htInfoHover.m_listHtBranch.GetCount() > 0
&& ( ( htInfoHover.m_listHtBranch.GetTail().m_dwHtFlags & __ERCHT_ON_ANY_SCROLL_BAR ) != 0 )
&& ( ( htInfoHover.m_listHtBranch.GetTail().m_dwHtFlags & __ERCHT_ON_SB_DISABLED ) == 0 )
)
{ // if scroll bar part is hovered
const CExtRichContentHitTestInfo::ht_item_t & _ht_item = htInfoHover.m_listHtBranch.GetTail();
ASSERT( ( _ht_item.m_dwHtFlags & (__ERCHT_ON_ANY_SCROLL_BAR|__ERCHT_ON_SB_DISABLED) ) != 0 );
m_pHtItemScrollBarTracking = const_cast < CExtRichContentHitTestInfo::ht_item_t * > ( &_ht_item );
m_pRCI_ScrollBarTracking = m_pHtItemScrollBarTracking->m_pRCI;
CExtPaintManager::PAINTSCROLLBARDATA _psbd;
m_pRCI_ScrollBarTracking->Scrolling_FillScrollBarInfo( _ht_item.m_pRCI->m_bHorzScrollBarTracking, _ht_item.m_rcPart, &_psbd );
_psbd.AdjustHT( htInfoHover.m_ptHT );
m_pRCI_ScrollBarTracking->m_nSBMHT = INT(_psbd.m_eSBMHT);
m_pRCI_ScrollBarTracking->m_bSbProcessingClick = false;
m_pRCI_ScrollBarTracking->m_bSbProcessingOutClick = false;
m_pRCI_ScrollBarTracking->m_bSbProcessingHover = true;
bSbInvalidate = true;
} // if scroll bar part is hovered
if( bHaveElementsWithResetStyles )
bSbInvalidate = true;
if( bSbInvalidate )
OnSwInvalidate( m_bRedrawErase );
if( ! bHaveElementsWithResetStyles )
return true;
if( ! bQuickReStyleMode )
{
RcsDelayRecalcLayout();
if( bSbInvalidate )
{
OnSwRecalcLayout( true );
OnSwUpdateScrollBars();
}
}
return true;
}
|
|
Offer Har
|
Apr 5, 2011 - 4:26 AM
|
Dear Support, We need a masked string in cells. We saw this class, but it does not seems to be doing anything - is it implemented? If so, how? Thanks, Ron.
|
|
Technical Support
|
Apr 6, 2011 - 4:23 AM
|
Please take a look at the Grid dialog page in the ProfUIS_Controls sample application. The third column at right contains masked text cells which are initialized in the CPageGrid::_InitColumnStringMasked() method.
|
|
Offer Har
|
Apr 4, 2011 - 7:49 AM
|
Hi, We need all grids to be sorted case insensitive - how do we do it? Thanks, Ron.
|
|
Technical Support
|
Apr 4, 2011 - 8:46 AM
|
Please use the CExtGridCellString derived cell class which implements the CExtGridCell::Compare() virtual method for case insensitive cell text comparison (CString::CompareNoCase() or _tcsicmp() ).
|
|
Eric
|
Apr 1, 2011 - 1:33 PM
|
Hello, Is it possible to invert the Expand/Collapse arrows buttons in a CExtPageNavigator pane? The pane is at the bottom of a window, so the arrows direction should be inverted. Here is a screenshot: http://img846.imageshack.us/img846/397/arrowsr.png So when the pane is collapsed, the arrow should be pointing up and when it is expanded, the arrows should be pointing down. Thanks!
|
|
Technical Support
|
Apr 4, 2011 - 8:44 AM
|
The CExtPageNavigatorWnd control displays up arrows to indicate expanded pane state and down arrows for collapsed state. This is similar to the Page Navigator control in MS Office applications. Nobody requested to change this before. So, we would like to ask you to repaint the pane captions in your project. The CExtPageNavigatorWnd::OnPageItemPaneDrawCaption() virtual method draws the pane caption. It uses the paint manager by default. You can override it and draw your custom pane captions including collapsing arrows.
|
|
Alastair Watts
|
Mar 30, 2011 - 4:06 AM
|
Sometimes it won’t scroll correctly to the bottom, having re-sized the parent window. Your sample RichContentFeatures exhibits the same problem.
|
|
Alastair Watts
|
Jun 26, 2011 - 10:19 AM
|
Is there a proper fix for this yet? The temporary fix you’ve provided is very jerky when re-sizing the window & I can’t bring myself to use it. Thanks.
|
|
Alastair Watts
|
Apr 6, 2011 - 6:34 AM
|
Thanks. I’ve noticed that since this temporary fix a horizontal scrollbar is sometimes unnecessarily drawn.
|
|
Technical Support
|
Apr 4, 2011 - 9:00 AM
|
We are sorry, the following method should also be updated:
void CExtRichContentScrollWnd::OnSize( UINT nType, int cx, int cy )
{
ASSERT_VALID( this );
RcsDelayRecalcLayout();
CExtNSB < CExtScrollWnd > :: OnSize( nType, cx, cy );
}
|
|
Technical Support
|
Apr 4, 2011 - 8:46 AM
|
We reproduced this issue. Thank you. We have only a temporarily fix for it at this moment:
CRect CExtRichContentScrollWnd::OnSwRecalcLayout(
bool bDoLayout,
LPCRECT pRectClientSrc // = NULL
)
{
ASSERT_VALID( this );
CRect rcLayout = CExtScrollWnd::OnSwRecalcLayout( bDoLayout, pRectClientSrc );
if( GetSafeHwnd() != NULL
&& ( m_bRcsDelayRecalcLayout
// || rcLayout != m_rcLayoutLast
)
)
{
m_rcLayoutLast = rcLayout;
if( bDoLayout )
{
CExtRichContentLayout * pRCL = RcsLayoutGet();
if( pRCL != NULL && pRCL->m_listHeap.GetCount() > 0 )
{
const CExtRichContentItem * pRootRCI = ( pRCL->m_listHeap.GetCount() > 0 ) ? pRCL->m_listHeap.GetHead() : NULL;
ASSERT( pRootRCI != NULL );
CRect _rcLayout( rcLayout );
CSize sizeScrollBars( ::GetSystemMetrics(SM_CXVSCROLL), ::GetSystemMetrics(SM_CYHSCROLL) );
bool bHaveScrollBarH = OnSwHasScrollBar( true ), bHaveScrollBarV = OnSwHasScrollBar( false );
CClientDC dc( this );
HFONT hFontRCS = OnRcsGetFont();
CFont * pFont = ( hFontRCS != NULL ) ? CFont::FromHandle( hFontRCS ) : GetFont();
CFont * pOldFont = dc.SelectObject( pFont );
OnRcsPreLayoutContent( dc, _rcLayout, pFont );
pRCL->DoLayout( dc, _rcLayout );
OnRcsPostLayoutContent( dc, _rcLayout, pFont );
bool bAddSBH = false, bRemoveSBH = false;
bool bAddSBV = false, bRemoveSBV = false;
_rcLayout = rcLayout;
CSize sizeContent = pRootRCI->m_rcLayout.Size(), sizeLayout = _rcLayout.Size();
if( sizeContent.cx > sizeLayout.cx )
bAddSBH = (! bHaveScrollBarH);
else
bRemoveSBH = bHaveScrollBarH;
if( sizeContent.cy > sizeLayout.cy )
bAddSBV = (! bHaveScrollBarV);
else
bRemoveSBV = bHaveScrollBarV;
if( bAddSBH || bRemoveSBH || bAddSBV || bRemoveSBV )
{
if( bAddSBH )
OnSwEnableScrollBarCtrl( SB_HORZ, true );
if( bRemoveSBH )
OnSwEnableScrollBarCtrl( SB_HORZ, false );
if( bAddSBV )
OnSwEnableScrollBarCtrl( SB_VERT, true );
if( bRemoveSBV )
OnSwEnableScrollBarCtrl( SB_VERT, false );
m_bRcsDelayRecalcLayout = false;
OnSwUpdateScrollBars();
rcLayout = CExtScrollWnd::OnSwRecalcLayout( bDoLayout, pRectClientSrc );
_rcLayout = OnSwGetClientRect();
OnRcsPreLayoutContent( dc, _rcLayout, pFont );
pRCL->DoLayout( dc, _rcLayout );
OnRcsPostLayoutContent( dc, _rcLayout, pFont );
m_rcLayoutLast = _rcLayout;
} // if( bAddSBH || bRemoveSBH || bAddSBV || bRemoveSBV )
dc.SelectObject( pOldFont );
m_bRcsDelayRecalcLayout = false;
} // if( pRCL != NULL && pRCL->m_listHeap.GetCount() > 0 )
} // if( bDoLayout )
} // if( .....
return rcLayout;
}
|
|
Alastair Watts
|
Apr 1, 2011 - 3:09 AM
|
A bit more info... RichContentFeatures.exe - based in 2.90 & downloaded from your site - works fine. The same program re-built using a pre-release of 2.92 will quite often fail to render the last few lines when you re-size the dialog & then scroll to the bottom.
|
|
Technical Support
|
Mar 31, 2011 - 1:13 PM
|
Do you have some HTML code which can be used in the <span class="newgreen">RichContentFeatures</code> sample application to reproduce the problem? It would be very helpful to know exact steps to reproduce it.
|
|
Evgueni Kolossov
|
Mar 29, 2011 - 4:24 AM
|
virtual bool OnGridCellButtonPressed(
const CExtGridCell & _cell,
INT nButtonType,
bool bMouseInsideButton,
ULONG nPressedTimerCounter,
const RECT & rcButton,
const RECT & rcCellExtra,
const RECT & rcCell,
LONG nColNo,
LONG nRowNo,
INT nColType,
INT nRowType)
{
CWnd * pWnd = GetParentOwner();
GetParentOwner()->SendMessage(WM_ITEM_SELECTED, nColNo, nRowNo);
return true;
} Event not fired on cell button click
|
|
Technical Support
|
Jul 13, 2011 - 9:12 AM
|
First of all, you should know whether you need focus or selection changing event. Then you will override one of the following methods: 1) CExtGridBaseWnd::OnGbwFocusChanging() - invoked before focus changing, allows to prevent focus changing 2) CExtGridBaseWnd::OnGbwFocusChanged() - invoked after focus changed 3) CExtGridBaseWnd::OnGbwSelectionChanged() - invoked after selection changed
|
|
Evgueni Kolossov
|
Jul 13, 2011 - 10:48 AM
|
Thank you very much - this is what I been looking for (and for so long...)
|
|
Evgueni Kolossov
|
Jul 13, 2011 - 7:47 AM
|
Still cannot find the solution for event to catch the row/cell selection in the grid. For all the years i am using ProfUIS I see that support is getting worse and worse...
|
|
Technical Support
|
Apr 6, 2011 - 4:24 AM
|
Any grid cell class in Prof-UIS supports the following built-in cell parts (from left to right): icon, check/radio box, text, up-down button, drop-down button, ellipsis button. Any of built-in cell pars can be hidden. If you see anything else, then it’s implemented from scratch using custom painting. The OnGridCellButton*** methods are related to the up-down, drop-down and ellipsis cell buttons - not to the check/radio box. You need the CExtGridCell::OnSetCheck() and/or CExtGridWnd::OnGridCellSetCheck() virtual methods.
|
|
Technical Support
|
Mar 30, 2011 - 1:17 PM
|
We cannot confirm this. Please provide more details. Which cell class exactly are you using in your test?
|
|
Evgueni Kolossov
|
Apr 5, 2011 - 10:50 AM
|
CExtGridCellCheckBox * pCellCheckBox =
STATIC_DOWNCAST( CExtGridCellCheckBox, m_wndGrid.GridCellGet( 0, nRowNo, 0, 0, RUNTIME_CLASS(CExtGridCellCheckBox) ) );
ASSERT_VALID( pCellCheckBox );
pCellCheckBox->SetCheck(0);
|
|
Evgueni Kolossov
|
Mar 29, 2011 - 5:04 AM
|
Found I can catch it through another event: virtual bool OnGridTrackCellButton( CExtGridCell * pCell, const CExtGridHitTestInfo & htInfo)
This will fire on click but this is still no explanation why the OnGridCellButtonPressed is not firing
|
|
Eric
|
Mar 28, 2011 - 9:04 AM
|
Hi, I would like to know if it is be possible to keep a Header Cell selected as soon as a cell of its column has the focus in a ReportGrid? I would like something like implemented in the tab ’Products (highlighting)’ of the ’SimpleGrid’ project. I have tried to add the ’__EGBS_EX_FI_HIGHLIGHT_COLUMNS | __EGBS_EX_FO_HIGHLIGHT_COLUMNS’ extended style but I didn’t succeed to keep my header cell selected. Regards, Cedric.
|
|
Technical Support
|
Mar 29, 2011 - 8:37 AM
|
The CExtReportGridWnd control always supports the focused report row and optionally supports focused columns. This is demonstrated in the ReportGrid sample application. But all the group rows are completely re-created during re-sorting. So, it’s possible to restore the focused report row only if it is a data row (a row without child rows). If you focus some data row in the ReportGrid sample application, then it’s still focused after re-sorting. This also works if you choose <b>Use Column Based Focus<b> mode from a menu.
|
|
Bogdan Munteanu
|
Mar 28, 2011 - 5:04 AM
|
1. If one opens on the same machine the Prof Studio example and Microsoft’s Visual Studio, the docking windows in the latter auto-hide smoothly while Prof Studio exhibits a rather jerky move where the redraws are obvious. I am comparing here some equivalent cases: take for example the solution explorer windows. Could you please fix this issue?
2. If one resizes the main frame in all the MDI examples there are some redundant operation performed by the ProfUIS framwork that result in obvious flickering. More precisely, the docking child windows are rendered in some intermediate positions that create a rather un-professional look. Please note I reported this twice in the past three months, I emailed you a detailed example and yet received no reply.
I am trying this again (including an associated e-mail) hoping in a response, especially that others seem to raise the same questions about the library.
Thank you,
Bogdan.
|
|
Jeroen Walter
|
Apr 11, 2011 - 2:23 AM
|
I feel your pain. We’ve been using ProfUis for some years now and from the start we had problems with its performance. I think we addressed it once in the beginning, but to no avail. Recently this became a larger problem for us, as we no longer can ignore these performance issues. We’re using high end Core I5 computers, still our software is sluggish as hell because of ProfUis (especially when using the skin library). I am troubled, because it seems that the development team of ProfUis would rather want to implement new features like HTML everywhere or more controls instead of focussing and improving on existing code.
|
|
Evgueni Kolossov
|
Mar 17, 2011 - 3:01 AM
|
All CExtShell dialogs are extremely slow in comparison with standard dialogs. This is not acceptable to wait over 5 seconds for dialog to appear. Please suggest the way to accelerate dialogs load
|
|
Evgueni Kolossov
|
Mar 18, 2011 - 9:09 AM
|
1) and 2) is not the case, 3 - questionable and standard dialog is not slow. So, this is definitely a bug you need to fix ASAP. In current way it working it is not acceptable at all
|
|
Technical Support
|
Mar 17, 2011 - 9:34 AM
|
This is a known issue:
1) Sometimes it occurs on a computer where a diskette drive is present. Shell APIs are slow on particular computers with diskette drives. This issue is not resolved yet.
2) A folder contains 5000 files or more. Current version of shell controls scan all files at once. Background scanning is not supported. Please use file type filters to reduce the number of displayed shell items.
3) Particular network paths pointing to particular computers work extremely slow. But this is typically the same for Windows shell dialogs.
|
|
Jeroen Walter
|
Mar 25, 2011 - 6:11 AM
|
2) ... Why should we implement this questionable workaround ? Seems to me that you background processing of the files can address all problems.
It would be nice to have shell dialogs in the chosen skin of the application, but if you can’t or won’t fix them, why bother supplying them at all?
|
|
Evgueni Kolossov
|
Mar 18, 2011 - 9:10 AM
|
1) and 2) is not the case, 3 - questionable and standard dialog is not slow. So, this is definitely a bug you need to fix ASAP. In current way it working it is not acceptable at all
|
|
Lars Mohr
|
Mar 17, 2011 - 2:38 PM
|
concerning 3: But the standard Windows shell dialog does not block the whole application.
|
|
Alastair Watts
|
Mar 15, 2011 - 1:42 AM
|
I have a number of outstanding support issues which are yet resolved, infact, some requests have been ignored. Would someone please respond.
|
|
Alastair Watts
|
Apr 11, 2011 - 5:08 AM
|
Any news on the (Show All) bug? Thanks
|
|
Alastair Watts
|
Mar 23, 2011 - 5:58 AM
|
This is a bug, not a feature request. I have sent you a test project ... my findings are: 1. CExtGridWnd - dynamic filters - not suitable for editing as only visible row values are added to the Value Filters list so there is no way to un-filter hidden rows. 2. CExtGridWnd - static filters updated using UpdateStaticFilterValueForOuterRow(-1) - incorrectly ticks (Show All) 3. CExtTreeGridWnd - dynamic filters - incorrectly ticks (Show All) 4. CExtTreeGridWnd - static filters updated using UpdateStaticFilterValueForOuterRow(-1) - incorrectly ticks (Show All) Would someone please look into this, thanks.
|
|
Alastair Watts
|
Mar 21, 2011 - 8:30 AM
|
Thanks very much for the check combo box fix. Regarding the header filter - I use static value filters because when using a plain grid (tree grid works OK) dynamic filters don’t add all values to the list, only those which are not hidden. It seems that a plain grid is not suitable then, so perhaps I must recode using a tree grid? The problem I am experiencing seems to be caused by (Show All) being incorrectly ticked which is most probably due to the value filters list still containing the old edited-out value, surely this could & should be updated when calling UpdateStaticFilterValueForOuterRow().
|
|
Technical Support
|
Mar 22, 2011 - 3:18 AM
|
The CExtTreeGridWnd and CExtGridWnd filters are different. The CExtTreeGridWnd constantly provides access to all the HTREEITEM row handles regardless of their hidden state. The CExtGridWnd control hides its hidden rows inside inner row range of data provider and hidden rows are inaccessible. You can use any of these controls. We can assume your note about hidden rows in CExtGridWnd control is a feature request.
|
|
Alastair Watts
|
Mar 17, 2011 - 3:58 PM
|
I meant a new project ... I’ll sent it together with a long outstanding issue regarding header value filters not working correctly. Thanks
|
|
Technical Support
|
Mar 21, 2011 - 12:57 AM
|
To fix the check combo box flickering, please update the source code for the following method: void CExtCheckComboBox::_OnDrawComboImpl(
bool bPressed,
bool bHover,
CDC * pDC // = NULL
)
{
if( pDC != NULL && AnimationClient_StatePaint( *pDC ) )
return;
CRect rcClient;
GetClientRect( &rcClient );
bool bCallReleaseDC = false;
if( pDC == NULL )
{
pDC = GetDC();
ASSERT( pDC != NULL );
bCallReleaseDC = true;
}
DRAWITEMSTRUCT dis;
::memset( &dis, 0, sizeof( DRAWITEMSTRUCT ) );
dis.CtlType = ODT_LISTBOX;
dis.CtlID = GetDlgCtrlID();
dis.itemID = UINT(-1);
//dis.hDC = pDC->GetSafeHdc();
CRect rc( rcClient );
rc.DeflateRect(
3,
3,
3 + ::GetSystemMetrics( SM_CXVSCROLL ), // + PmBridge_GetPM()->GetDropDownButtonWidth(),
3
);
::CopyRect( &dis.rcItem, &rc );
dis.itemAction = ODA_DRAWENTIRE;
dis.hwndItem = GetSafeHwnd();
if( ::GetFocus() == m_hWnd )
dis.itemState |= ODS_FOCUS|ODS_SELECTED;
{ // block for memory dc
CExtMemoryDC dc(
pDC,
&rcClient,
CExtMemoryDC::MDCOPT_TO_MEMORY | CExtMemoryDC::MDCOPT_FILL_BITS | CExtMemoryDC::MDCOPT_RTL_COMPATIBILITY
);
dis.hDC = dc.GetSafeHdc();
SendMessage( WM_DRAWITEM, (WPARAM)GetDlgCtrlID(), (LPARAM)&dis );
CExtComboBox::_OnDrawComboImpl( bPressed, bHover, &dc );
} // block for memory dc
if( bCallReleaseDC )
ReleaseDC( pDC );
}
The static value filter was designed for non-editable grid controls. Your grid control is programmaticaly editable. So, if you switch to dynamic value filters, the problem should be gone.
|
|
Alastair Watts
|
Mar 17, 2011 - 5:14 AM
|
The header filter code you’ve posted is identical to the existing code (2.92) My CExtCheckComboBox objects are owner draw = variable, has strings = true and they flicker when you move the mouse over them. I have created a simple test dialog and they still flicker.
|
|
Technical Support
|
Mar 17, 2011 - 9:55 AM
|
If you mean the ComboBoxTest test project you sent us - the combo boxes there are not owner draw and the CComboBoxTestDlg::DoCheck() method makes them behaving extremely slow. If you mean some new project, then please send it to us.
|
|
Alastair Watts
|
Mar 17, 2011 - 4:58 AM
|
Thanks, you had me worried for a while there :)
|
|
Alastair Watts
|
Mar 16, 2011 - 4:57 AM
|
I hope they’re not experiencing problems, maybe they’re all working hard readying the next release! The thought of having to move to another UI after 9 months of development is an unpleasant one to say the least :( Come on technical support ... do your thing :)
|
|
Technical Support
|
Mar 16, 2011 - 1:30 PM
|
We are sorry for the delays with this reply. The best fitting can be improved by implementing the following virtual method in theCExtGridCellHeaderFilter class:
virtual INT OnCalcButtonExtent(
INT nButtonType, // e_button_type_t
const CExtGridWnd & wndGrid,
CDC & dc,
LONG nVisibleColNo,
LONG nVisibleRowNo,
LONG nColNo,
LONG nRowNo,
INT nColType,
INT nRowType,
DWORD dwAreaFlags,
DWORD dwHelperPaintFlags
) const;
INT CExtGridCellHeaderFilter::OnCalcButtonExtent(
INT nButtonType, // e_button_type_t
const CExtGridWnd & wndGrid,
CDC & dc,
LONG nVisibleColNo,
LONG nVisibleRowNo,
LONG nColNo,
LONG nRowNo,
INT nColType,
INT nRowType,
DWORD dwAreaFlags,
DWORD dwHelperPaintFlags
) const
{
__EXT_DEBUG_GRID_ASSERT_VALID( this );
if( ( dwHelperPaintFlags & __EGCPF_SIMPLIFIED_RENDERING_TARGET ) != 0 )
return 0;
if( nButtonType == INT(__EBTT_DROPDOWN)
&& ( dwHelperPaintFlags & __EGCPF_REPORT_GROUP_AREA ) != 0
)
return 0;
INT nExtent = CExtGridCellHeader::OnCalcButtonExtent( nButtonType, wndGrid, dc, nVisibleColNo, nVisibleRowNo, nColNo, nRowNo, nColType, nRowType, dwAreaFlags, dwHelperPaintFlags );
if( nButtonType == INT(__EBTT_DROPDOWN)
&& nExtent > 0
)
nExtent += 6;
return nExtent;
}
Please check the combo box dialog items in the dialog template resource editor for all the CExtCheckComboBox subclassed objects. Your combo boxes must be ownerdraw fixed or variable. They also should have the HasStrings option set on. This will guarantee all the flicker effects are gone.
|
|
Rado Manzela
|
Mar 15, 2011 - 6:07 AM
|
I guess their sales are going down so they don’t want or cannot fix bugs as they used to :(
|
|
Jeroen Walter
|
Mar 15, 2011 - 5:30 AM
|
Indeed, it looks like support hasn’t addressed any issues the last few days :(
|
|
Jeroen Walter
|
Mar 11, 2011 - 3:11 AM
|
|
|
Evgueni Kolossov
|
Mar 29, 2011 - 10:56 AM
|
Completely agree. We need customization for the skins and there is no fiormat documentation or editor available
|
|
Jeroen Walter
|
Mar 25, 2011 - 6:05 AM
|
Hello support, anybody home ?
|
|
Jeff Mayo
|
Mar 10, 2011 - 1:44 PM
|
I want to show a context menu when the user right clicks in the tab strip. Adding a button to the strip is a possible alternative method.
|
|
Technical Support
|
Mar 13, 2011 - 11:42 AM
|
Please create your own tabs class derived from CExtTWPC < CExtTabFlatWnd > and handle the WM_RBUTTONDOWN message in it:
class CYourFlatTabWnd : public CExtTWPC < CExtTabFlatWnd >
{
protected:
virtual LRESULT WindowProc( UINT message, WPARAM wParam, LPARAM lParam )
{
switch( message )
{
case WM_RBUTTONDOWN:
{
CPoint point( LOWORD(lParam), HIWORD(lParam) );
int nTabItemIndex = ItemHitTest( point );
if( nTabItemIndex < 0 )
return 0L; // not on tab item
. . . . . . . .
}
return 0L;
}
return CExtTWPC < CExtTabFlatWnd > :: WindowProc( message, wParam, lParam );
}
};
Then you should override the <codeOnTabWndGetTabImpl()</code> virtual method so that the flat tab page container can use that tab control: class CExtTabPageContainerFlatWnd : public CExtTabPageContainerWnd
{
public:
virtual CExtTabWnd* OnTabWndGetTabImpl()
{
return new CYourFlatTabWnd;
}
};
|
|
Jeff Mayo
|
Mar 16, 2011 - 9:27 AM
|
This change worked, thanks.
|
|
Jeff Mayo
|
Mar 11, 2011 - 6:00 AM
|
I don’t get a notification of the WM_CONTEXTMENU message in the class that inherits from CExtTabPageContainerFlatWnd.
|
|
Rado Manzela
|
Mar 10, 2011 - 8:12 AM
|
Run prof-uis controls, in Grid tab, select any DateTime cell which contains both date and time. When you start editing any portion of date or time, date and time strings are connected together without space (for example 20.3.201115:00:00 ). Can you fix it please? (2.92)
|
|
MUKESH GUPTA
|
Mar 10, 2011 - 3:43 AM
|
We were using ProfUIS version 2.54 and have recently upgraded to the latest version 2.91.I built all the static and dll targets of 2.91 on VS2008. We have derived our class from CExtTabPageContainerOneNoteWnd & then have overridden OnCreate(LPCREATESTRUCT lpCreateStruct) which has been implemented as :- int classname::OnCreate(LPCREATESTRUCT lpCreateStruct)
{ if( CExtTabPageContainerOneNoteWnd::OnCreate(lpCreateStruct) == -1 )
return -1; OrientationSet( __ETWS_ORIENT_LEFT ); CCreateContext* pContext = NULL; if (lpCreateStruct != NULL)
pContext = (CCreateContext*)lpCreateStruct->lpCreateParams; CString strTabname = "Tab One"; if( ! m_view1->Create(NULL,_T(""),WS_CHILD | WS_VISIBLE,CRect(20,20,1,1), this,ID_VIEW1, pContext))
{
ASSERT( FALSE );
return -1;
} if( ! PageInsert(m_view1->GetSafeHwnd(),strTabname))
{
ASSERT( FALSE );
return -1;
} if( ! m_View2->Create(NULL,_T(""),WS_CHILD | WS_VISIBLE,CRect(30,30,1,1),this,ID_VIEW2, pContext))
{
ASSERT( FALSE );
return -1;
} strTabname = "Tab Two";
if( ! PageInsert(m_View2->GetSafeHwnd(),strTabname))
{
ASSERT( FALSE );
return -1;
} } Here, m_view1 & m_view2 are instances of classes derived from CView class. The above code creates tab which are aligned vertically. The problem is that if the text to be displayed is in a language other than English, the text gets trimmed and "..." is displayed in the end.
For example, "Tab Two" is displayed like "Tab T...". Moreover, the problem occurs irrespective of tab alignment, i.e, it occurs even if the tabs are aligned horizontally. Please suggest.
|
|
MUKESH GUPTA
|
Oct 31, 2011 - 6:52 AM
|
Setting CExtRichContentLayout::g_bUseWin32ForPlainText to true during app initialization didn’t work for us.
|
|
MUKESH GUPTA
|
Oct 20, 2011 - 2:21 AM
|
I still haven’t got any reply from the support. It seems like you are not keen on resolving this issue. As per your comments dated "Jun 22, 2011 - 11:43 AM", We fixed this rarely occurred text measurement issue in Prof-UIS 2.92. The issue exists in 2.91 & I can find a lot of instances in the code where "…" is added to the string. If you think its not reproducible in 2.91, then whats the purpose of writing the code which adds "…" to the string. I don’t understand why you don’t remove this code which adds "…" If you don’t want to fix this, then we shouldn’t spend money on getting the support from ProfUI which actually is not available & start looking for alternative UI.
|
|
Technical Support
|
Oct 24, 2011 - 7:36 AM
|
Please let us know whether the issue disappears if you invoke the following line of code during your app initialization:
CExtRichContentLayout::g_bUseWin32ForPlainText = true;
|
|
MUKESH GUPTA
|
Jun 30, 2011 - 5:53 AM
|
Setting CExtRichContentLayout::g_bUseWin32ForPlainText to true in app initialization is not working. I would like to reiterate that the problem is not occuring for English language. I can see a lot of instances in the code where elipses are getting added to the text. We would like to EXCLUDE this logic for tabs. Since, our release is coming closer, it seems as if we might have to delay the release due to this critical issue which can affect our customers. In case, you are not able to reproduce the issue OR any inputs are required from our side, we can schedule a telephonic call or live meeting to discuss those in detail as we need to resolve this asap. Moreover, I already have shared a sample app couple of months back to reproduce the issue. You can use the same to reproduce and fix the problem.
|
|
MUKESH GUPTA
|
Jun 29, 2011 - 5:40 AM
|
Is someone looking into this?
|
|
MUKESH GUPTA
|
Jun 28, 2011 - 2:01 AM
|
We tried copying the files ExtRichContent.h and ExtRichContent.cpp from 2.92 to 2.91 & rebuild the project (both MBCS & MBCS-RDE) but it didn’t work. Moreover, we also tried using using 2.92 dlls with our product but it was crashoing our application. Please suggest.
|
|
Technical Support
|
Jun 29, 2011 - 12:15 PM
|
If you come across with any crashes or compilation problems, please provide us with the content of Output and Call Stack windows in your Visual Studio. We also would like to ask to to do one small experiment. Please invoke the CExtRichContentLayout::g_bUseWin32ForPlainText = false; line of code during your app initialization and let us know whether this fixes text on tab items?
|
|
Technical Support
|
Jun 29, 2011 - 12:15 PM
|
Sorry, we mean CExtRichContentLayout::g_bUseWin32ForPlainText = true; line of code.
|
|
MUKESH GUPTA
|
Jun 24, 2011 - 1:25 AM
|
I tried downloading the source code of 2.92 from the following link:- http://www.prof-uis.com/download/mfc.aspx Clicking on " Prof-UIS v.2.92 (36.00Mb) Source code and documentation " link didn’t work. Can you please suggest appropriate link from where we can download the source code of 2.92
|
|
Technical Support
|
Jun 24, 2011 - 11:49 AM
|
We cannot confirm that the links are not active if you login using your username. The user PBBISAGENT should be able to download the software. Please try it again. In any case, please send a request to support@prof-uis.com to get our ftp address so you can always download any Prof-UIS version via ftp.
|
|
MUKESH GUPTA
|
Jun 23, 2011 - 8:03 AM
|
We have recently moved to ProfUI 2.91 version and cannot upgrade to 2.92 as we are having a release scheduled & there is no time to test as well. Can you please provide us the fix asap so that we can incorporate that fix in our code & build the libraries.
|
|
Technical Support
|
Jun 23, 2011 - 1:09 PM
|
2.92 is a minor release. If you don’t want to update, you can get only the ExtRichContent.h and ExtRichContent.cpp files from 2.92 and put it into 2.91
|
|
MUKESH GUPTA
|
Jun 21, 2011 - 12:55 AM
|
Hi Support, This has been more than 2 months that there is not reply from Technical Support. I am not sure where is the technical support for the Prof UI? Is there any existance or not? I am really very unhappy with the support and thinking of moving away from Prof UI by looking at the responses. There is no contact points, no email coming from support. I need answer to my queries ASAP. Thanks Pankaj
|
|
Technical Support
|
Jun 22, 2011 - 11:43 AM
|
We fixed this rarely occurred text measurement issue in Prof-UIS 2.92.
|
|
MUKESH GUPTA
|
Mar 16, 2011 - 1:11 AM
|
I have sent sample aplication which loads Japanese strings from a resource dll (Cannot share resource dll as it is project specific). The Japanese string gets trimmed and ".." is appended at the end. Also, please note that the bug is reproducible on a Japanese environment.
|
|
Technical Support
|
Mar 16, 2011 - 1:35 PM
|
We received your e-mail and replied it.
|
|
Technical Support
|
Mar 15, 2011 - 12:37 PM
|
Could you please send us this modified version of the TabbedBars sample application?
|
|
MUKESH GUPTA
|
Mar 15, 2011 - 7:47 AM
|
I opened TabbedBars_900.vcproj using VS 2008 and did the following changes in CChildView::OnCreate() :- 1. Used CString::LoadString() to load Japanese text from a resource dll.
2. Passed that string to PageInsert() Observed that for larger text, ".." was getting added to the tab text Please suggest.
|
|
MUKESH GUPTA
|
Mar 15, 2011 - 5:08 AM
|
Any updates on this? Will appreciate if you can provide the fix asap.
|
|
MUKESH GUPTA
|
Mar 11, 2011 - 12:00 AM
|
If the tab text is in Japanese language, its getting trimmed and "..." are appended at the end. Please provide the fix asap.
|
|
Rado Manzela
|
Mar 6, 2011 - 8:58 AM
|
Set standard English(US) language settings (tested in Win7). Copy 123.45 into clipboard. In Prof-uis controls/ System Number/currency click at the end of "$0" to start edit, paste. It will create "$0,123.45". Select this whole string and paste again. It will create "$12,345". When you restart the sample and select complete "$0", it will paste "$123.45" correctly, but if you select pasted text and paste again, it will paste "$12,345".
|
|
Bill Olson
|
Mar 5, 2011 - 12:42 AM
|
I’ve added a CExtShellDialog to load files in my application. Loading the dialog seems very slow. In both debug and release mode it can take 5 seconds or more to display the dialog. There are a fairly large number of files in the directly where it defaults, but it’s significantly slower than the standard CFileDialog. Is there any way to speed up the displaying of this? Bill
|
|
Dennis Ioakim
|
Mar 4, 2011 - 4:27 AM
|
Hi i have set m_bAutoMenuEnable = FALSE in my mainframe’s constructor, so that my menu items that have no ON_COMMAND handler are displayed as enabled and not grayed. When using Profuis menus and Toolbox in particular (CExtToolBoxWnd) the menuitems are grayed no matter what the m_bAutoMenuEnable is. Is there a m_bAutoMenuEnable equivalent in ProfUis?
If not, how can i overcome this problem? Thanx in advance.
|
|
Technical Support
|
Mar 4, 2011 - 10:28 AM
|
Prof-UIS menus are always controlled by the MFC’s command updating mechanism. You can override the OnCmdMsg() virtual method in your main frame class, invoke the parent class method and then simply return TRUE . This will enable all the menu items.
|
|
mediatime Conseil
|
Mar 2, 2011 - 9:10 AM
|
Hi I am planning to use NSIS to create an installer to my application, I see that I can skin it using skincrafer plugin, but I want to know if I can use profuis to skin it so I don’t have to manage two type of skinning (I’ll use the same xml et images for the installer and the application) Thank you
|
|
Technical Support
|
Mar 3, 2011 - 5:08 AM
|
You can subclass any windows created by NSIS with dynamic instances of Prof-UIS classes. You should code some plug-in which enumerates window handles and subclass them.
|
|
Rado Manzela
|
Feb 28, 2011 - 6:25 AM
|
It seems you don’t have time to fix bug I’ve reported so I did it by myself, you could check it (btw the same problem with decimal separator is also in CExtEditSystemNumber):
long double CExtEditSystemCurrency::LongDoubleGet() const{ //return CExtEditSystemCurrency::LongDoubleGet();ASSERT_VALID( CExtSafeString str = _GetNumericText( m_pEditWithBehaviorWnd->TextGet(), str.Replace(m_strCurrencySymbol,_T( this );false );"")); //rrrstr.Trim(); //rrr if( str.IsEmpty()//rrr || str == _T(".") || str == LPCTSTR(m_strDecimalPoint) || ( str.GetLength() == 1 && m_strDecimalPoint.GetLength() > 0 && str[0] == m_strDecimalPoint[0] ) ) LCID _LCID = LANG_USER_DEFAULT; _LCID = g_ResourceManager->GetLangIdDesired(); COleCurrency _oleCurrency; VERIFY( _oleCurrency.ParseCurrency( LPCTSTR(str), 0, _LCID ) ); } return 0.0;if( g_ResourceManager->IsCustomLangAllowed() )long double lfVal = ((long double)_oleCurrency.m_cur.int64) / ((long double)10000.0);return lfVal;
|
|
Technical Support
|
Mar 4, 2011 - 10:31 AM
|
We need to know exactly which Decima symbol and Digit grouping symbol are specified in the locale settings on your computer? They should be be equal to each other.
|
|
Rado Manzela
|
Mar 4, 2011 - 1:35 PM
|
|
|
Technical Support
|
Mar 3, 2011 - 7:59 AM
|
We are sorry but we re-checked the CExtEditSystemCurrency editor control using the <span class="newgreen">ProfUIS_Controls</code> sample application and it works. Please provide more details about why you decided to fix it?
|
|
Rado Manzela
|
Mar 3, 2011 - 2:11 PM
|
I’ve tried ProfUIS_Controls now. When I set windows language format to "Slovak", currency edit shows "0 $". I click behind the "0", I press comma, then 4 for example and it asserts. I don’t know why sample is not calling CExtEditSystemCurrency::LongDoubleGet() which I’ve modified. It calls CExtEditSystemNumber::LongDoubleGetBase() which is also buggy. It converts string using _GetNumericText() which changes comma to dot, then it is parsing string with dot as decimal separator using user’s locale (set to Slovak, which is using COMMA as separator), that’s why it fails. For currency parsing I’ve added removal of currency symbol to allow using of CExtEditSystemCurrency with different currency symbol, than current system’s currency. In CExtEditSystemCurrency::LongDoubleGet() you are comparing string with str == _T(".") although the string is in user’s locale format which can use different decimal separator ("." can be thousands separator for example)
|
|
Rado Manzela
|
Feb 28, 2011 - 6:29 AM
|
I’m sorry but your editor have messed up the code. 2nd try:
long double CExtEditSystemCurrency::LongDoubleGet() const { //return CExtEditSystemCurrency::LongDoubleGet();
ASSERT_VALID( this ); CExtSafeString str = _GetNumericText( m_pEditWithBehaviorWnd->TextGet(), false ); str.Replace(m_strCurrencySymbol,_T("")); //rrr str.Trim(); //rrr if( str.IsEmpty() //rrr || str == _T(".") || str == LPCTSTR(m_strDecimalPoint) || ( str.GetLength() == 1 && m_strDecimalPoint.GetLength() > 0 && str[0] == m_strDecimalPoint[0] ) ) return 0.0;
LCID _LCID = LANG_USER_DEFAULT; if( g_ResourceManager->IsCustomLangAllowed() ) _LCID = g_ResourceManager->GetLangIdDesired(); COleCurrency _oleCurrency; VERIFY( _oleCurrency.ParseCurrency( LPCTSTR(str), 0, _LCID ) ); long double lfVal = ((long double)_oleCurrency.m_cur.int64) / ((long double)10000.0); return lfVal; }
|
|
Dominik Braendlin
|
Feb 28, 2011 - 12:01 AM
|
Dear Tech Support, I have sent this message a while ago to the tech support but have not yet received any feedback. The issue described is very critical for our software. In order for us to release our application we need this issue with min/max/close to be fixed. After the session last Thursday (20.1.2011) I thought for a moment that we could fix the min/max/close icon problem. We were able to fix some other problems but the min/max/close icon issue is still there. 1. issue Using a Prof-UIS sample I could reproduce the problem. Please find the sample in the attached zip file. If you run the sample maximize the MDI child window. You will see the min/max/close icon in the upper right corner. Then press the “MyButton” to the left in the Home ribbon panel. The code that gets executed is almost the same as I use to Hide and Show some Ribbon bar groups dynamically. As soon as the code //--------------------------------------------------------------------------- void CMainFrame::OnHomeMyButton() { m_wndRibbonBar.SetButtons( NULL ); m_wndRibbonBar.SetButtons( m_pRibbonNode ); m_wndRibbonBar.UpdateAllCommandItems(); m_wndRibbonBar.Ribbon_UpdateLayout(); //VERIFY( m_wndRibbonBar.MenuInfoGetDefault()->AccelTableLoad( IDR_MAINFRAME ) ); bool bSmallFileButtonIcon = g_PaintManager->Ribbon_IsSystemMenuIconPresent() ? true : false; LPCTSTR strFileButtonIconResID = bSmallFileButtonIcon ? (MAKEINTRESOURCE(IDB_BITMAP_UI_LOGO_ICON)) : (MAKEINTRESOURCE(IDB_BITMAP_SMALL_ICON)); VERIFY( m_wndRibbonBar.Ribbon_FileButtonGet() -> m_iconForLargeMode.m_bmpNormal.LoadBMP_Resource( strFileButtonIconResID ) ); m_wndRibbonBar.Invalidate(); } gets executed the min/max/close icon disappear. These buttons are essential! 2. Issue Did you have any chance to work on those status bar icons? Remember the ones that are standard in Office 2010. You have been trying to change some code to match the background color but after some time we agreed that you might put it in some extra class. Thanks so much for your support. Regards, Adrian
|