Forum
Please
Log In
to post a new message or reply to an existing one. If you are not registered, please
register.
NOTE: Some forums may be read-only if you are not currently subscribed to
our technical support services.
Subject |
Author |
Date |
|
Robert Webb
|
Nov 24, 2008 - 6:03 PM
|
Hi, I have a combo box on my ribbon bar (created using flags __ECTN_TBB_TEXT_FIELD|__ECTN_TBB_COMBO). It only has a few items in it, but is far too tall when opened, leaving lots of space at the end. There is a call DropDownHeightMaxSet() but it seems to set the actual height rather than the maximum height. The way MFC combo boxes typically work is that you set the maximum height, but it will be shorter if there aren’t enough items to fill that height. But Prof-UIS combo boxes seem to always use the full height. I can fix this of course by passing a smaller height to DropDownHeightMaxSet(), but then I need to pass a different height to each combo box, based on trial and error to get it just right, or based on font heights etc which is messy, and would need to change if I ever added another value to the list. Is there no way to automatically make the drop-down height match the number of items within it (up to the maximum height set), as happens automatically with native MFC? Thanks, Rob.
|
|
Technical Support
|
Nov 26, 2008 - 1:37 PM
|
The entire size of the popup list box is measured in the CExtCustomizeSite::OnPopupListBoxMeasureTrackSize() virtual method. Default implementation of this method does nothing. We can code this method and make its body measuring entire size of the popup list box in the same way like the CMainFrame::OnPopupListBoxMeasureTrackSize() method does for the ID_SE_STYLE_LIST combo field displaying list of styles in the StyleEditor sample application. The entire size of the popup list box can be computed through measuring sizes of each list box item. This algorithm is not effective if list box contains thousands of items. That is why we did not coded the body of the CExtCustomizeSite::OnPopupListBoxMeasureTrackSize() virtual method yet. It’s possible to optimize the popup list box size calculation partially. The CExtCustomizeSite::OnPopupListBoxMeasureTrackSize() virtual method knows toolbar button pointer which needs to display the popup list box. It’s possible to get toolbar window pointer and toolbar button position on the screen. This allows to optimize calculation of list box height. If we know toolbar button position on the screen, then the list box height should be smaller than the monitor height where toolbar button is located. We cannot optimize the calculation of the list box width. The width is typically less than any smallest monitor. This means the CExtCustomizeSite::OnPopupListBoxMeasureTrackSize() virtual method will always walk through all the list box items and measure their sizes for computing correct list box widths displaying entirely all the items. The same problem also present in all the popup list boxes displayed by grid cell classes. It would be interesting to know your point of view whether you still expect us to code the generically working popup list box size calculation as part of Prof-UIS?
|
|
Robert Webb
|
Nov 26, 2008 - 6:33 PM
|
The StyleEditor example is useful, but not quite useful enough. The code is specific to that drop-down, making use of a member variable containing the list of styles. I would like a generic solution. OnPopupListBoxMeasureTrackSize() is one of the few OnPopupListBox* callbacks which doesn’t get passed a reference to the CListBox. Why is that? How can I get the CListBox within that function? Then I can enumerate over its items, or since my drop-downs will probably all contain items of the same height, all I really need to know is how many items it contains. Hmm, maybe it’s a chicken and egg problem as the size is probably requested before the list box is created, but we still need a way to iterate over the items. And yes, I think you should provide a built-in solution for this. I’d suggest additional flags to choose whether the drop-down should be auto-height (up to the maximum set) and/or auto-width. If it is auto-height but not auto-width, then you can optimise quite well, only iterating over items till the max height (or screen height) is reached, so thousands of items would not be a problem. Maybe even provide a flag to say that all items are the same height, as a hint to speed up calculation (no iterating, just a multiply). Rob.
|
|
Technical Support
|
Dec 1, 2008 - 10:13 AM
|
We have implemented automatically measured popup list boxes in toolbars, menus, ribbons and grid cells. The following methods still can be used for measuring popup list box size but they are invoked before creation of popup menu and list box windows: - CExtCustomizeSite::OnPopupListBoxMeasureTrackSize() - used in customizable toolbars and menus - CExtBarTextFieldButton::OnPopupListBoxMeasureTrackSize() - used in non customizable toolbars and menus - CExtRibbonPage::OnPopupListBoxMeasureTrackSize() - used in ribbon bar and ribbon page - CExtGridCell::OnPopupListBoxMeasureTrackSize() - used in all the grid cells We have implemented new list box measurement methods which are invoked when both popup menu and list box windows are already created but not displayed on the screen: - CExtCustomizeSite::OnPopupListBoxAdjustSize() - used in customizable toolbars and menus - CExtBarTextFieldButton::OnPopupListBoxAdjustSize() - used in non customizable toolbars and menus - CExtRibbonPage::OnPopupListBoxAdjustSize() - used in ribbon bar and ribbon page - CExtGridCell::OnPopupListBoxAdjustSize() - used in all the grid cells The new methods are measuring list box sizes via sending the standard WM_MEASUREITEM() message for list box items. All the popup list boxes in Prof-UIS are owner draw and by default are painted using classic look of list box items. In case of customizable toolbars/menus and ribbon controls the maximal size of popup list box can be specified in constructor parameters of the CExtCustomizeCmdTreeNode or CExtRibbonNode classes:
CExtCustomizeCmdTreeNode(
UINT nCmdIdBasic = 0L,
UINT nCmdIdEffective = 0L,
CExtCustomizeCmdTreeNode * pParentNode = NULL,
DWORD dwFlags = 0L,
__EXT_MFC_SAFE_LPCTSTR strTextInToolbar = NULL,
__EXT_MFC_SAFE_LPCTSTR strTextInMenu = NULL,
__EXT_MFC_SAFE_LPCTSTR strTextUser = NULL,
LPARAM lParam = 0L,
CExtCmdIcon * pIconCustomized = NULL
#if (!defined __EXT_MFC_NO_BUILTIN_TEXTFIELD)
,
INT nTextFieldWidth = 100,
INT nDropDownWidth = -2, // (-1) - auto calc, (-2) - same as button area
INT nDropDownHeightMax = 250
#endif
);
CExtRibbonNode(
UINT nCmdIdBasic = 0L,
UINT nCmdIdEffective = 0L,
CExtRibbonNode * pParentNode = NULL,
DWORD dwFlags = 0L,
__EXT_MFC_SAFE_LPCTSTR strTextInToolbar = NULL,
__EXT_MFC_SAFE_LPCTSTR strTextInMenu = NULL,
__EXT_MFC_SAFE_LPCTSTR strTextUser = NULL,
LPARAM lParam = 0L,
CExtCmdIcon * pIconCustomized = NULL
#if (!defined __EXT_MFC_NO_BUILTIN_TEXTFIELD)
,
INT nTextFieldWidth = 100,
INT nDropDownWidth = -2, // (-1) - auto calc, (-2) - same as button area
INT nDropDownHeightMax = 250
#endif
);
The nDropDownWidth parameter is by default set to -1 what makes popup list box using width of combo box button in toolbar. You can set it to -1 for using automatically measured list box width. The nDropDownHeightMax parameter is used for specifying maximal height of popup list box. The maximal width and height of all the popup list boxes are also limited by width and height of the monitor’s work area where popup list box menu is displayed. These parameters can be also set using the CExtCustomizeCmdTreeNode::DropDownWidthSet() and CExtCustomizeCmdTreeNode::DropDownHeightMaxSet() methods. The grid cell classes does not have list box size options. They are always using popup list box size calculation and make list box width always greater or equal to grid cell width. The list box height is limited by monitor’s work area sizes and the new CExtGridCell::OnPopupListBoxQueryMaxSize() virtual method. The CExtGridCell::TrackCellStateInfo_t data structure which is used for containing properties of grid cell during tracking of its popup menu is now have new properties: - m_bAdjustListBoxWidth - indicates whether the width of the popup list box menu should be computed from widths of list box items; by default is set to true - m_bAdjustListBoxHeight - indicates whether the height of the popup list box menu should be computed from heights of list box items; by default is set to true - m_bAlingListBoxWidthToCellWidthMin - indicates whether the width of the popup list box menu should be greater or equal to grid cell width; by default is set to true - m_bAlingListBoxWidthToCellWidthMax - indicates whether the width of the popup list box menu should be less or equal to grid cell width; by default is set to false If two last properties are set to true , then widths of the popup list box menu displayed from grid cell’s drop down button with be the equal to grid cell widths. These properties of the CExtGridCell::TrackCellStateInfo_t data structure can be set in the overridden CExtGridCell::OnPopupListBoxMeasureTrackSize virtual method before invoking parent class method like in the CExtGridCellHeaderFilter class does in Prof-UIS 2.84: CSize CExtGridCellHeaderFilter::OnPopupListBoxMeasureTrackSize(
CExtGridCell::TrackCellStateInfo_t & _tcsi,
CExtPopupListBoxMenuWnd * pPopup
)
{
ASSERT_VALID( this );
_tcsi.m_bAlingListBoxWidthToCellWidthMin = _tcsi.m_bAlingListBoxWidthToCellWidthMax = false;
return CExtGridCellHeader::OnPopupListBoxMeasureTrackSize( _tcsi, pPopup );
}
In conclusion: now all the popup list box menus in Prof-UIS are using automatically computed sizes by default and this is true even if you have implemented custom measured/painted list box items like the style toolbar button in the StyleEditor sample application. If the list box contains only a few items, then you will not see blank space below the last displayed item. In case of simple list boxes with/without icons, custom item intents and/or check boxes you need only to insert list box items. In case of custom painted/measured list boxes you should implement painting and measuring virtual methods. In both cases you no longer need to compute entire size of popup list box. You can drop us an e-mail and we will provide you with the source code update.
|
|
Sergio Buonanno
|
Nov 21, 2008 - 8:27 AM
|
Is there any event or method by which I can verify if a child window placed inside a docked CExtControlBar is displaied or in the background (for example inside a non active TAB or hidden when the auto-hide flag is set). I tried to use IsWindowVisible, but if the child window is inside an inactive tab’s page IsWindowVisible returns true.
|
|
Technical Support
|
Nov 21, 2008 - 9:36 AM
|
You should override the CExtControlBar::OnControlBarPositionChange() virtual method. The CControlBar::IsVisible() determines if a control bar is visible. The non-selected bars in a tabbed bar group are also visible. You can use a CExtControlBar::_GetNearestTabbedContainer() container for detecting whether a bar is in a tabbed group. This method returns a CExtDynTabControlBar* pointer to a tabbed bar group or NULL if tge bar is not in the group. You need to use the #include <../Src/ExtControlBarTabbedFeatures.h> include so that you can invoke the CExtDynTabControlBar class methods. The CExtDynTabControlBar::GetSwitcherSelection() returns an index of the selected tab item. The CExtDynTabControlBar::GetBarAt() returns a CExtControlBar* pointer to the bar inside the tabbed group. So, you can determine whether a bar is selected in a tabbed bar group.
|
|
Rado Manzela
|
Nov 21, 2008 - 4:49 AM
|
I’ve tried 2.84 to see whether the print preview bug in tree grid is fixed. The last column on page is still truncated. Can you fix it please? Thank you. PS. the auto logoff while posting the message is terrible, I had to type it again :(
|
|
Robert Webb
|
Nov 21, 2008 - 12:16 AM
|
Hi,
Is there some trick to getting CMyRibbonBar::OnPopupListBoxInitContent() to be called back? Although I can see that it is called in the ribbon MDI sample, it is not being called back in my own code, but I can’t spot the difference.
I add a drop-down to the ribbon bar like this: CExtCustomizeCmdTreeNode * node = new CExtRibbonNode(id);
...
node->ModifyFlags(__ECTN_TBB_COMBO | __ECTN_TBB_TF_NE | __ECTN_TBB_RESIZABLE | __ECTN_TBB_TEXT_FIELD);
group->InsertNode(NULL, node);
Anything I should look for?
Thanks,
Rob.
|
|
Technical Support
|
Nov 21, 2008 - 10:38 AM
|
The thing which is absolutely number one any time and in any project too is to check the declaration of the virtual method which you are going to override: virtual bool OnPopupListBoxInitContent(
CExtBarButton * pTBB,
CExtCustomizeCmdTreeNode * pNode,
CListBox & wndListBox
);
The thing number two also happens very often: sometimes the compiler does not invoke virtual methods until you completely rebuild your project.
|
|
Robert Webb
|
Nov 24, 2008 - 4:27 PM
|
Neither of these things were the problem, but I figured it out. It was because I also had OnPopupListBoxInitContent() defined in the CMainFrame, and that one got called instead of the one in the ribbon bar. Thanks, Rob.
|
|
Offer Har
|
Nov 20, 2008 - 2:25 PM
|
Hi, I am building a menu in OnExtMenuPrepareOneLevel , and setting to each entry a custom tool-tip (which looks great by the way...) However, when the item is disabled the tip is not displayed - I need to display an explanation by the item is disabled in the tip... Thanks, Ron.
|
|
Technical Support
|
Nov 24, 2008 - 10:47 AM
|
We implemented optional status tips and cool tips for disabled command items in popup menus. The following code turns on status tips for disabled menu commands: CExtPopupMenuWnd::g_bShowStatusTipsOverDisabledItems = false;
The code below turns on cool tips for all the menu commands: CExtPopupMenuWnd::g_bShowCoolTipsOverDisabledItems = false;
CExtPopupMenuWnd::g_eTtsClassicMenu = CExtPopupMenuTipWnd::__ETS_BALLOON;
You can download the latest Prof-UIS 2.84 from the same location. The ZIP file name marked with 2008-11-24.
|
|
Rado Manzela
|
Nov 20, 2008 - 8:46 AM
|
Is there some problem with downloads? When I log in, I can download prof-uis freeware, but I cannot download full 2.83 (I’m using 2.82) - download does not start, there is timeout. It seems that CExtGridWnd::OnGridCellInplaceControlDateTimeInputVerify is not called when user changes the date using dropdown button and calendar control. Is this by design or is it bug? How can I validate change in gridWnd in this case? (I don’t want to validate it in the cell, because allowed values depends on other cells in the grid). Thank you.
|
|
Technical Support
|
Nov 20, 2008 - 1:35 PM
|
Thank you for reporting the run-time issue. We will fix it ASAP. Meanwhile you can download 2.83 from our ftp server (the info was sent to you by email).
The CExtGridCell::OnInplaceControlDateTimeInputVerify() and CExtGridCell::OnInplaceControlDateTimeInputComplete() virtual methods should be used for verifying the date value changing in the in-place editor.
The CExtGridCellDateTime::OnValueChanging() and CExtGridCellDateTime::OnValueChanged() virtual methods should be used for verifying the date picker popup menu item selection.
|
|
Rado Manzela
|
Nov 22, 2008 - 6:54 AM
|
The problem is that CExtGridCellDateTime::OnValueChanging() is called also when I call SetDateTime(). I need only to validate changes made by user in any way (inplace control edit and date picker) and save them into database. Another problem is that when date cell is initally empty, and user start editing, it shows current date. It is good, but there is bug in CExtGridCell::OnInplaceControlDateTimeInputVerify() - dtInitial is set to current date althought there was no initial date. I’ve tried to initialize status of empty cell to COleDateTime::null, but in this case grid cannot start editing of the date. It seems like bug to me. I need to implement grid where each row shows data for one day. User can edit existing dates and at end of the grid there is empty row to allow user to add next day. He is not allowed to use day which is already contained in the grid. In this case I need to show him error message about duplicit date and reset date to original (previous date for editing of existing date or empty date when adding new day). How can I do this? I’ve tried to override OnPopupDatePickerSelChange() but I cannot get pointer to grid window to call duplicity verification function. Give me some direction, please. Thank you.
|
|
Rado Manzela
|
Nov 23, 2008 - 12:16 PM
|
Nevermind, I’ve found a solution
|
|
John Ritzenthaler
|
Nov 20, 2008 - 8:18 AM
|
The Application Wizard doesn’t work on my system so I’m manually implementing ProfUIS in an MFC project. I’m mimicking the code in the FunnyBars sample. My toolbar has the Aqua look but the rest of the window doesn’t. What am I missing? In FunnyBars, the frame window uses the template CExtNCW. This isn’t documented at all so I didn’t use it. Also CExtPaintManager isn’t documented.
|
|
John Ritzenthaler
|
Nov 20, 2008 - 8:58 AM
|
Using CExtNCW solves the problem. But please note the missing documentation
|
|
Anil Siddhpura
|
Nov 18, 2008 - 9:20 PM
|
I done the print preview using grid as given in sample application. Now in print preview, I want to enlarge the buttons size of all buttons exist in toolbar for touch screen. I also want to add page setup button for printer selection. and How can I get the close event ?
|
|
Technical Support
|
Dec 26, 2008 - 2:03 PM
|
We can regard your question as a feature request and implement several scaled versions of a toolbar inside the preview window. For instance, the theme switcher toolbar in our samples features several scaled versions.
The Page Setup and direct printing buttons are supported by the preview window but we removed them due to unresolved yet MFC issue which can cause the application to crash. You can comment out the following line of code in the CExtPPVW_Printable::OnInitializePrintPreviewToolBar() method and the Options button will appear in the toolbar:
m_pWndPP->m_pPpvWndToolBar->RemoveButton( m_pWndPP->m_pPpvWndToolBar->CommandToIndex( ID_EXT_PPV_SETUP ), FALSE );
This button allows you to change Printer, its options and/or paper orientation without exiting the preview window. There crash may occur on closing the printer options dialog in the Unicode applications based on MFC 4.2 only. That was the reason for us to hide this button. In most cases this button works well and even the preview window generates pages on-the-fly. The preview window closing event can be handled by overriding the CExtPPVW_Printable::OnEndPrintPreview() virtual method.
|
|
Offer Har
|
Nov 18, 2008 - 3:09 PM
|
I got the latests build (Nov 17) I have a two column tree grid, I too joing two cells, and I have the HTREEITEM. this is what I do: GridCellJoinSet(CSize(2,1), 0, ItemGetVisibleIndexOf(hti));
I see that something is happeneing, but it does not look good... when the text is too long, it looks lite it is cut and placed on top of the first part of the text. Is this the right way to join cells? Please note that I use the setting of the auto adjust of the columns width using __EGBS_BSE_EX_PROPORTIONAL_COLUMN_WIDTHS .
|
|
Offer Har
|
Nov 19, 2008 - 9:09 AM
|
Here is a picture to explain the bug:
|
|
Technical Support
|
Nov 20, 2008 - 1:13 PM
|
We have fixed this issue. You can re-download the latest source code marked with 2008-11-19 text in the name of ZIP file. Alternatively, you can update only the source code for the following method: bool CExtGridWnd::OnSiwWalkCell(
CDC & dc,
LPVOID pQueryData,
LONG nVisibleColNo,
LONG nVisibleRowNo,
LONG nColNo,
LONG nRowNo,
const RECT & rcCellExtra,
const RECT & rcCell,
const RECT & rcVisibleRange,
bool & bVirtualRightReached,
bool & bVirtualBottomReached,
DWORD dwAreaFlags,
bool bFocusedControl
) const
{
ASSERT_VALID( this );
INT nColType = CExtGridHitTestInfo::GetInnerOuterTypeOfColumn( dwAreaFlags );
INT nRowType = CExtGridHitTestInfo::GetInnerOuterTypeOfRow( dwAreaFlags );
INT nFriendlyColNo = nColNo;
INT nFriendlyRowNo = nRowNo;
if( ( nColType != 0 || nRowType != 0 )
&& ( nFriendlyColNo < 0 || nFriendlyRowNo < 0 )
)
{
ASSERT( ! (nFriendlyColNo < 0 && nFriendlyRowNo < 0 ) );
if( nFriendlyColNo < 0 )
nFriendlyColNo = (-nFriendlyColNo) - 1;
if( nFriendlyRowNo < 0 )
nFriendlyRowNo = (-nFriendlyRowNo) - 1;
ASSERT( nFriendlyColNo >= 0 );
ASSERT( nFriendlyRowNo >= 0 );
} // if( ( dwAreaFlags & __EGBWA_OUTER_CELLS ) != 0 ...
else
{
ASSERT( nFriendlyColNo >= 0 );
ASSERT( nFriendlyRowNo >= 0 );
} // else from if( ( dwAreaFlags & __EGBWA_OUTER_CELLS ) != 0 ...
CSize sizeJoin = OnGbwCellJoinQueryInfo( nFriendlyColNo, nFriendlyRowNo, nColType, nRowType );
CRect rcCellExtraA = rcCellExtra, rcCellA = rcCell;
if( sizeJoin.cx != 1
|| sizeJoin.cy != 1
)
{
bool bRetVal = OnGbwCalcVisibleItemRect( nFriendlyColNo, nFriendlyRowNo, nColType, nRowType, rcCellExtraA, rcCellA );
if( ! bRetVal )
return false;
CExtMemoryDC dcX;
CFont * pRequiredFont = NULL, * pOldFont = NULL;
if( dc.GetSafeHdc() != NULL )
{
CRect rcMemDcItem = rcCellExtra;
dcX.__InitMemoryDC(
&dc,
&rcMemDcItem,
CExtMemoryDC::MDCOPT_TO_MEMORY | CExtMemoryDC::MDCOPT_RTL_COMPATIBILITY
);
dcX.SetTextColor( dc.GetTextColor() );
dcX.SetBkColor( dc.GetBkColor() );
dcX.SetBkMode( dc.GetBkMode() );
pRequiredFont = dc.SelectObject( & OnSiwGetDefaultFont() );
pOldFont = dcX.SelectObject( pRequiredFont );
OnSiwPaintBackground( dcX, bFocusedControl );
OnGbwEraseArea( dcX, rcMemDcItem, dwAreaFlags );
}
LONG nRealColNo = nFriendlyColNo, nRealRowNo = nFriendlyRowNo;
if( sizeJoin.cx <= 0 || sizeJoin.cy <= 0 )
{
if( sizeJoin.cx < 0 )
nRealColNo += sizeJoin.cx;
if( sizeJoin.cy < 0 )
nRealRowNo += sizeJoin.cy;
CRect rcCellExtraReJoined = rcCellExtraA;
CRect rcCellReJoined = rcCellA;
OnGbwAdjustRects(
nRealColNo, nRealRowNo,
CExtGridHitTestInfo::GetInnerOuterTypeOfColumn(dwAreaFlags),
CExtGridHitTestInfo::GetInnerOuterTypeOfRow(dwAreaFlags),
rcCellExtraReJoined, rcCellReJoined
);
if( sizeJoin.cx < 0 )
{
rcCellExtraA.left = rcCellExtraReJoined.left;
rcCellExtraA.right = rcCellExtraReJoined.right;
rcCellA.left = rcCellReJoined.left;
rcCellA.right = rcCellReJoined.right;
}
if( sizeJoin.cy < 0 )
{
rcCellExtraA.top = rcCellExtraReJoined.top;
rcCellExtraA.bottom = rcCellExtraReJoined.bottom;
rcCellA.top = rcCellReJoined.top;
rcCellA.bottom = rcCellReJoined.bottom;
}
}
bRetVal =
CExtGridBaseWnd::OnSiwWalkCell(
dcX, pQueryData, nVisibleColNo, nVisibleRowNo, nRealColNo, nRealRowNo, rcCellExtraA, rcCellA,
rcVisibleRange, bVirtualRightReached, bVirtualBottomReached, dwAreaFlags, bFocusedControl
);
if( dc.GetSafeHdc() != NULL )
{
pRequiredFont = dcX.SelectObject( pOldFont );
dc.SelectObject( pRequiredFont );
dcX.__Flush( TRUE );
// fix with shifted outline
if( ( dwAreaFlags & __EGBWA_INNER_CELLS ) != 0 )
{
bool bGridLinesHorz = false, bGridLinesVert = false;
if( sizeJoin.cx > 1
&& sizeJoin.cy >= 0
)
{
bGridLinesHorz =
( rcCell.top == rcCellA.top && rcCell.bottom == rcCellA.bottom )
&&
// GridLinesHorzGet();
OnGbwQueryCellGridLines(
true, dc,
nVisibleColNo, nVisibleRowNo, nRealColNo, nRealRowNo,
rcCellExtraA, rcCellA, rcVisibleRange, dwAreaFlags, 0
);
}
if( sizeJoin.cx >= 0
&& sizeJoin.cy > 1
)
{
bGridLinesVert =
( rcCell.left == rcCellA.left && rcCell.right == rcCellA.right )
&&
// GridLinesVertGet();
OnGbwQueryCellGridLines(
false, dc,
nVisibleColNo, nVisibleRowNo, nRealColNo, nRealRowNo,
rcCellExtraA, rcCellA, rcVisibleRange, dwAreaFlags, 0
);
}
if( bGridLinesHorz || bGridLinesVert )
{
COLORREF clrFace = OnGbwQueryGridLinesColor();
if( bGridLinesHorz )
{
dc.FillSolidRect( rcCell.left - 1, rcCell.top - 1, rcCell.right - rcCell.left, 1, clrFace );
dc.FillSolidRect( rcCell.left - 1, rcCell.bottom - 1, rcCell.right - rcCell.left, 1, clrFace );
}
if( bGridLinesVert )
{
dc.FillSolidRect( rcCell.left - 1, rcCell.top, 1, rcCell.bottom - rcCell.top, clrFace );
dc.FillSolidRect( rcCell.right - 1, rcCell.top, 1, rcCell.bottom - rcCell.top, clrFace );
}
}
}
}
return bRetVal;
}
bool bRetVal =
CExtGridBaseWnd::OnSiwWalkCell(
dc, pQueryData, nVisibleColNo, nVisibleRowNo, nColNo, nRowNo, rcCellExtraA, rcCellA,
rcVisibleRange, bVirtualRightReached, bVirtualBottomReached, dwAreaFlags, bFocusedControl
);
if( ! bRetVal )
return false;
return true;
}
|
|
Offer Har
|
Nov 17, 2008 - 11:16 AM
|
Dear Support, Please look at the attached screen-shot, you’ll see that the cells pointed are missing a piece of their frame at their top-left part. This is from running the TestTreeGridCellJoin.exe sample application.
|
|
Technical Support
|
Nov 17, 2008 - 1:43 PM
|
|
|
Dongsik Chae
|
Nov 15, 2008 - 9:25 PM
|
Hello, I cannot add event handler if I inherit my dialog box from CExtResizableDialog. When I inherit my dialog box from CDialog, then it works fine. How can I solve this problem? Should I reinstall the Prof UIS? Will it solve the problem? What I just want to do is the ’Event Handler Wizard’ shows ’Message types’ and let me add the event handler to any control in a dialog box. Thanks.
|
|
Technical Support
|
Nov 17, 2008 - 7:11 AM
|
Visual Studio 2005 / 2008 code wizards do not work with a class that has a template-based class in the parent hierarchy. The CExtResizableDialog class is derived from CExtWA < CExtWS < CExtADLG < CExtResDlg > > > . If your dialog class is declared as follows: class CYourDialog : publc CExtResizableDialog
{
. . .
};
Then you can temporarily change the CExtResizableDialog word with the CDialog word in the class CYourDialog : publc CExtResizableDialog line of code. The wizards in your visual studio will start working with the CYourDialog class. You don’t need to replace the CExtResizableDialog word in any other places and you don’t need to restart your Visual studio.
|
|
Offer Har
|
Nov 14, 2008 - 7:24 AM
|
Hi, I use the CExtGridCellNumber class, and I need to set the number of digits after the decimal point to 2, so I initialize it and call: SetNumDigits(2) . This looks fine when the cell is not in the in-place edit mode. When going into in-place edit, I see the number as it is, with much more digits after the point - if I have 14.00 in the cell, for example, when editing it I get 14.000000001, or if it’s exactly 14, I see 14 with no point and digits after the point. Why is the in-place not getting the data from the cell? Thanks, Ron.
|
|
Technical Support
|
Nov 17, 2008 - 11:04 AM
|
The CExtGridCellNumber::SetNumDigits() method affects the displayed number text only.
Yes, you need the source code update to use cell joining feature in the CExtTreeGridWnd control.
|
|
Offer Har
|
Nov 17, 2008 - 11:06 AM
|
Will you be able to fix the In-Place for the coming release? I already dropped you a mail today asking for the latest 2.84.
|
|
Technical Support
|
Nov 18, 2008 - 3:47 AM
|
We are not sure if this is in fact a bug. It looks like a feature request. The latest snapshot of v.2.84 demonstrates a new masked editor in the ProfUIS_Controls sample. It is kind of an extended edit control with input validation. It’s possible to code numeric input validation and apply it to the numeric cell editor. We think this feature should be optional and the default behavior should be as it is currently implemented.
|
|
Offer Har
|
Nov 18, 2008 - 4:27 AM
|
Can you please add it to your feature list? for me this is a requirement that I have to implement.
|
|
Technical Support
|
Nov 17, 2008 - 7:08 AM
|
|
|
Offer Har
|
Nov 17, 2008 - 7:15 AM
|
There is a bug in the tree joining: 1. Expand Group of Itemss 0 2. Double-click it to start edit You will see that the in-place edit box runs over the right-side column header and the scroll-bar.
|
|
Technical Support
|
Nov 17, 2008 - 11:04 AM
|
|
|
Offer Har
|
Nov 17, 2008 - 11:12 AM
|
I have a small question about it - why when you edit a node there is a black rectangle around it, but if you edit the Description cell for example, there is no black rectangle?
|
|
Offer Har
|
Nov 17, 2008 - 7:12 AM
|
So, does it mean that the function is SetNumDigits meaningless? About the tree cell joining do I need to update the 2.84 I have to use it?
|
|
Offer Har
|
Nov 13, 2008 - 9:54 AM
|
Hi, I have an CExtMenuControlBar, and several comtrol-bars. The menu-bar occupies only half of the screen’s width, so I would like to dock control-bars to it’s right side. However, whenever I try this, by dragging in the control-bar next to the menu-ber, the menu-bar jumps up or down... Please help, Thanks.
|
|
Technical Support
|
Nov 14, 2008 - 5:20 AM
|
The menu bar is a kind of toolbar. Both a CExtMenuControlBar and a CExtToolControlBar bar can take up the entire row (like a classic menu bar) or part of it (like a classis toolbar). You can use a custom CExtMenuControlBar -derived class implementing the CExtMenuControlBar::_GetFullRowMode() virtual method that returns false . Such a menu bar will behave like a toolbar and can be docked in the same row/column with other toolbars.
|
|
Offer Har
|
Nov 14, 2008 - 7:24 AM
|
|
|
Offer Har
|
Nov 13, 2008 - 9:34 AM
|
When I open a menu the OnUpdateXXX function are called for all the menu items.
Now the menu is display until the user selects a command or cancels it.
During this time, the state of the elements changes, and some commands in the displayed menu should become disabled, checked or unchecked. As fas as I see, the OnUpdateXXX function are called only when the menu-item needs to be rendered - Can I force them to be called, with a timer or something like this? Thanks.
|
|
Technical Support
|
Nov 14, 2008 - 12:13 PM
|
The CExtPopupMenuWnd::_UpdateCmdUI() protected method does menu items updating using the CExtPopupMenuWnd::CExtPopupMenuCmdUI class. You can replace all the CExtPopupMenuWnd instances in your application with your CExtPopupMenuWnd -derived objects via handling the CExtPopupMenuWnd::g_nMsgInstantiatePopupMenu registered message. The WPARAM parameter of this message is pointer to the CExtPopupMenuWnd::INSTANTIATEPOPUPMENUNOTIFICATION data structure. The CExtPopupMenuWnd::INSTANTIATEPOPUPMENUNOTIFICATION::m_pCreatedPopupMenuInstance is pointer to CExtPopupMenuWnd object and it’s NULL value. You can instantiate your CExtPopupMenuWnd -based objects in this pointer. Please note, the CExtPopupMenuWnd::INSTANTIATEPOPUPMENUNOTIFICATION::m_pMenuRTC property specifies runtime class of required popup menu. You may not need to instantiate list box menus, undo-redo menus, color menus, date picker menus and any other specific menus. So, if your CExtPopupMenuWnd -derived objects will be instantiated and used everywhere in your application where you can see menu, then you can start timers in your menu windows and invoke the CExtPopupMenuWnd::_UpdateCmdUI() protected method for periodic updating of menu items.
We would like to tell you, that if menu is open several hours, then the user is stopped his work day and went into vocation. If some popup menu is opened, the UI of your application assumes that the user should select something in menu before continuing working on some current task. We are very surprised with this feature request.
Of course, we can add some new registered message like g_nMsgQueryMenuPeriodicUpdatingParameters and send it before each popup menu level will appear on the screen. This message will pass pointer to some data structure in WPARAM parameter. This data structure will contain information about how often the command updating for menu items should be invoked.
|
|
Technical Support
|
Nov 14, 2008 - 5:16 AM
|
We can implement this feature. There is no problem to change the state of a menu item (enabled, checked or radio) on timer. And tt’s not difficult to invoke MFC’s command updating mechanism for menu items periodically. The only problem is to change the sizes of menu items when the popup menu is displayed and its menu tree layout is pre-computed. The CCmdUI::SetText() method can change the size of a particular menu item and, as a result, can change the size of a popup sub-menu item and affect the locations of nested menu levels. This requires more time to implement. But first of all, please provide more details about your task. Do you need to update the entire displayed menu tree periodically or only particular sub menus or items? What the new menu APIs related to this feature should be in your opinion?
|
|
Offer Har
|
Nov 14, 2008 - 7:27 AM
|
What I need right now is an option to disable items, because the user can leave the popup menu open for hours... and during that time things change. I think it will be a nice feature to change also radio-button and check status of elements, and eventual also text and icons, and even adding and removing items, but in general I think it’s less desirable to do the last, because the user might get confused if the menu sizes changes. How exactly can I envoke the command updating of the menu? Thanks, Ron.
|
|
John Ritzenthaler
|
Nov 13, 2008 - 9:30 AM
|
I purchase Prof-UIS yesterday and started the install. Everything seemed fine through to the Installation Wizard. I started that (compiling all the libraries) and it was obvious it would take a while so I left it running at the end of the day. This morning I discovered that Visat had shut everything down to install updates so I don’t know what happened. I went into VS2008 and tried to create a new project. The Application Wizard was there but when I treid to use it, notthing happened. I tried the MFC Appliaction wizard and that worked fine. I went back to the Installation Wizard and tried to remove then install the paths and the wizard. Removing the paths fails. OK, I uninstalled Prof-UIS from the entire computer and tried again. The Installation wizard gave me options to remove the paths and the app wizard. I tried that. path removal failed. app wizard removal worked. I tried to run the installation wizard again to re-install the paths and app wizard. The paths option is still to remove (and it fails) The app wizard option is disabled. Help!
|
|
Technical Support
|
Nov 14, 2008 - 12:15 PM
|
Please provide more information. Which version of Visual Studio you are using? We guess 6.0. Which VS service pack is installed? Which additional software extending Visual Studio functions is installed? Which versions of Windows you are using? Which locale is current in your Windows settings?
Finally, you can install some remote desktop access software like www.logmein.com and let us connect to the computer where the wizard related problems occurs. This will let us clarify what’s wrong.
|
|
John Ritzenthaler
|
Nov 14, 2008 - 12:24 PM
|
I’m using VS 2008 Version 9.0.21011.8 RTM. I’m not sure how to determine the service packs. The last line in the installed products list is KB946308. I’ll be glad to install the desktop access software. I’d like to get this project started. I’ll go check out the site.
|
|
John Ritzenthaler
|
Nov 14, 2008 - 11:37 AM
|
That doesn’t help at all. Other than zip files there are only three files in Prof-UIS/Support: · IntegrationWizard.ini · ProfUISWizard.awx · Report.txt And frankly I’m not sure what I’m supposed to be restoring. I tried doing the manual installation of the wizard per the FAQ. The files all appear to be unzipped properly. Then I manually set the directories per the FAQ I tried again, but I get nothing. In the status bar it says “Creating project ‘Project1’… project creation failed”
|
|
Technical Support
|
Nov 13, 2008 - 1:25 PM
|
The Prof-UIS installation is based on Install Shield and does not use any binary compiled DLLs for accessing/modifying anything. It cannot corrupt your Vista. The Prof-UIS Integration Wizard uses COM automation objects of different Visual Studio versions for running project compilation and linking, i.e. for building Prof-UIS libraries. It also uses direct access to the settings file of Visual Studio .NET / Visual Studio .NET 2003 / Visual Studio 2005 / Visual Studio 2008 for writing Prof-UIS paths there. If our Integration Wizard somehow corrupted this file, then you can manually restore it because the copies of the settings file is saved under the …/Prof-UIS/Support/… folder with HTML descriptions of how to restore the settings file.
|
|
Offer Har
|
Nov 13, 2008 - 5:27 AM
|
Hi, I have an application that is maximzied - when I try to double-click the title-bar to move it to restored mode, it is not displayed at all. The only way to show it back is by right-click it in the task-bar and maximize it again. Any ideas? have you seen this bug before? Thanks.
|
|
Technical Support
|
Nov 17, 2008 - 1:44 PM
|
The state of the main frame window is restored with the state of control bars. This performed by the CExtControlBar::ProfileBarStateLoad() static method or the CExtControlBar::ProfileBarStateLoad() static method if you are using the CArchive -based state persistence. These methods have a WINDOWPLACEMENT* pointer parameter. If this parameter is NULL , the main frame’s window state is not loaded and only the state of control bars becomes restored.
|
|
Technical Support
|
Nov 13, 2008 - 1:28 PM
|
Which application is discussed in your message? We are unable to do the same with any of our sample projects and we never received similar issue reports. You can send the source code of the UI-related part of your project and we will try to clarify what’s wrong.
|
|
Offer Har
|
Nov 17, 2008 - 9:57 AM
|
I forgot to mention that this happen in dual-view mode. What part of application is responsible for that? is the restored state saved as part of the UI state?
|
|
Offer Har
|
Nov 13, 2008 - 5:25 AM
|
Hi, I add this line to the initialization of my control-bar: SetInitDesiredPosFloating(CPoint(100,100));
But the control-bar appears at the top-left cornet of the main-frame Any reasons why this can happen?
|
|
Offer Har
|
Nov 13, 2008 - 1:37 PM
|
OK - thanks - it seems to be the problem
|
|
Technical Support
|
Nov 13, 2008 - 1:28 PM
|
No, it works. We guess you simply forgot about control bar state persistency. If the control bar states were successfully loaded, then all the previously made invocations of the CExtControlBar::SetInitDesired***() methods are ignored.
|
|
Offer Har
|
Nov 13, 2008 - 5:13 AM
|
Hi, I have a set of toolbars and control-bars that are serialized when the application terminates. All works well untill I hide one of the control-bars. When I ssrialize the satte of the UI after I hide the control-bar, next time I load the UI I get assertion and later a crash in CExtCmdProfile::SerializeState, line :1870 (2.84 of 11-11)
for( ; true; )
{
UINT nCmdId, nUsageTickCount;
ar >> dwTmp;
nCmdId = UINT(dwTmp);
if( nCmdId == 0 )
break;
ar >> dwTmp;
nUsageTickCount = UINT(dwTmp);
CExtCmdItem * pCmdItem = CmdGetPtr(nCmdId);
ASSERT( pCmdItem != NULL ); <-- HERE
if( pCmdItem->StateIsBasic()
|| pCmdItem->StateIsForceRarely()
|| CExtCmdManager::IsSystemCommand(pCmdItem->m_nCmdID)
)
continue;
pCmdItem->m_nUsageTickCount = nUsageTickCount;
} The ID that is being looked (nCmdId) for and not found is the ID of the control-bar that was hidden when the UI state was saved. Please verify and fix this. Thanks.
|
|
Technical Support
|
Nov 14, 2008 - 12:14 PM
|
This issue sounds like very critical. Most of Prof-UIS based applications have control bars and, of course, some of them always become hidden at shutdown and next startup. But nobody has reported any problems with loading hidden bar states yet. We recommend you to check whether the shutdown/startup code in your application looks like the same code in our samples. Please do not mix method invocations because neither Prof-UIS nor other libraries can work OK if the API invocations done in the incorrect order.
|
|
Offer Har
|
Nov 17, 2008 - 9:54 AM
|
Dear support, I need assitance with this one, as this is very critical. This is my load & save code: bool CMainFrm::LoadState()
{
if (m_bLoadState)
{
CWinApp * pApp = ::AfxGetApp();
ASSERT( pApp != NULL );
ASSERT( pApp->m_pszRegistryKey != NULL );
ASSERT( pApp->m_pszRegistryKey[0] != _T(’\0’) );
ASSERT( pApp->m_pszProfileName != NULL );
ASSERT( pApp->m_pszProfileName[0] != _T(’\0’) );
VERIFY(
CExtControlBar::ProfileBarStateLoad(
this,
pApp->m_pszRegistryKey,
pApp->m_pszProfileName,
pApp->m_pszProfileName,
&m_dataFrameWP
));
VERIFY(
g_CmdManager->SerializeState(
m_strProfileName,
pApp->m_pszRegistryKey,
pApp->m_pszProfileName,
false
));
}
return true;
}
bool CMainFrm::SaveState()
{
CWinApp * pApp = ::AfxGetApp();
ASSERT( pApp != NULL );
ASSERT( pApp->m_pszRegistryKey != NULL );
ASSERT( pApp->m_pszRegistryKey[0] != _T(’\0’) );
ASSERT( pApp->m_pszProfileName != NULL );
ASSERT( pApp->m_pszProfileName[0] != _T(’\0’) );
VERIFY(
CExtControlBar::ProfileBarStateSave(
this,
pApp->m_pszRegistryKey,
pApp->m_pszProfileName,
pApp->m_pszProfileName,
&m_dataFrameWP
));
VERIFY(
g_CmdManager->SerializeState(
m_strProfileName,
pApp->m_pszRegistryKey,
pApp->m_pszProfileName,
true
));
g_CmdManager->ProfileWndRemove( GetSafeHwnd() );
return true;
}
What & where else can I look to track down this bug? I realy don’t know where to start looking. How come the command is not recognized when the application is loading? where do I remove a command from the command manager? I do not handle the closing of the control-bar in any special way - just the noraml OnBarCheck : BOOL CMainFrm::OnBarCheck(UINT nID)
{
return CExtControlBar::DoFrameBarCheckCmd(this, GetSmallID(nID), true);
}
Thanks.
|
|
Technical Support
|
Nov 17, 2008 - 1:46 PM
|
Your code can remove one or several particular commands by invoking the following APIs:
CExtCmdManager::CmdRemove()
CExtCmdManager::CmdRemoveByMask()
CExtCmdProfile::CmdRemove()
CExtCmdProfile::CmdRemoveByMask()
But these APIs are very rarely used in real life applications. There is much more common error related to command manager command registration: the application registers a different set of commands in the command manager during different startup times. This is the thing you should really check. It’s a very common error. Please ensure your application updates the command manager from the same toolbar and menu resources each time it starts. Please ensure all the menu resources used as context menus were used for updating the command manager at early startup where you updated it from main frame and/or document/view menu resources.
|
|
Offer Har
|
Nov 17, 2008 - 4:24 PM
|
Dear Support, We know that this is a common problem, and for that we implemented the following mechanism: If the application crashes when loading the UI state, we start it up using a command-line argument that does not load the UI state, and then when it is closed it saves the new UI state. This concept helps us when customers report crash at startup, we just tell them to load without the loading of the UI state, and even if we in-house have conflicting versions this is what we do. However, even so, If we do this: 1) Start the application without any loading of UI state 2) Hide a control bar (by pressing its ’x’ button) 3) Close the application, which saves the UI state to the registry. 4) Run the application with loading of the UI state We get a crash - there was no change in the code or UI whatsoever. Please help... Thanks, Ron.
|
|
Technical Support
|
Nov 14, 2008 - 12:13 PM
|
No. We currently support only binary formats both for file and registry based state serializations.
|
|
Technical Support
|
Nov 13, 2008 - 1:27 PM
|
This unwanted assertion is not a crash. It’s incorrect usage of the Prof-UIS command manager. If the command manager loads the command state, all commands presented during the last state saving should be already registered in it. Please check whether the command manager is updated from all menus and toolbars used in your project before loading its state. The problem can also occur during development when you are simply adding new commands, removing some commands or changing command identifiers
|
|
Offer Har
|
Nov 14, 2008 - 7:30 AM
|
I also asked if there is a way to save the UI state to a file and not registry, and in a text format and not binary so I can look and see what is messed up there. So, is it possible?
|
|
Offer Har
|
Nov 13, 2008 - 1:30 PM
|
Dear Support, 1) This happened in a test environment, and not during development. 2) This only happened with control-bars that were hidden and then the UI was saved, and then re-loaded. It looks like when the bars were hidden and then the UI is re-loaded, something get messedup in the loader. Please check.
|
|
Christan HIRIGOYEN
|
Nov 12, 2008 - 5:22 AM
|
I would like to embed a CExtReportGridWnd in a CExtSplitterWnd. So there is an ASSERT when creating the CExtReportGridWnd.
Neither directly, nor via a derived class (CMyReport : public CExtPPVW < CExtReportGridWnd >) I would like to avoid having a CWnd for containing the report grid. not useful redirection.
Could you advise me please?
|
|
Christan HIRIGOYEN
|
Nov 13, 2008 - 3:37 AM
|
There is an ASSERT in wincore line 329. Find enclosed the needed information, hope it is not too huge for the forum. Regards, here is the part of code and the locals associate
BOOL CWnd::Attach(HWND hWndNew)
{
ASSERT(m_hWnd == NULL);
// only attach once, detach on destroy
ASSERT(FromHandlePermanent(hWndNew) == NULL);
// must not already be in permanent map
if (hWndNew == NULL)return FALSE;
...... and locals + this 0x04a26c68 {CNoteReportGrid hWnd=0x008417d8} CWnd * const
+ hWndNew 0x002d176e {unused=302776834 } HWND__ *
+ pMap 0x03ac6238 {m_alloc={...} m_pfnConstructObject=0x78254510 m_pfnDestructObject=0x782ab0c0 ...} CHandleMap * here is a part of the call stack ntdll.dll!7c901230()
[Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll]
msvcr80d.dll!_CrtDbgBreak() Line 89 C
msvcr80d.dll!_VCrtDbgReportA(int nRptType=2, const char * szFile=0x781d54e0, int nLine=329, const char * szModule=0x00000000, const char * szFormat=0x00000000, char * arglist=0x00126030) Line 290 C
msvcr80d.dll!_CrtDbgReportV(int nRptType=2, const char * szFile=0x781d54e0, int nLine=329, const char * szModule=0x00000000, const char * szFormat=0x00000000, char * arglist=0x00126030) Line 300 + 0x1d bytes C
msvcr80d.dll!_CrtDbgReport(int nRptType=2, const char * szFile=0x781d54e0, int nLine=329, const char * szModule=0x00000000, const char * szFormat=0x00000000, ...) Line 317 + 0x1d bytes C
mfc80d.dll!AfxAssertFailedLine(const char * lpszFileName=0x781d54e0, int nLine=329) Line 25 + 0x14 bytes C++
> mfc80d.dll!CWnd::Attach(HWND__ * hWndNew=0x002d176e) Line 329 + 0x18 bytes C++
mfc80d.dll!_AfxCbtFilterHook(int code=3, unsigned int wParam=2955118, long lParam=1204840) Line 530 C++
user32.dll!7e4318e3()
user32.dll!7e44f687()
ntdll.dll!7c90eae3()
user32.dll!7e43e175()
user32.dll!7e43e152()
ProfUIS283md.dll!CExtHookSpy::SHS_HookCBTProc(int nCode=3, unsigned int wParam=2955118, long lParam=1205192) Line 1095 + 0x1b bytes C++
user32.dll!7e4318e3()
ntdll.dll!7c9155c9()
user32.dll!7e44f687()
ntdll.dll!7c90eae3()
user32.dll!7e41fe13()
user32.dll!7e41fdd9()
ntdll.dll!7c915041()
ntdll.dll!7c915233()
ntdll.dll!7c9155c9()
ntdll.dll!7c911538()
ntdll.dll!7c911596()
ntdll.dll!7c9106eb()
gdi32.dll!77f2c55c()
gdi32.dll!77f3dd2f()
usp10.dll!74dc5621()
ntdll.dll!7c910732()
ntdll.dll!7c910732()
ntdll.dll!7c9106ab()
ntdll.dll!7c9106eb()
gdi32.dll!77f1949e()
gdi32.dll!77f194a6()
usp10.dll!74dab91e()
ntdll.dll!7c910f46()
ntdll.dll!7c910e91()
ntdll.dll!7c91056d()
user32.dll!7e419c17()
user32.dll!7e419d4d()
user32.dll!7e419d60()
ntdll.dll!7c91056d()
kernel32.dll!7c80997a()
kernel32.dll!7c80998d()
gdi32.dll!77f1a70c()
kernel32.dll!7c80998d()
gdi32.dll!77f1a792()
gdi32.dll!77f1a3cb()
gdi32.dll!77f17581()
gdi32.dll!77f17598()
gdi32.dll!77f16b25()
user32.dll!7e41ea44()
user32.dll!7e41e9eb()
user32.dll!7e4242e9()
user32.dll!7e41e13a()
user32.dll!7e42592c()
user32.dll!7e43a91e()
msvcr80d.dll!_output_s_l(_iobuf * stream=0x00000000, const char * format=0x001f4008, localeinfo_struct * plocinfo=0x001ce600, char * argptr=0x00012012) Line 1166 + 0x17 bytes C++
user32.dll!7e466278()
user32.dll!7e450617()
user32.dll!7e4505cf()
msvcr80d.dll!__crtMessageBoxA(const char * lpText=0x001270c0, const char * lpCaption=0x102d315c, unsigned int uType=73746) Line 168 + 0x13 bytes C
msvcr80d.dll!__crtMessageWindowA(int nRptType=2, const char * szFile=0x781d54e0, const char * szLine=0x00129134, const char * szModule=0x00000000, const char * szUserMessage=0x00128134) Line 420 + 0x16 bytes C
msvcr80d.dll!_VCrtDbgReportA(int nRptType=2, const char * szFile=0x781d54e0, int nLine=626, const char * szModule=0x00000000, const char * szFormat=0x00000000, char * arglist=0x0012d1c8) Line 420 + 0x28 bytes C
msvcr80d.dll!_CrtDbgReportV(int nRptType=2, const char * szFile=0x781d54e0, int nLine=626, const char * szModule=0x00000000, const char * szFormat=0x00000000, char * arglist=0x0012d1c8) Line 300 + 0x1d bytes C
msvcr80d.dll!_CrtDbgReport(int nRptType=2, const char * szFile=0x781d54e0, int nLine=626, const char * szModule=0x00000000, const char * szFormat=0x00000000, ...) Line 317 + 0x1d bytes C
mfc80d.dll!AfxAssertFailedLine(const char * lpszFileName=0x781d54e0, int nLine=626) Line 25 + 0x14 bytes C++
mfc80d.dll!AfxHookWindowCreate(CWnd * pWnd=0x04a30708) Line 626 + 0x18 bytes C++
mfc80d.dll!CWnd::CreateEx(unsigned long dwExStyle=0, const char * lpszClassName=0x02408b28, const char * lpszWindowName=0x00000000, unsigned long dwStyle=1174470656, int x=0, int y=0, int nWidth=0, int nHeight=0, HWND__ * hWndParent=0x008417d8, HMENU__ * nIDorHMenu=0x00001b58, void * lpParam=0x00000000) Line 694 C++
mfc80d.dll!CWnd::Create(const char * lpszClassName=0x02408b28, const char * lpszWindowName=0x00000000, unsigned long dwStyle=1174470656, const tagRECT & rect={...}, CWnd * pParentWnd=0x04a26c68, unsigned int nID=7000, CCreateContext * pContext=0x00000000) Line 743 C++
ProfUIS283md.dll!CExtScrollItemWnd::Create(CWnd * pParentWnd=0x04a26c68, const tagRECT & rcWnd={...}, unsigned int nDlgCtrlID=7000, unsigned long dwScrollItemWndStyle=0, unsigned long dwWindowStyle=1174470656, CCreateContext * pContext=0x00000000) Line 4752 + 0x23 bytes C++
ProfUIS283md.dll!CExtReportGridWnd::OnReportGridCreateColumnChooser() Line 6450 + 0x2b bytes C++
ProfUIS283md.dll!CExtReportGridWnd::ReportColumnChooserGet() Line 6134 + 0x12 bytes C++
ProfUIS283md.dll!CExtReportGridWnd::_CreateHelper() Line 5678 + 0x12 bytes C++
ProfUIS283md.dll!CExtScrollItemWnd::PreSubclassWindow() Line 4806 + 0x12 bytes C++
ProfUIS283md.dll!CExtGridBaseWnd::PreSubclassWindow() Line 805 C++
ProfUIS283md.dll!CExtTreeGridWnd::PreSubclassWindow() Line 3899 C++
ProfUIS283md.dll!CExtReportGridWnd::PreSubclassWindow() Line 5781 C++
mfc80d.dll!_AfxCbtFilterHook(int code=3, unsigned int wParam=8656856, long lParam=1234352) Line 532 C++
user32.dll!7e4318e3()
user32.dll!7e44f687()
ntdll.dll!7c90eae3()
user32.dll!7e43e175()
user32.dll!7e43e152()
ProfUIS283md.dll!CExtHookSpy::SHS_HookCBTProc(int nCode=3, unsigned int wParam=8656856, long lParam=1234704) Line 1095 + 0x1b bytes C++
user32.dll!7e4318e3()
user32.dll!7e44f687()
ntdll.dll!7c90eae3()
user32.dll!7e41fe13()
user32.dll!7e41fdd9()
kernel32.dll!7c80e5cb()
ntdll.dll!7c9106eb()
msvcr80d.dll!_heap_alloc_base(unsigned int size=271662096) Line 105 + 0x28 bytes C
msvcr80d.dll!_unlock(int locknum=5) Line 376 C
msvcr80d.dll!__set_flsgetvalue() Line 288 + 0xc bytes C
00000030()
msvcr80d.dll!write_string(char * string=0x7c911596, int len=2089879275, _iobuf * f=0x0012e218, int * pnumwritten=0x0012dcc0) Line 2570 + 0x19 bytes C++
ntdll.dll!7c912270()
ntdll.dll!7c911596()
ntdll.dll!7c9106eb()
msvcr80d.dll!_malloc_dbg(unsigned int nSize=5, int nBlockUse=57, const char * szFileName=0x0012d93c, int nLine=1235264) Line 191 + 0x1b bytes C++
msvcr80d.dll!__set_flsgetvalue() Line 288 + 0xc bytes C
msvcr80d.dll!_isleadbyte_l(int c=0, localeinfo_struct * plocinfo=0x102339e0) Line 57 + 0x29 bytes C++
0012dd24()
mfc80d.dll!AfxAssertValidObject(const CObject * pOb=0x7c911596, const char * lpszFileName=0x7c9106eb, int nLine=9) Line 107 C++
ntdll.dll!7c911538()
ntdll.dll!7c910732()
ntdll.dll!7c910732()
ntdll.dll!7c9106ab()
ntdll.dll!7c9106eb()
mfc80d.dll!CFile::~CFile() Line 112 + 0x3c bytes C++
msvcr80d.dll!_mbscmp(const unsigned char * s1=0x04a28c28, const unsigned char * s2=0x04a28b40) Line 84 + 0xf bytes C++
mfc80d.dll!ATL::ChTraitsCRT<char>::StringCompare(const char * pszA=0x0015d1a0, const char * pszB=0x00000000) Line 381 + 0xe bytes C++
0012e218()
ntdll.dll!7c9174d9()
user32.dll!7e41ff66()
mfc80d.dll!AfxCtxCreateWindowExA(unsigned long dwExStyle=0, const char * lpClassName=0x02408b44, const char * lpWindowName=0x00000000, unsigned long dwStyle=1342177280, int X=0, int Y=0, int nWidth=200, int nHeight=200, HWND__ * hWndParent=0x007f17da, HMENU__ * hMenu=0x0000e900, HINSTANCE__ * hInstance=0x00400000, void * lpParam=0x0012dedc) Line 438 + 0xa1 bytes C++
mfc80d.dll!CWnd::CreateEx(unsigned long dwExStyle=0, const char * lpszClassName=0x00000000, const char * lpszWindowName=0x00000000, unsigned long dwStyle=1342177280, int x=0, int y=0, int nWidth=200, int nHeight=200, HWND__ * hWndParent=0x007f17da, HMENU__ * nIDorHMenu=0x0000e900, void * lpParam=0x0012dedc) Line 694 + 0x35 bytes C++
mfc80d.dll!CWnd::Create(const char * lpszClassName=0x00000000, const char * lpszWindowName=0x00000000, unsigned long dwStyle=1342177280, const tagRECT & rect={...}, CWnd * pParentWnd=0x04a26af0, unsigned int nID=59648, CCreateContext * pContext=0x0012dedc) Line 743 C++
mfc80d.dll!CSplitterWnd::CreateView(int row=0, int col=0, CRuntimeClass * pViewClass=0x01153084, tagSIZE sizeInit={...}, CCreateContext * pContext=0x0012dedc) Line 291 + 0x32 bytes C++
Modaris 3D Fit.exe!CSplitterWndEx::Create(CWnd * pParentWnd=0x03aad724, CRuntimeClass * pView1=0x01153084, CRuntimeClass * pView2=0x01169674, CCreateContext * pContext=0x00000000, bool bVertical=false, int nID=59648) Line 73 C++
Modaris 3D Fit.exe!CNoteDlg::OnCreate(tagCREATESTRUCTA * lpCreateStruct=0x0012e3dc) Line 101 + 0x2a bytes C++
mfc80d.dll!CWnd::OnWndMsg(unsigned int message=1, unsigned int wParam=0, long lParam=1237980, long * pResult=0x0012e1b0) Line 2000 + 0xd bytes C++
mfc80d.dll!CWnd::WindowProc(unsigned int message=1, unsigned int wParam=0, long lParam=1237980) Line 1741 + 0x20 bytes C++
mfc80d.dll!AfxCallWndProc(CWnd * pWnd=0x03aad724, HWND__ * hWnd=0x003a17bc, unsigned int nMsg=1, unsigned int wParam=0, long lParam=1237980) Line 240 + 0x1c bytes C++
mfc80d.dll!AfxWndProc(HWND__ * hWnd=0x003a17bc, unsigned int nMsg=1, unsigned int wParam=0, long lParam=1237980) Line 389 C++
mfc80d.dll!AfxWndProcBase(HWND__ * hWnd=0x003a17bc, unsigned int nMsg=1, unsigned int wParam=0, long lParam=1237980) Line 411 + 0x15 bytes C++ Regards,
|
|
Technical Support
|
Nov 13, 2008 - 1:22 PM
|
We would like to try to reproduce this problem in a test project. Please provide us with details about your project or send it to us or send us only the UI related code. Whether the splitter control is created inside a dialog or a frame window? How and where the report grid control is created as a child of the splitter window?
|
|
Christan HIRIGOYEN
|
Nov 14, 2008 - 5:15 AM
|
I modified your MDI sample to reproduce the problem. How can I send you the zip file?
|
|
Technical Support
|
Nov 14, 2008 - 12:04 PM
|
|
|
Technical Support
|
Nov 12, 2008 - 1:05 PM
|
There is not enough information in your e-mail, which does not allow us to reply you at once. Could you please let us take a look at the call stack listing?
|
|
Offer Har
|
Nov 10, 2008 - 4:14 PM
|
|
|
Technical Support
|
Nov 14, 2008 - 12:19 PM
|
No. This is possible. Here is the list of steps to sort items in the CExtGridCellComboBox class:
1) Drop us an e-mail to the support mail box. 2) Receive answer with source code update download information. 3) Download and install it. 4) Re-build Prof-UIS and your projects. 5) Use new CExtGridCellComboBox::SortItems() method.
|
|
Technical Support
|
Nov 14, 2008 - 12:14 PM
|
No. This is possible. Here is the list of steps to sort items in the CExtGridCellComboBox class:
1) Drop us an e-mail to the support mail box. 2) Receive answer with source code update download information. 3) Download and install it. 4) Re-build Prof-UIS and your projects. 5) Use new CExtGridCellComboBox::SortItems() method.
|
|
Offer Har
|
Nov 17, 2008 - 9:59 AM
|
So I git my answer it was just implemented.... that all I wanted to know, if it was implemented yet or was I doing something wrong! I will drop you a mail - any news on the official 2.84 release?
|
|
Technical Support
|
Nov 12, 2008 - 1:03 PM
|
We have a queue of questions and requests. Some of them require some time. For instance, currently we are working on cell join feature in the CExtTreeGridWnd control. This feature is also one of your questions.
|
|
Offer Har
|
Nov 14, 2008 - 7:29 AM
|
So - is this thing possible, or you need to update the code for this? That’s all I want to know right now - need to report to the production if we can have it right away, or not... Thanks.
|
|
Offer Har
|
Nov 12, 2008 - 3:12 PM
|
If you don’t answer, I will keep on asking... I have no way of knowing if this is a bug, a missing feature, or I just didn’t do it correctly. I am not asking for too much, just a reply. Also, from your asnwer I still do not know if this is a bug, a missing feature or that I just did somethiung wrong... can you please answer this question?
|
|