Subject |
Author |
Date |
|
Sergio Saiz Garcia
|
Mar 10, 2010 - 5:35 AM
|
Hi,
I installed the prof-uis and at the moment have found several problems:
1) no MSDN integrated Help 2) In VS 2008 when I try to create a Prof-uis application using ProfUISAppWizard, dont create this and i get the next message "Creating project ...... project create failed"
I use: OS: Window XP professional Compiler: Microsoft Visual Studio 2008 Professional
You can help me fast ?
|
|
Claudiu Tanasescu
|
Mar 11, 2010 - 1:58 AM
|
And about MSDN integrated Help(see http://www.prof-uis.com/prof-uis/feature-tour/tour_help.aspx)? After installing prof-uis have not integrated help into the MSDN in Visual Studio.
And on another subject, modifying ProfUISAppWizard.vsz(changing "Wizard=VsWizard.VsWizardEngine.8.0" with "Wizard=VsWizard.VsWizardEngine.9.0" ), I no longer get the error. bringing the problem does not seem to be of VS, is a problem with your wizard.
|
|
Claudiu Tanasescu
|
Mar 19, 2010 - 7:03 AM
|
I have not received a reply yet about MSDN integrated Help .....
|
|
Technical Support
|
Mar 10, 2010 - 2:07 PM
|
|
|
Technical Support
|
Mar 19, 2010 - 12:10 PM
|
We confirm this fix. We will add it into the next release. Thank you.
As for the MSDN integrated help, we checked your log file that you sent to us. It shows that the Prof-UIS Help was successfully integrated into Visual Studio 2008 Help. Could you check that the filter in the Visual Studio help is cleared?
|
|
Claudiu Tanasescu
|
Mar 23, 2010 - 1:01 PM
|
You’re right, it was the filter. By setting the filter to "unfiltered", it works.
Thks.
|
|
M. Gamal
|
Mar 10, 2010 - 2:42 AM
|
Hello, When resizing a CExtListCtrl’s column header in a static unicode debug (and release) builds of any Prof-UIS sample that has a CExtListCtrl (e.g. ProfUIS_Controls) I get a black flickering line along the left border of the column being resized. This doesn’t happen in the static MBCS builds. In addition resizing column headers is noticeably slower in the unicode builds (kind of sluggish) than it is in the MBCS builds. Both cases above are true when I define __EXT_MFC_ENABLE_TEMPLATED_CHARS and __EXT_MFC_COMPILED_WITH_NATIVE_WCHAR_T in the Prof-UIS library and the sample. Any thoughts on what may be the cause of this? Thanks.
|
|
Technical Support
|
Mar 10, 2010 - 2:11 PM
|
First of all, template class based strings and characters is a unique feature of Prof-UIS which uses the latest C++ tricks like partial template specialization. We developed this feature to allow usage of different <b>native w_char_t support</code> options in Prof-UIS and Prof-UIS based projects. This feature is needed when you have more than one Prof-UIS based projects which use different <b>native w_char_t support</code> options due some reasons and you want to provide only one Prof-UIS DLL module with several Prof-UIS based EXE modules in scope of one your product installation. The template based character and string support is absolutely unreasonable and unneeded feature in static Prof-UIS library. We strongly recommend you to use the same <b>native w_char_t support</code> option both in Prof-UIS static library and in your projects based on Prof-UIS static library.
|
|
M. Gamal
|
Mar 11, 2010 - 12:04 AM
|
Perhaps I didn’t explain myself very clearly, excuse me.. This issue happens even with the ’out of the box’ build settings for static unicode builds of Prof-UIS, i.e. When I let the wizard build the libraries for me. And when I build the libraries and samples myself without changing any settings of any kind or make any changes to code whatsoever. I tried defining: __EXT_MFC_ENABLE_TEMPLATED_CHARS and __EXT_MFC_COMPILED_WITH_NATIVE_WCHAR_T and it made no difference. And of course I use the same settings in the library and the Prof-UIS sample or my project! Prof-UIS precompiled samples are a dynamic MBCS build, could you please try it with a static Unicode build. Thank you.
|
|
Technical Support
|
Mar 12, 2010 - 1:24 AM
|
You reported the issue which is specific to the Unicode version of the Windows Common controls library because it can be reproduced only with a Unicode Prof-UIS version and using any Visual C++ version. This issue is related to the HDN_TRACK and HDN_ENDTRACK notifications handling code inside the list view common control. To fix it, please update the source code for the following methods: void CExtHeaderCtrl::OnMouseMove( UINT nFlags, CPoint point )
{
ASSERT_VALID( this );
// CHeaderCtrl::OnMouseMove( nFlags, point );
nFlags;
if( m_nPressingColNo >= 0 )
{
CExtPopupMenuTipWnd * pATTW = OnAdvancedPopupMenuTipWndGet();
if( pATTW != NULL )
pATTW->Hide();
if( m_bOnDividerAtRight )
{
CPoint ptScreenPressing = point;
ClientToScreen( &ptScreenPressing );
INT nExtent = ptScreenPressing.x - m_ptScreenPressing.x + m_nHelperInitialResizingExtent;
HeaderItemExtentSet( m_nPressingColNo, nExtent );
_DoSetCursor();
if( m_bOnDividerAtRight )
{
HWND hWndParent = ::GetParent( m_hWnd );
if( hWndParent != NULL )
{
UINT nOwnID = UINT( GetDlgCtrlID() );
HD_NOTIFY _data, _data2;
::memset( &_data, 0, sizeof(HD_NOTIFY) );
::memset( &_data2, 0, sizeof(HD_NOTIFY) );
_data.hdr.hwndFrom = m_hWnd;
_data.hdr.idFrom = nOwnID;
_data.iButton = 0;
_data.iItem = m_nPressingColNo; // nColNo;
_data.hdr.code = HDN_TRACK;
HDITEM hdItemBuffer; // to avoid common controls crashing
::memset( &hdItemBuffer, 0, sizeof(HDITEM) );
hdItemBuffer.mask = HDI_WIDTH;
hdItemBuffer.cxy = nExtent;
_data.pitem = &hdItemBuffer;
::memcpy( &_data2, &_data, sizeof(HD_NOTIFY) );
#if (defined _UNICODE)
::LockWindowUpdate( hWndParent );
#endif // (defined _UNICODE)
::SendMessage( hWndParent, WM_NOTIFY, WPARAM(nOwnID), LPARAM(&_data) );
#if (defined _UNICODE)
::LockWindowUpdate( NULL );
#endif // (defined _UNICODE)
_data2.hdr.code = HDN_ITEMCHANGED;
::SendMessage( hWndParent, WM_NOTIFY, WPARAM(nOwnID), LPARAM(&_data2) );
if( ::IsWindow( hWndParent ) && ::IsWindowVisible( hWndParent ) )
::InvalidateRect( hWndParent, NULL, TRUE );
} // if( hWndParent != NULL )
} // if( m_bOnDividerAtRight )
return;
}
else if( ! m_bOnButton )
{
if( _DndIsAllowed( m_nPressingColNo ) )
{
CPoint ptOffset = _DndGetStartOffset();
CPoint ptClientPressing;
ptClientPressing = m_ptScreenPressing;
ScreenToClient( &ptClientPressing );
CPoint ptDiff = ptClientPressing - point;
if( abs(ptDiff.x) >= ptOffset.x || abs(ptDiff.y) >= ptOffset.y )
{
_DndDo( m_nPressingColNo, m_ptScreenPressing );
return;
}
}
}
}
bool bOnButton = false, bOnDividerAtRight = false;
INT nColNo = -1;
if( CExtPopupMenuWnd::TestHoverEnabledFromActiveHWND( m_hWnd ) )
{
CPoint ptScreen;
ptScreen = point;
ClientToScreen( &ptScreen );
if( ::WindowFromPoint( ptScreen ) == m_hWnd )
nColNo = HitTestHeaderItem( point, &bOnButton, &bOnDividerAtRight );
}
bool bHoverChanged = false;
if( m_nHoverColNo != nColNo
|| m_bOnButton != bOnButton
|| ( m_bOnDividerAtRight != bOnDividerAtRight && ( ! CExtPopupMenuWnd::IsKeyPressed( VK_LBUTTON ) ) )
)
{
bHoverChanged = true;
m_nHoverColNo = nColNo;
m_nHoverIndex = ColNo2VisualIndex( m_nHoverColNo );
m_bOnButton = bOnButton;
m_bOnDividerAtRight = bOnDividerAtRight;
if( m_bOnDividerAtRight )
{
HWND hWndParent = ::GetParent( m_hWnd );
if( hWndParent != NULL )
{
UINT nOwnID = UINT( GetDlgCtrlID() );
HD_NOTIFY _data;
::memset( &_data, 0, sizeof(HD_NOTIFY) );
_data.hdr.hwndFrom = m_hWnd;
_data.hdr.idFrom = nOwnID;
_data.iButton = 0;
_data.iItem = nColNo;
_data.hdr.code = HDN_BEGINTRACK;
HDITEM hdItemBuffer; // to avoid common controls crashing
::memset( &hdItemBuffer, 0, sizeof(HDITEM) );
_data.pitem = &hdItemBuffer;
::SendMessage( hWndParent, WM_NOTIFY, WPARAM(nOwnID), LPARAM(&_data) );
} // if( hWndParent != NULL )
} // if( m_bOnDividerAtRight )
}
if( bHoverChanged )
{
if( m_nPressingColNo < 0 )
{
HWND hWndCapture = ::GetCapture();
if( m_nHoverColNo >= 0 )
{
if( m_hWnd != hWndCapture )
SetCapture();
if( m_nAdvancedTipStyle != INT(CExtPopupMenuTipWnd::__ETS_NONE)
&& (! CExtPopupMenuWnd::IsMenuTracking() )
)
{
CExtPopupMenuTipWnd * pATTW = OnAdvancedPopupMenuTipWndGet();
if( pATTW != NULL )
{
const CExtHeaderCtrl::EXTENDED_ITEM_DATA & _eii = ExtendedItemDataGet( m_nHoverColNo );
CRect rcArea;
if( GetItemRect( m_nHoverColNo, rcArea ) )
{
CRect _rcItem, _rcIcon, _rcText, _rcSortArrow, _rcButton, _rcButtonIcon;
bool bSorted = false, bSortedAscending = false;
OnCalcHeaderItemLayout(
m_nHoverColNo,
rcArea,
_rcItem,
_rcIcon,
_rcText,
_rcSortArrow,
_rcButton,
_rcButtonIcon,
&bSorted,
&bSortedAscending
);
if( m_bOnButton )
{
rcArea.left = _rcButton.left;
rcArea.right = _rcButton.right;
}
else
{
rcArea.left = _rcItem.left;
rcArea.right = _rcItem.right;
}
ClientToScreen( &rcArea );
OnAdvancedPopupMenuTipWndDisplay(
*pATTW,
rcArea,
m_bOnButton ? LPCTSTR(_eii.m_strTipTextButton) : LPCTSTR(_eii.m_strTipTextItem)
);
}
} // if( pATTW != NULL )
}
}
else
{
if( m_hWnd == hWndCapture )
ReleaseCapture();
}
} // if( m_nPressingColNo < 0 )
Invalidate();
_DoSetCursor();
} // if( bHoverChanged )
}
void CExtHeaderCtrl::_CancelActions()
{
ASSERT_VALID( this );
if( m_bCancelingActions )
return;
m_bCancelingActions = true;
if( m_bOnDividerAtRight )
{
HWND hWndParent = ::GetParent( m_hWnd );
if( hWndParent != NULL )
{
UINT nOwnID = UINT( GetDlgCtrlID() );
HD_NOTIFY _data, _data2;
::memset( &_data, 0, sizeof(HD_NOTIFY) );
::memset( &_data2, 0, sizeof(HD_NOTIFY) );
_data.hdr.hwndFrom = m_hWnd;
_data.hdr.idFrom = nOwnID;
_data.iButton = 0;
_data.iItem = m_nPressingColNo; //nColNo;
_data.hdr.code = HDN_ENDTRACK;
HDITEM hdItemBuffer; // to avoid common controls crashing
::memset( &hdItemBuffer, 0, sizeof(HDITEM) );
_data.pitem = &hdItemBuffer;
::memcpy( &_data2, &_data, sizeof(HD_NOTIFY) );
#if (defined _UNICODE)
::LockWindowUpdate( hWndParent );
#endif // (defined _UNICODE)
::SendMessage( hWndParent, WM_NOTIFY, WPARAM(nOwnID), LPARAM(&_data) );
#if (defined _UNICODE)
::LockWindowUpdate( NULL );
#endif // (defined _UNICODE)
_data2.hdr.code = HDN_ITEMCHANGED;
::SendMessage( hWndParent, WM_NOTIFY, WPARAM(nOwnID), LPARAM(&_data2) );
if( ::IsWindow( hWndParent ) && ::IsWindowVisible( hWndParent ) )
::InvalidateRect( hWndParent, NULL, TRUE );
} // if( hWndParent != NULL )
} // if( m_bOnDividerAtRight )
if( ( m_nHoverColNo >= 0 || m_nPressingColNo >= 0 )
&& GetSafeHwnd() != NULL
)
Invalidate();
m_ptScreenPressing.x = m_ptScreenPressing.y = m_nHelperInitialResizingExtent = -32767;
m_nHoverColNo = m_nHoverIndex = m_nPressingColNo = m_nPressingIndex = -1;
m_bOnButton = m_bOnDividerAtRight = false;
if( ::GetCapture() == m_hWnd )
ReleaseCapture();
m_bCancelingActions = false;
}
|
|
M. Gamal
|
Mar 10, 2010 - 2:46 AM
|
continued: this is most visible in the first column of the list control. I am using Visual Studio 2008.
|
|
Robert Webb
|
Mar 9, 2010 - 4:53 PM
|
Hi, We are porting old MFC code to Prof-UIS. But changing from CTreeCtrl to CAdvTreeCtrl means we lose our check boxes. We defined our check boxes using: m_treeCtrl.ModifyStyle(0, TVS_CHECKBOXES); This is suggested in the MSDN help for CTreeCtrl::SetCheck(). I know there’s some new way to set up check boxes using something like this: m_treeCtrl.TreeItemInfoGet(hItem).m_eCheckBoxType = CExtTreeCtrl::e_cbt_check_box; But it would obviously be easier if we didn’t have to change code to be Prof-UIS specific. Shouldn’t CAdvTreeCtrl be back-compatible? Thanks, Rob.
|
|
Technical Support
|
Mar 10, 2010 - 2:06 PM
|
Yes, the CExtTreeCtrl control is only partially back-compatible with the MFC’s CTreeCtrl control. Our tree control provides richer features than those in a tree view common control. Not all the standard notifications of the tree view common control meet the requirements of the CExtTreeCtrl control. That’s why you should override the CExtTreeCtrl control’s virtual methods in most cases. If you need only the standard CTreeCtrl control with themed by Prof-UIS scroll bars, then you can use the CExtNCSB < CTreeCtrl > template based class. The CExtNCSB template decorator class adds themed-by-Prof-UIS scroll bars to other windows.
|
|
Robert Webb
|
Mar 10, 2010 - 5:03 PM
|
Well I’ve got it working using the CExtTreeCtrl now. However you didn’t comment on the values returned by HitTest(). This appears to be a bug in Prof-UIS. When a check-box is present (I didn’t test other times), TVHT_ONITEMLABEL is returned when clicking on the check-box, while TVHT_ONITEMRIGHT is returned when clicking on the label. These are simply wrong aren’t they? The label should return TVHT_ONITEMLABEL, and the check-box should return TVHT_ONITEMSTATEICON. Thanks, Rob.
|
|
Technical Support
|
Mar 11, 2010 - 7:34 AM
|
Please use the CExtTreeCtrl::TreeItemHitTest() method and __EXT_TVHT_*** flags.
|
|
Robert Webb
|
Mar 9, 2010 - 6:47 PM
|
Oops, I meant CExtTreeCtrl above, not CAdvTreeCtrl. I’ve played with this a bit more, trying to do it the Prof-UIS way. It seems check boxes also can’t be ticked in the same way as we used to use for CTreeCtrl (using TreeView_SetItem()), but I’ve sorted that out too. Now my problem is with the result from CExtTreeCtrl::HitTest(pt, &flags). For items with check boxes, it seems to set flags to TVHT_ONITEMLABEL when clicking on the check box. That can’t be right can it? That should mean clicking on the text. If you do click on the text it returns TVHT_ONITEMRIGHT, which is also wrong. With the MFC CTreeCtrl, clicking on the check box sets flags to TVHT_ONITEMSTATEICON, which our code relies on. Thanks, Rob.
|
|
Robert Webb
|
Mar 9, 2010 - 6:58 PM
|
Hmm, a search of Prof-UIS code shows that TVHT_ONITEMSTATEICON is never set or used at all, so it looks like this was just left out? This should be returned when clicking on the check box. Rob.
|
|
Krister Goodh
|
Mar 9, 2010 - 3:21 AM
|
Hello When I use theme Office 2007 Luna Blue (which I have subclassed and worked a lot on so I don’t want to change) I have a problem that I can reproduce in sample application "Property Grid Sample". The main window does not get inactive frame when showing modal dialogs or message boxes. I use Prof-UIS version 2.88. How to reproduce: * Start aplication "Property Grid Sample" * Select theme Office 2007 Luna Blue * Press (lower right) "About..." * About box openes but now main window still has active frame * Change to other aplication by Alt+tab * Change back by Alt+tab * Now main window has inactive frame and about window active frame
Is there a way around this? (I have the same problem when using MessageBox() or CExtMsgBox::DoMsgBox() .) /Jon
|
|
Technical Support
|
Mar 9, 2010 - 11:25 AM
|
Fixed. Thank you for reporting this issue. Please drop us an e-mail to the support mail box at this web site so we will provide you with the source code update.
|
|
Rado Manzela
|
Mar 8, 2010 - 8:27 AM
|
I need to display some rows in CExtTreeGridWnd with the same background as outer cells. I’ve overrided OnGridHookCellPaintBackground(), but I need to get row’s HTREEITEM to assign correct background (as efficiently as possible). How can I do this?
I’ve tried this: bool CChildView::OnGridHookCellPaintBackground(
const CExtGridCell & _cell,
CDC & dc,
LONG nVisibleColNo,
LONG nVisibleRowNo,
LONG nColNo,
LONG nRowNo,
INT nColType,
INT nRowType,
const RECT & rcCellExtra,
const RECT & rcCell,
const RECT & rcVisibleRange,
DWORD dwAreaFlags,
DWORD dwHelperPaintFlags
) const
{
const CExtTreeGridDataProvider &dp = GetTreeData();
const CExtTreeGridCellNode *_c = dp.TreeNodeGetByVisibleRowIndex(nRowNo);
but the last line asserts here in the very first call:
CExtTreeGridCellNode * CExtTreeGridDataProvider::_Tree_NodeGetByVisibleRowIndex( ULONG nRowNo )
{
ASSERT_VALID( this );
CExtGridDataProvider & _DP = _Tree_GetCacheDP();
nRowNo = _Tree_MapRowToCache( nRowNo );
CExtTreeGridCellNode * pNode =
STATIC_DOWNCAST(
CExtTreeGridCellNode,
_DP.CellGet( 0, nRowNo )
);
ASSERT_VALID( pNode ); // ASSERTS (pNode=NULL)
return pNode;
} Is it bug, or am I doing something wrong? (I’m using 2.87) Thank you
|
|
Technical Support
|
Mar 9, 2010 - 8:37 AM
|
The CExtTreeGridWnd::ItemGetByVisibleRowIndex() method can convert the nRowNo parameter into a HTREEITEM tree row handle. The tree rows under collapsed tree rows do not have visible row indices. But the painting methods are always invoked for displayed tree rows which have plain row indices. You should not access the tree grid data provider because it can reserve additional invisible rows and columns at run-time. That’s why you can come across unwanted assertion failures.
|
|
Rado Manzela
|
Mar 10, 2010 - 1:15 AM
|
What is the solution then? My tree contains more types of cells derived from string, numeric, currency cells so I don’t like idea to override OnPaintBackground in each cell type.
|
|
Technical Support
|
Mar 10, 2010 - 2:06 PM
|
You don’t have to override the CExtGridCell::OnPaintBackground() virtual method of many grid cell classes. You really should override only the CExtGridWnd::OnGridHookCellPaintBackground() virtual method in your tree grid class and return true flag from your overridden virtual method only for those grid cells whose background was repainted by your method. We explained you how to get the HTREEITEM handle of the tree row. Now you should decide whether to paint custom background for all/some grid cells in this tree row. Only you can really know which of tree rows should have custom background. For instance, you can get some grid cell from some column and analyze its data, then decide whether you should paint custom background in this tree row. We need to know more details about your task to provide you with ready to use source code. For your information: the wndGrid.PmBridge_GetPM()->Grid_PaintHeaderBackground( . . . ) code draws the header cell background. You can see how to do this in the CExtGridCell::OnPaintBackground() virtual method. Additionally, we think you should not paint custom background for the selected and/or focused grid rows. The dwHelperPaintFlags parameter is present in all the painting methods of grid cells and grid control. This parameter contains a set of the __EGCPF_*** flags. If both the __EGCPF_HIGHLIGHTED_BY_FOCUSED_COLUMN|__EGCPF_HIGHLIGHTED_BY_FOCUSED_ROW flags present, then the grid cell is focused. If both the __EGCPF_HIGHLIGHTED_BY_SELECTED_COLUMN|__EGCPF_HIGHLIGHTED_BY_SELECTED_ROW flags present, then the grid cell is selected. If you are using the full row selection model, then you should test only the __EGCPF_HIGHLIGHTED_BY_FOCUSED_COLUMN and __EGCPF_HIGHLIGHTED_BY_SELECTED_COLUMN flags presence.
|
|
Rado Manzela
|
Mar 11, 2010 - 2:00 AM
|
Thank you for your help. I apologize I haven’t realized that you’ve suggested me different function than I was using, I’ve thought you are just telling me that I cannot do that.
|
|
Rado Manzela
|
Mar 9, 2010 - 8:08 AM
|
I’ve also added test to filter out outer cells at beginning of the function, but it didn’t help
if (nRowType || nColType)return false;
|
|
Dave Calkins
|
Mar 8, 2010 - 8:16 AM
|
We’re using the C++ Prof-UIS DLL under VS2005. VS2010 is set to release on April 12th. What are your plans for supporting VS2010? Do you have a rough schedule for when you plan to release a version of the library which supports building under VS2010?
|
|
Technical Support
|
Mar 9, 2010 - 8:35 AM
|
Version 2.88 is compatible with Visual Studio 2010 beta 1 only. The newest version 2.89 is compatible with the latest Visual Studio 2010 beta 2. We guess the Visual Studio release version will not contain any break changes in comparison with the latest Visual Studio 2010 beta 2 and, probably, we will not need to do any code changes in Prof-UIS 2.89 for reaching compatibility with Visual Studio 2010 release version. You can drop us an e-mail to the support mail box so we will provide you with the latest Prof-UIS 2.89 source code which also includes beta version of Visual Studio 2010 UI theme. Of course, we would prefer to talk about 100% compatibility with Visual Studio 2010 only after testing the released version.
|
|
Andreas Spachtholz
|
Mar 5, 2010 - 5:39 AM
|
Hi, we are using CExtComboBox and we want to show a tooltip for the combobox. initially it works fine, the dialog open, and I can see the tooltip when the mouse is over the combobox. After some second it dissapears and now the tooltip will not show up again. The same thing happen, if we select an item of the combobox. No tooltip is shown any more for the combobox. Do you know this bug? Any workaround? Thanks. BR, Andreas
|
|
Andreas Spachtholz
|
Mar 8, 2010 - 2:42 AM
|
Hi, I cannot confirm this. We just built the ProfUIS_Controls Application (2.88 with ANSI Debug, Windows XP (english), Visual Studio 2008). We added one line to the PageHyperLinks.cpp ---------------------------
m_wndLinkCursor.SetItemData( nIndex, (DWORD)IDC_SIZEALL
);
m_wndLinkCursor.SetCurSel( nInitSel
)
-> m_wndLinkCursor.SetTooltipText( "Hallo"
);---------------------------
Now we get the same behaviour in you application as we can observe in ours. The tooltip appears - after some second it dissapears and never comes back. The some problem occurs when the selected item was changed. Do we something wrong? Can you tell me, what sample application you have used to check it? Thanks. Regards, Andreas
|
|
Technical Support
|
Mar 9, 2010 - 8:36 AM
|
We reproduced this issue. Its specific for Windows XP only. Please give us a few days to fix it.
|
|
Andreas Spachtholz
|
Apr 6, 2010 - 11:31 PM
|
Hi, could you fix this issue meanwhile? Thanks. Kind Regards, Andreas
|
|
Technical Support
|
Apr 13, 2010 - 5:50 AM
|
|
|
Andreas Spachtholz
|
Mar 8, 2010 - 2:42 AM
|
Hi, I cannot confirm this. We just built the ProfUIS_Controls Application (2.88 with ANSI Debug, Windows XP (english), Visual Studio 2008). We added one line to the PageHyperLinks.cpp ---------------------------
m_wndLinkCursor.SetItemData( nIndex, (DWORD)IDC_SIZEALL
);
m_wndLinkCursor.SetCurSel( nInitSel
)
-> m_wndLinkCursor.SetTooltipText( "Hallo"
);---------------------------
Now we get the same behaviour in you application as we can observe in ours. The tooltip appears - after some second it dissapears and never comes back. The some problem occurs when the selected item was changed. Do we something wrong? Can you tell me, what sample application you have used to check it? Thanks. Regards, Andreas
|
|
Technical Support
|
Mar 5, 2010 - 10:25 AM
|
We used the ProfUIS_Controls sample application of Prof-UIS 2.88 to check the issue you reported. The Buttons dialog page contains the Cursor combo box. This combo box is subclassed by the CExtComboBox m_Cursor; property of the CPageButtons class and initialized in the CPageButtons::OnInitDialog() method. We added the following line into this method:
m_Cursor.SetTooltipText( _T("Cursor") );
Now the Cursor combo box displays the tooltip. We saw tooltip many times with and without changing the combo box selection. So, the first thing we suspect is that the problem is specific for your application. We need your help in reproducing it.
|
|
Andreas Spachtholz
|
Mar 8, 2010 - 2:43 AM
|
Hi, I cannot confirm this. We just built the ProfUIS_Controls Application (2.88 with ANSI Debug, Windows XP (english), Visual Studio 2008). We added one line to the PageHyperLinks.cpp ---------------------------
m_wndLinkCursor.SetItemData( nIndex, (DWORD)IDC_SIZEALL
);
m_wndLinkCursor.SetCurSel( nInitSel)
-> m_wndLinkCursor.SetTooltipText( "Hallo");--------------------------- Now we get the same behaviour in you application as we can observe in ours. The tooltip appears - after some second it dissapears and never comes back. The some problem occurs when the selected item was changed. Do we something wrong? Can you tell me, what sample application you have used to check it? Thanks. Regards, Andreas
|
|
Krister Goodh
|
Mar 5, 2010 - 4:34 AM
|
Hello! Question 1 (2): I Previously used the code below to enforce a minimum dialog size, however it’s not working to well with Prof-UIS. How can I enforce a mimimum size limit on a CExtNCW<CFrameWnd> ? (I rather want to stop resizing already on WM_SIZING and not on the later WM_SIZE .) Question 2 (2): I also have divided the window using a CExtSplitterWnd . Is there a way to enforce limits on the two halvs that does not remove any one of the two halvs when size is to small? If I use SetColumnInfo::SetColumnInfo(x,x,limit) , the column may instead disapear completely which is not wanted. Thanks. /Jon
case WM_SIZING:
{
LPRECT lprc = (LPRECT)lParam;
int changed = 0;
if (lprc->right - lprc->left < LIMIT_X)
{
switch (wParam)
{
case WMSZ_LEFT:
case WMSZ_TOPLEFT:
case WMSZ_BOTTOMLEFT:
lprc->left = lprc->right - LIMIT_X;
break;
default:
lprc->right = lprc->left + LIMIT_X;
break;
}
changed = 1;
}
if (lprc->bottom - lprc->top < LIMIT_Y)
{
switch (wParam)
{
case WMSZ_TOP:
case WMSZ_TOPLEFT:
case WMSZ_TOPRIGHT:
lprc->top = lprc->bottom - LIMIT_Y;
break;
default:
lprc->bottom = lprc->top + LIMIT_Y;
break;
}
changed = 1;
}
return changed;
}
break;
|
|
Krister Goodh
|
Mar 5, 2010 - 6:40 AM
|
I now have a workaround based on snapping WM_SIZE in one of the childs and checking splitter sizes manually there. It works, but ther’s probably a better solution...
|
|
Technical Support
|
Mar 6, 2010 - 1:27 PM
|
Prof-UIS supports skinned non-client areas. All behavior details of such skinned windows are implemented by Prof-UIS. Skinned windows do not use the Windows resizing algorithm for desktop windows. It’s written from scratch and we support the WM_SIZING message in v.2.88. You can find the following code in the ../Prof-UIS/Src/ExtNcFrame.cpp file:
if( ::SendMessage( hWnd, WM_SIZING, wParamSizingCode, LPARAM(&rcWndAdjusted) ) != 0L )
rcWnd = rcWndAdjusted;
The way you handle the WM_SIZING message works in Prof-UIS 2.88. This message isn’t supported in older Prof-UIS versions. But, of course, you can use the WM_GETMINMAXINFO message instead. The CExtSplitterWnd class in Prof-UIS is an extended version of the MFC’s CSplitterWnd class. Our splitter window is just a themed version of MFC’s splitter window. You can override the CExtSplitterBaseWnd::StartTracking() virtual method and modify the CSplitterWnd::m_rectLimit rectangle which defines the screen area enabled for drag-n-drop based resizing of splitter parts. This will allow you to limit resizing of particular splitter panes. You can override the CExtSplitterBaseWnd::RecalcLayout() virtual method and implement your splitter layout calculation. This will allow you to limit the size of particular splitter panes when the entire splitter window is resized.
|
|
Krister Goodh
|
Mar 5, 2010 - 5:21 AM
|
Question 2 (2) still open. Question 1 (2) resolution: void CExtNCW<CFrameWnd>::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
{
if (lpMMI != NULL)
{
lpMMI->ptMinTrackSize.x = LIMIT_X;
lpMMI->ptMinTrackSize.y = LIMIT_Y;
}
}
|
|
Dennis Ioakim
|
Mar 5, 2010 - 3:10 AM
|
Good day, We recently moved one of our projects from a MultiByte build to a Unicode build. Th only things changed in the project are the chars becoming wchars and strings becoming wstrings. We also compiled the DLL version of Prof-UIS by using :
#define __EXT_MFC_ENABLE_TEMPLATED_CHARS
and
#define __EXT_MFC_COMPILED_WITH_NATIVE_WCHAR_T
Our project compiles and runs successfully but upon termination, many memory leaks appear. Most of them are associated with three files from the Prof-UiS library:
ExtCmdManager.cpp
ExtCmdIcon.cpp
ExtPaintManager2.cpp So I would like to know if you have found similar issues and a way to resolve them,
and I would also like to know if there is any "special" way to handle our Unicode project that we probably overlooked. Thanks in advance.
|
|
Technical Support
|
Mar 11, 2010 - 7:37 AM
|
If your DLLs are MFC based, then you should convert all of them to Unicode and there are no other solutions available in this case. If your DLLs are non-MFC, then you can leave them as is and just pass non-Unicode strings into DLL API invocations and correctly process returned non-Unicode strings. Please provide us with more details about your DLLs.
|
|
Technical Support
|
Mar 5, 2010 - 10:23 AM
|
We suspect your application was simply terminated unexpectedly. Too many memory leaks typically mean that nothing was deallocated. This can happen if the ExitProcess() or ExitThread() APIs were invoked before complete shutdown. This can happen when an exception occurs while handling other exception. You can configure your Visual Studio to break into debugger on any exceptions even if they are handled. This will show you the point when your application terminates itself instead of performing successful shutdown actions.
|
|
Dennis Ioakim
|
Mar 11, 2010 - 2:55 AM
|
Good day, After some testing I found the cause of the leaks. In our now-Unicode project there are some calls to load non-Unicode dll’s.
When unloading those dll’s the mentioned memory leaks occur. We tested with a very simple (empty) dll and the behavior was the same.
So to reproduce this do the following: Load a Unicode dll from a Unicode Profuis test project ---> Everything ok when dll is unloaded!
Load a Multibyte dll from a Unicode Profuis test project ---> Tons of memory leaks when dll is unloaded! Once again many of the memory leaks are in ExtCmdManager.cpp and other ProfUIS files as mentioned before.
One solution is to transform those dll’s in Unicode, but some of them aren’t created by us.
What other solution could you suggest?
Thanks in advance.
|
|
Dennis Ioakim
|
Mar 15, 2010 - 8:08 AM
|
Hello again, i have found the cause of the many memory leaks. When using MFC Unicode version and calling a DLL containing MFC calls non-Unicode version or the opposite ( non-Unicode MFC project calling a Unicode MFC DLL) memory leaks appear when unloading that particular DLL file. These leaks according to Miscrosoft are false as the only true leaks are reported after program termination.
This topic is explained in more detail here: http://support.microsoft.com/kb/q167929/#@lt;/p>
So there are no real issues with the Prof-UIS library.
|
|
tera tera
|
Mar 4, 2010 - 1:26 AM
|
Hello. I want to draw a ruled line by a print preview.
Please teach a drawing method.
|
|
Technical Support
|
Mar 4, 2010 - 8:57 AM
|
Please put the following line of code into the constructor of your CExtPPVW -derived class:
m_bDrawSimpleWhiteBackground = m_bDrawSimpleBlackBorders = true;
|
|
John Ritzenthaler
|
Mar 3, 2010 - 1:45 PM
|
I have an owner-drawn area inside a dynamic control bar. I want the "look" of what I draw to match the control bar. Can you direct me to the non-client drawing logic in the source code so I can see what fonts, colors, gradients, etc. are used. I assume thet eventually I’ll need to get these from the PaintManager. Thanks.
|
|
Technical Support
|
Mar 4, 2010 - 8:49 AM
|
You should use the following paint manager’s method to draw background of everything including client and non-client window parts:
virtual bool PaintDockerBkgnd(
bool bClientMapping,
CDC & dc,
CWnd * pWnd,
LPARAM lParam = NULL
);
The bClientMapping flag indicates whether the specified device context for painting is a window client/paint device context if set to true . If this flag is false , then the device context is window device context with zero coordinate system set to the left/top corner of window non-client area. The themed background does not mean the single color fill. It can be bitmap based or gradient based in different paint managers. It can be different for dialog windows and other windows. The text color can be retrieved using the following paint manager’s method: COLORREF GetColor(
int nColorIndex,
CObject * pHelperSrc = NULL,
LPARAM lParam = 0L
) const;
The nColorIndex parameter can be the standard color index like COLOR_BTNTEXT . It also be the CExtPaintManager::e_translated_colors_t enumeration like CExtPaintManager::CLR_TEXT_OUT . The CExtPaintManager::m_FontNormal font is recommended for most of controls. You can use the CExtPaintManager::m_FontBold font if you need bold text elements.
|
|
Adrian M
|
Feb 25, 2010 - 4:36 PM
|
|
|
Technical Support
|
Feb 26, 2010 - 5:39 AM
|
The CExtProgressWnd control of Prof-UIS 2.88 supports the endless mode. You should set the CExtProgressWnd::m_bEndlessMode property to true (of course, it’s false by default). Then you should initialize the CExtProgressWnd control like the classic MFC’s CProgressCtrl control with range of values (0..100 for example) and invoke the CProgressCtrl::StepIt() method on timer running by some window in your project or invoke it on any step during some lengthy operation. This endless mode of the CExtProgressWnd control is very similar to the classic non-endless progress control’s mode. But the progress control uses the endless visual look and you can control how long each loop in it. Additionally, the CExtProgressWnd::m_nEndlessNominator and CExtProgressWnd::m_nEndlessDenominator properties of the LONG type allow you to define the size of the highlighted area in the endless progress. By default, the CExtProgressWnd::m_nEndlessNominator property is set to 1 and CExtProgressWnd::m_nEndlessDenominator property is set to 3 . This means the highlighted area is 1/3 of horizontal progress width or vertical progress height.
|
|
Adrian M
|
Feb 25, 2010 - 4:37 PM
|
Just checking the notification box.
|
|
Eric guez
|
Feb 24, 2010 - 3:22 AM
|
Hi !
I want to resize a dockbar (if fact AFX_IDW_DOCKBAR_BOTTOM) and its content ( some CExtControlBar). I know its supposed to be an user interaction, but I need to do it programaticaly to fit some content.
Is there a way to do that ?
Thanks!
|
|
Eric guez
|
Feb 27, 2010 - 2:06 AM
|
|
|
Technical Support
|
Mar 1, 2010 - 4:26 AM
|
Here is the test project demonstrating how to change the size of floating or docked bars:
http://www.prof-uis.com/download/forums/ChangeFloatingSize3.zip
Your bars are docked in a horizontal row. To change their size, you should invoke the CExtControlBar::SetInitDesizredSizeHorizontal() method and then recompute the layout of parent frame window.
|
|
Eric guez
|
Mar 11, 2010 - 6:52 AM
|
Thanks, I’ll try this.
But how can I recompute the layout of parent frame window ?
|
|
Eric guez
|
Mar 11, 2010 - 9:35 AM
|
Everything works ! Thank you
|
|
Technical Support
|
Feb 25, 2010 - 1:19 PM
|
If you have several CExtControlBar resizable control bars docked into one vertical column, then they have the same CExtDockBar parent dock bar window. The layout of all the control bars in these columns is managed by Prof-UIS automatically and the control bars are always occupy the entire column height. If you undock all the control bars from these column, then Prof-UIS will destroy the CExtDockBar window because the dock bars used by Prof-UIS resizable control bars are the dynamically allocated dock bar windows. The same is true for horizontal rows with resizable control bars. Please explain us how your resizable control bars does not fit the area of their parent dock bars and how would you like to animate them? May be, you know some other application where you saw what you asking about?
|
|
Eric guez
|
Feb 25, 2010 - 2:37 AM
|
Basicaly , I have 2 CExtControlBar in a dockbar. I want to change (or maybe animate) this dockbar to fit the content of the framewnd.
I know this approach (dock & control bar) is not is not the best one, but I can not rewrite this existing code.
|
|
Technical Support
|
Feb 24, 2010 - 1:02 PM
|
The dock bars (CDockBar in MFC, CExtDockBar in Prof-UIS) are internal MFC components. There are 4 dock bars inside the CFrameWnd window. One dock bar for each side of its parent frame window. The dock bar windows are just containers for re-dockable toolbars in the docked state. The dock bar windows are always automatically resized to occupy all the available width/height. We have no idea how they can be resized in some special way and why they should behave not by default. Please explain us what you are going to code? Additionally, please take a look at the FixedSizePanels sample application. It contains several control bars with non-default behavior and, may be, you will find what you need.
|
|
Luis Alberto Pereira
|
Feb 20, 2010 - 10:05 PM
|
Hi, I had reformat my pc. Windows Vista. I reinstall profuis 2.88 snf I had get the follow message when I try to run integration wizerd. In portuguese uma referencia foi retornada do servidor translation to english a reference was return by server I cant compile my project because VS didnt find prof-uis directorires. Can I solve this problema manually ? tahnks,
|
|
Technical Support
|
Feb 25, 2010 - 1:18 PM
|
The Integration Wizard should be running as Administrator on Windows Vista and Windows 7. The Integration Wizard provided with Prof-UIS 2.88 includes the manifest resource in its EXE module and Windows should run it automatically as Administrator. But we would like to ask you to invoke it as Administrator manually and let us know whether it runs OK?
|
|
Lars Mohr
|
Feb 26, 2010 - 7:42 AM
|
I try with and without admin rights. I use VS2008 (9.0) with English language but the OS (64Bit) is in german. And the error message is in german, too. "Eine Referenzauswertung wurde vom Server zurückgesendet"
|
|
Lars Mohr
|
Feb 25, 2010 - 5:28 AM
|
I have the same problem... I installed Prof 2.88 and if I want to start "IntegrationWizard.exe" than I get the error. OS: Win 7 64Bit VS 2008 (9.0)
|
|
Technical Support
|
Feb 21, 2010 - 12:22 PM
|
Could you elaborate on the problem? When exactly does this error occur? When using Prof-UIS Integration Wizard? When using Prof-UIS Application Wizard? When compiling projects in Visual Studio? Which version of Visual Studio are you using?
|
|
tera tera
|
Feb 18, 2010 - 8:00 PM
|
Hello. I want to connect an anchor to control in CFormView.
Please teach the connection method of the anchor.
In addition, will not there be the thing equivalent to OnInitDialog in CFormView? void CNxfMainView::OnInitialUpdate()
{
CFormView::OnInitialUpdate(); if ( SMART(m_pHekiItiGridWnd) == NULL ){
m_pHekiItiGridWnd.reset(new CNxfHekimenItiGrid ); if (! m_pHekiItiGridWnd->SubclassDlgItem ( IDC_MAIN_VIEW_GRID , this )){
return ;
}
//AddAnchor ( m_pHekiItiGridWnd->m_hWnd , __RDA_LT, __RDA_RB ); m_pHekiItiGridWnd->InitGrid();
m_pHekiItiGridWnd->ColumnAdd ( 10 );
m_pHekiItiGridWnd->RowAdd ( 10 );
} ShowSizeGrip( FALSE );
|
|
Technical Support
|
Feb 23, 2010 - 12:32 PM
|
If you don’t need scrolling in your form view, then the test project referred in our previous e-mail is not needed. You should remove the scrolling from the form view window like we described in our previous answer and use the CExtWS < CExtWA < CExtAFV < CFormView > > > class as the base class of your form view window.
If you decided to switch using CExtResizableDialog window instead of MFC’s form view window. Then you should derive you view from the generic CView MFC view class and create the child CExtResizableDialog window inside it.
|
|
tera tera
|
Feb 23, 2010 - 6:43 PM
|
I was able to program it.
However, is the how to compose of such a program all right? IMPLEMENT_DYNCREATE(CNxfWinView, CView ) :
:
:
: BEGIN_MESSAGE_MAP(CNxfWinView, CView)
//{{AFX_MSG_MAP(CNxfWinView)
ON_WM_CONTEXTMENU()
ON_WM_ERASEBKGND()
ON_WM_SETFOCUS()
//}}AFX_MSG_MAP
END_MESSAGE_MAP() int CNxfChildFrame::OnCreate(LPCREATESTRUCT lpcs)
{
if( CMuChildFrame :: OnCreate( lpcs ) == -1 )
return -1; ASSERT( m_hChildFrameIcon != NULL );
SetIcon( m_hChildFrameIcon, FALSE );
SetIcon( m_hChildFrameIcon, TRUE ); if( ! m_cNxfWinView.Create(
NULL, NULL, WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS|WS_CLIPCHILDREN,
rectDefault, this , AFX_IDW_PANE_FIRST )
)
{
ASSERT( FALSE );
return -1;
} if( ! m_InDlg.Create(
CNxfHekimenItiInDlg::IDD,
&m_cNxfWinView
//&m_wndScrollContainer*/
)
){
ASSERT( FALSE );
return -1;
}
m_cNxfWinView.Wnd_( &m_cNxfHekimenItiInDlg );
} :
:
:
: LRESULT CNxfWinView::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{ LRESULT r_res = 0;
if( m_pWnd != NULL ){
r_res = m_pWnd->SendMessage ( message, wParam, lParam );
if ( message == WM_SIZE ){
CRect rcWnd;
GetWindowRect( &rcWnd );
m_pInDlg->SetWindowPos( &CWnd::wndBottom , 0 , 0 , rcWnd.Size().cx , rcWnd.Size().cy , SWP_SHOWWINDOW | SWP_NOMOVE );
}
} return( (r_res==0)? CView::WindowProc(message, wParam, lParam):r_res );
}
|
|
Technical Support
|
Feb 24, 2010 - 1:02 PM
|
First of all, the CNxfWinView::WindowProc() method looks like very aggressive and, probably incorrect. It sends all the messages of the CNxfWinView window to some other window. This is definitively incorrect. Please describe us what you tried to implement using such aggressive code and we will try to help you. Second, the ON_WM_ERASEBKGND() handler looks like not needed. You are moving child dialog to cover entire view window area. We guess the CNxfWinView::WindowProc() method should look like:
LRESULT CNxfWinView::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
LRESULT lr = CView::WindowProc(message, wParam, lParam);
if( message == WM_SIZE && m_pInDlg->GetSafeHwnd() != NULL )
{
CRect rcWnd;
GetClientRect( &rcWnd );
m_pInDlg->SetWindowPos( &CWnd::wndBottom , 0 , 0 , rcWnd.Size().cx , rcWnd.Size().cy , SWP_SHOWWINDOW );
}
return lr;
}
|
|
Technical Support
|
Feb 21, 2010 - 12:18 PM
|
The anchoring and scrolling features are incompatible with each other. If you want to use the anchoring feature in the CExtWA < CExtAFV < CFormView > > - derived class, then you should make it non-scrollable. You should add the handler methods for the WM_SIZE , WM_HSCROLL and WM_VSCROLL messages and invoke the <class>CWnd</code> methods instead of parent class methods. Here is the example:
void CChildFormView::OnSize( UINT nType, int cx, int cy )
{
CWnd::OnSize( nType, cx, cy );
}
You should make your form view class based on the CExtWS class to make its background themed. I.e. you should derived your form view class from the CExtWS < CExtWA < CExtAFV < CFormView > > > class. If you need to use both anchoring and scrolling, then you should not use the MFC form views. You should use the CExtScrollContainerWnd window with the CExtResizableDialog dialog created inside it like demonstrated in the following test project: http:www.prof-uis.com/download/forums/TestScrollDialog3.zip
|
|
tera tera
|
Feb 23, 2010 - 1:18 AM
|
Hello. >http:www.prof-uis.com/download/forums/TestScrollDialog3.zip I do not use scroll bar.
I want to use the anchor of the dialog.
In this case how should I do it?
|
|
Il Hwan Jeong
|
Feb 16, 2010 - 6:22 AM
|
I’m using Windows XP Home Edition (Korean) and Visual Studio 2008 (English) with ProfUIS 2.88. But i can’t create ProfUIS project on Visual Studio 2008. When i tired to creat new project creation failed error message appeared on status bar. So, i had searched som many other solution on google to fix the problem, but i can’t find out the proper solution to fix. I had reinstalled visual studio 2008 but it was same. Would you give me proper solution to fix ProfUIS project creation fail. Best Regards.
|
|
Technical Support
|
Feb 16, 2010 - 10:07 AM
|
|
|
Stephan Wieland
|
Feb 16, 2010 - 1:46 AM
|
Hello all, I have a project with static MFC linked, now I don´t want to link ProfUIS also static. How can I link ProfUIS as DLL and MFC static? Sorry, but I coudn´t find these settings... Best regards SW
|
|
Stephan Wieland
|
Feb 16, 2010 - 10:50 AM
|
Thanks for your answer. I have an application my users can update over internet. i don´t want prof-uis link statically because of size. So I wanted to deliver the prof-uis dll once with the next update and then go on with only-exe-updates (of my application) So far I linked mfc statically so I didn´t have to check if the environment is installed on users side. what would you propose? Best regards SW
|
|
Technical Support
|
Feb 16, 2010 - 11:55 AM
|
The size of Prof-UIS library can be compared with size of MFC library. In case of Prof-UIS, you can decrease the library size via several ways and make the result DLL 70% smaller (i.e. 30% of maximal size):
1) Remove not needed code parts. There are a lot of lines like //#define __EXT_MFC_NO_*** near beginning of the ..\Prof-UIS\Include\Prof-UIS.h file. You can uncomment them to remove appropriate Prof-UIS components.
2) Remove the not-needed resources. Please take a look at the ..\Prof-UIS\Include\Resources\resource.rc file. First of all, you can uncomment lines like //#define __EXT_MFC_NO_RESOURCES_*** to remove not needed localizations. Prof-UIS supports 40 languages. In the most cases customer apps does not need all the translations. Second, The resources of Office 2007 and Office 2010 UI themes contain a lot of uncompressed BMP images. If you are not using these UI themes, then you can comment the #include "Res2007\\Res2007.rc" and/or #include "Res2010office\\Res2010office.rc" lines. Third, the geo controls have their own bitmap resources including large resolution image of earth map. If you are not using the geo controls, then you can comment the #include "ResGeoControls\\ResGeoControls.rc" line of code.
But you can use a simpler approach. The Prof-UIS library can be compressed using ZIP/RAR/7z algorithms to much smaller size. Your Internet updating software can be tuned for transferring compressed files. The 7z files created with highest compression setting look like the smallest. The MFC DLLs also can be compressed very well.
If your software is updated via Internet, then you have reason to split it into much possible count of DLLs to make sizes of updates smaller. Even MFC library has service packs and you may have reasons to switch to latest MFC.
|
|
Technical Support
|
Feb 16, 2010 - 10:10 AM
|
This configuration you would like to have is not supported. If the MFC was internal part of your compiled EXE module, all MFC’s functions and methods would become not exported and external DLLs have no chances to access MFC code. Would you explain why you want to hide MFC statically and leave Prof-UIS as DLL?
|
|
John Ritzenthaler
|
Feb 15, 2010 - 2:53 PM
|
I’m trying to implement a dynamic toolbar that can be docked in the main window (SDI) or floated. I can do this but when I click on the menu in the control bar handle, I get an assert because the EDUIT is __EDUIT_UNSUPPORTED_ENVIRONMENT. This is because my view window isn’t a tab page container:
m_pWndTabPageContainer =DYNAMIC_DOWNCAST(ExtTabPageContainerWnd,pWndCenter); returns null.
I don’t want the tabbing option. I only have one dynamic bar. What’s the best way to handle this?
Thanks.
|
|
Technical Support
|
Feb 16, 2010 - 11:56 AM
|
We improved dynamic resizable control bars in Prof-UIS 2.89. Now the __EDUIT_UNSUPPORTED_ENVIRONMENT constant do not mean that dynamic bars cannot work in the detected environment. It means the environment does not allow dynamic bars to switch into document mode. Please drop us an e-mail to the support mail box at this web site so we will provide you with the source code update. Then you can compile and take a look at the following sample application:
http://www.prof-uis.com/download/forums/SDI_DynamicBars_NoTabs.zip
|
|
Stephan Wieland
|
Feb 15, 2010 - 1:32 PM
|
Hello, how can I change the orange color of all buttons and menus when pressed or hovered using 2010 themes? Best regards SW
|
|
Technical Support
|
Feb 15, 2010 - 2:11 PM
|
These buttons are bitmap based. You can create your paint manager class and modify/reload appropriate Office 2010 theme resources. You can simply load your custom images or colorize loaded by default images using the CExtBitmap class methods. The ..\Prof-UIS\Include\Resources\Res2010office folder contains images uses by Office 2010 paint managers. The file names are the same as resource defines. The following bitmaps are loaded in the paint manager’s constructor:
CExtBitmapCache
m_arrBmpPushBtnSimpleH, m_arrBmpPushBtnSimpleV,
m_arrBmpPushBtnSDDLeftH, m_arrBmpPushBtnSDDLeftV,
m_arrBmpPushBtnSDDRightH, m_arrBmpPushBtnSDDRightV;
First two bitmaps are horizontal and vertical images of simple push button. Second two are left parts of split buttons. Last two are right/drop-down parts of split buttons. P.S. We are working on the resizable control bar layout issue you reported. The main problem is that it’s very hard to reproduce it. It definitively occurs very occasionally.
|
|
John Ritzenthaler
|
Feb 12, 2010 - 3:24 PM
|
How is a dynamic control bar notified when it is shown or hidden? Should I just override WindowProc and catch the WM_SHOWWINDOW message?
|
|
Technical Support
|
Feb 13, 2010 - 11:26 AM
|
The most universal way of controlling the control bar’s position and determining when its visibility state has changed is to handle the control bar’s WM_WINDOWPOSCHANGED message.
|