Subject |
Author |
Date |
|
Adam Keadey
|
Jun 8, 2007 - 10:18 AM
|
I would like to dynamically disable the grouping all together in the CExtReportGridWnd. If this is not possible is there a style at startup that will disable the grouping alltogether.
It needs to basically remove the grouping options from the context menu so the group area cannot be shown and a column can not be set to grouping.
|
|
Technical Support
|
Jun 8, 2007 - 12:35 PM
|
Here are the steps:
1) Hide the group-by-box using CExtReportGridWnd::ReportGroupAreaShow() ; 2) Prevent the relating menu commands by overriding CExtReportGridWnd::OnReportGridColumnCtxMenuConstruct() . In this overridden method, first call CExtReportGridWnd::OnReportGridColumnCtxMenuConstruct() of the parent class method to let it construct the default context menu and then remove the unwanted commands from it.
|
|
Pierre MEDART
|
Jun 8, 2007 - 7:23 AM
|
Is there a way to cast CExtToolControlBar *’ to ’CToolBar * ?
|
|
Technical Support
|
Jun 8, 2007 - 8:06 AM
|
Here is the inheritance: CControlBar --> CExtControlBar --> CExtToolControlBar
CControlBar --> CToolBar As you can see, it is not possible to cast CExtToolControlBar to CToolBar . The CExtToolControlBar class implements a toolbar-like window which is written from scratch. The CToolBar class implements a control bar based container for the toolbar common control. These classes are absolutely different.
|
|
Andrew Banks
|
Jun 7, 2007 - 9:17 PM
|
I have 13000 rows for a report.
I call m_arrRegisteredItems.SetSize( numrows ); VERIFY( ReportItemRegister( m_arrRegisteredItems ) ); where numrows is 13000
This is extremely!!!!! slow.
Fine, i will override it and put a progress control in so the user does not think I am a total fool.
Well, ReportItemRegister refers to m_pRGW wich is protected, so I cant override ReportItemRegister and put a progress control in it..
class __PROF_UIS_API CExtReportGridItem : public CExtTreeGridCellNode { protected: CExtReportGridWnd * m_pRGW; friend class CExtReportGridDataProvider; friend class CExtReportGridWnd;
What can I do? Can you profile this and find out where it is so punishing slow? At 13000 rows and 5 columns, it is impossilve to use.
Thanks
|
|
Technical Support
|
Jun 8, 2007 - 6:00 AM
|
First of all, please check the performance in Release mode only because Debug mode is enough slow due to heavy assertion checks everywhere. If you want to implement the progress when filling the report grid with data, then you don’t need to override any virtual methods. We believe you should have some code like for( y = 0; y < 13000; y++ ) in your project where you can put the code updating the progress.
|
|
Oliver Burkert
|
Jun 7, 2007 - 7:31 AM
|
In my CExtRibbonBar, I want to hide and show buttons dynamically at runtime. What’s the best way to do this?
I tried calling ModifyFlags(__ECTN_TBB_HIDDEN, 0) on the CExtCustomizeCmdTreeNode object, but this doesn’t hide the button immediately; I had to switch to another tab and back before the change became visible.
|
|
Oliver Burkert
|
Jun 13, 2007 - 6:02 AM
|
For the moment, I can work around it by temporarily switching to another page (Ribbon_PageSelectionGet()), hiding the button and switching back.
|
|
Oliver Burkert
|
Jun 13, 2007 - 3:38 AM
|
Yes, this would be a useful feature (although probably too late for our project).
|
|
Oliver Burkert
|
Jun 8, 2007 - 7:57 AM
|
Isn’t there a better way to do this? This sounds quite inelegant to me. My code that builds the ribbon tree (loading it from the resources) is in a central location and used by a dozen different applications. I don’t want to rewrite the code for the creation of the ribbon tree in each application; I just want to hide specific buttons.
|
|
Technical Support
|
Jun 8, 2007 - 12:23 PM
|
The current version of the ribbon bar works with a solid tree data structure that describes the entire ribbon’s content only. In fact, ribbon nodes are persistent, but the ribbon is implemented as a toolbar with a ribbon-like layout. Toolbar buttons are instantiated for the selected ribbon page only. If a ribbon page is unselected, then you can modify its ribbon nodes safely. Otherwise you should reconstruct the ribbon.
We can regard your message as a feature request. It should not be difficult for us to implement this.
|
|
Technical Support
|
Jun 7, 2007 - 10:29 AM
|
You can do this in the same way as when you initialize the ribbon, i.e. you should recreate the ribbon tree and assign it using the CExtRibbonBar::SetButtons() method.
|
|
Massimo Germi
|
Jun 7, 2007 - 2:27 AM
|
Hi to all, How can I setup print preview mode when CExtGridWnd is a child control of a CView based window? Here is my situation: - MDI apps without document / view architecture; - CWnd based view; - CExtGridWnd is a child control of parent window and was created with Create method.
I would like to have a button to set/unset print preview in CExtGridWnd control.
Tx
|
|
Technical Support
|
Jun 7, 2007 - 11:27 AM
|
You can achieve this by applying the CExtPPVW template: CExtPPVW < CExtGridWnd > You can see how it is used in the SimpleGrids sample, in which grid windows are pages of the tab page container. The Prof-UIS_Controls (the Grid tab) may also be helpful.
|
|
Massimo Germi
|
Jun 7, 2007 - 1:48 AM
|
Hi to all, I’m using CExtReportGridWnd to display and print some tabular report. Is there a way to temporaly hide some column? If not how can I manual define a width of the columns?
thanks a lot in advance
|
|
Technical Support
|
Jun 7, 2007 - 10:26 AM
|
You can use the CExtReportGridWnd::ReportColumnActivate() method which makes columns visible/invisible.
|
|
Paul Cowan
|
Jun 6, 2007 - 12:44 PM
|
How do I detect when a column in CExtGridWnd has been auto resized by double clicking the header row cell borders? OnGbwResizingStateApply is not called for this resizing.
|
|
Technical Support
|
Jun 7, 2007 - 4:11 AM
|
You should override the CExtGridWnd::BestFitColumn() method. Please do not forget to invoke the parent class method.
|
|
Offer Har
|
Jun 6, 2007 - 6:58 AM
|
Dear Support, I see that you’ve added a new class in version 2.70 called CExtED. I keep getting crashes in this class in WindowProc when I receive a WM_KILLFOCUS to my CExtEdit derived control, which I did not get in version 2.62
I see that I get to CExtED in the WM_KILLFOCUS after my control is already destroyed (0xfeefee in the hWnd) - what is the purpose of this class? How can I fix this problem?
Please help. Thanks, Ron
|
|
Technical Support
|
Jun 6, 2007 - 10:32 AM
|
This template is used in CExtEdit and CExtEditHotKey and contains common code that is used in these classes.
Please change the following method in the CExtED template and let us know if the problem persists: virtual void _PostRedraw()
{
if( m_hWnd != NULL
&& ::IsWindow( m_hWnd )
)
{
VERIFY(
RedrawWindow(
NULL,
NULL,
RDW_INVALIDATE | RDW_UPDATENOW
| RDW_ERASE | RDW_ERASENOW
| RDW_FRAME | RDW_ALLCHILDREN
)
);
}
}
|
|
Offer Har
|
Jun 6, 2007 - 7:53 AM
|
In the meanwhile i removed the handling of WM_KILLFOCUS from this class, and could not see any different in the behavior (now I don’t get crashed... which enables me to keep working). Please let me know what it the motivation of this call to WM_KILLFOCUS, and why is it needed.
Thanks, Ron.
|
|
tera t
|
Jun 5, 2007 - 11:46 PM
|
Hi
A procedure to Assert
1. You start SimpleGird 2. You move a print preview screen 3, A page margin click 4, Option-click 5, You close an optional screen immediately 6, You click print
Assert
|
|
Technical Support
|
Jun 6, 2007 - 12:02 PM
|
Unfortunately it’s not possible to do this experiment with Prof-UIS 2.70 because the Options button was removed from the toolbar in the print preview window. The MFC print setup dialog works correctly only in the document/view environment where the document object exists and attached to the view window. The print preview window in Prof-UIS is based on the MFC scroll view window, but without the document. We had to remove the Options button.
|
|
Offer Har
|
Jun 5, 2007 - 1:33 PM
|
Dear Support,
Is there sample code for customizing CExtGridWnd In-Place controls? I need a Lat/Long cells and would like to use my existing control as the In-Place control.
Thanks, Ron.
|
|
Offer Har
|
Jun 6, 2007 - 1:45 PM
|
Dear Support,
Is there any sample of such implementation, besides the standard edit control? The lat-long controls are build of 4 section: hemisphere (N-S or E-W), degrees, minutes and seconds. There are separator symbols between them. In the old grid we used, the in-place control could be any CWnd derived control that we wanted, and was created like a normal control (Create), which allowed us to derive the already existing Lat-Long control we had, and add some minor modifications, like handling escape to terminate the in-place edit control. From what I understand it’s more complicated in your grid control - correct me if I’m wrong.
Thanks, Ron.
|
|
Technical Support
|
Jun 7, 2007 - 10:32 AM
|
The inplace editor can be any CWnd -derived window. You can find the example in Prof-UIS itself. The CExtGridCellDateTime and CExtGridCellDuration cells use the CExtDurationWnd class as the inplace editor, CExtGridCellSlider uses CSliderCtrl , and CExtGridCellIPAddress uses CIPAddressCtrl .
|
|
Technical Support
|
Jun 6, 2007 - 8:24 AM
|
To create a custom cell with an inplace editor, you should override the CExtGridCell::OnInplaceControlCreate() virtual method which is used for creating the inplace control. You could derive your editor class from CExtGridInplaceEdit . So basically you need to copy the body of the CExtGridCell::OnInplaceControlCreate() method into your overridden method and replace CExtGridInplaceEdit with CYourGridInplaceEdit (your class).
Please note there is a virtual method OnInplaceControlWindowProc() in the CExtGridCell class, which is spying on the window procedure of the in-place editor and returns true if a Windows message has been handled by the cell object. So you can override this method to handle any message sent from the in-place edit control. This means that probably you may not have to create your own inplace edit control.
Of course we can implement the Lat/Long cell ourselves for being part of Prof-UIS if you provide us with a specification of this cell type.
|
|
Offer Har
|
Jun 13, 2007 - 10:51 AM
|
Dear Support,
I am trying to implement my own cell, per your explanations. I get this error:
z:\Infra\TestGrid\TestGridDlg.cpp(12) : error C2665: ’CExtGridCell::operator new’ : none of the 2 overloads can convert parameter 2 from type ’const char [34]’ z:\3rdParty\Prof-UIS\Include\ExtGridWnd.h(1799): could be ’void *CExtGridCell::operator new(size_t,IMalloc *,bool)’ while trying to match the argument list ’(size_t, const char [34], int)’
When adding:
IMPLEMENT_SERIAL( CExtGridCellLat, CExtGridCellEx, VERSIONABLE_SCHEMA|1 );
The error is inside the macro. My cell derives from CExtGridCellEx.
Any ideas what is causing this error?
Thanks, Ron.
|
|
Technical Support
|
Jun 14, 2007 - 7:13 AM
|
The compilation of CExtGridCell derived classes may fail because there is a problem with IMPLEMENT_SERIAL and grid cells. This problem is caused by a conflict of C++ new operators defined locally in the CExtGridCell class. CExtGridCell defines its own new and new operators with parameters. The solution is easy. Please open the cpp file that implements your cell class and move the IMPLEMENT_SERIAL macro to the top of the file before the definition of the debug version of the new operator: #include "StdAfx.h"
. . .
IMPLEMENT_SERIAL(...
. . .
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
. . .
|
|
Offer Har
|
Jun 14, 2007 - 8:20 PM
|
Dear Support,
Thanks - this solved that problem. However we find it too complicated to implement a custom cell type. We started with the date-time as reference, but we ended up copying hundreds of lines of code, without knowing what they do, and without time to go and read all this code... and we also got some strange behavior that are too complicated to even start and fix.
In previous grids we used, it was very easy to do this task, but here it doesn’t seem so.
Will it be possible that for one of the coming releases you will enable a custom cell to be more easily be created. Please accompany this with a tutorial on how to create a custom cell time.
Please let me know what you think, and weather you are going to place this in your to-do list. In the meanwhile we will not be able to use the Prof-UIS grid in some projects, which we find very sad...
Thanks, Ron.
|
|
Technical Support
|
Jun 15, 2007 - 12:09 PM
|
Thank you for your feedback. We agree that a tutorial would be helpful and added this to our task list.
|
|
Chris Anderson
|
Jun 5, 2007 - 10:57 AM
|
Is there any way to convert a Prof UIS menu bar which contains menu items added dynamically into a CExtRibbonPage?
|
|
Chris Anderson
|
Jun 6, 2007 - 11:00 AM
|
We dont really care about the informativeness level and would like to add all the items at the second level as buttons inside the top-level button group and other sub popups as popup menus that are displayed as popup menus from the second level buttons. Also, we will not be having a toolbar. Would it still be difficult to implement such a conversion? I am just trying to find the easiest way to convert my CExtMenuControlBar to a CExtRibbonBar/CExtRibbonPage without having to write too much code!
|
|
Chris Anderson
|
Jun 5, 2007 - 12:54 PM
|
The reason why I was asking this is that we need an option wherein users may want to the see either the menubar or the same information in the ribbon page. We dont even need the ribbon bar. Since the same items need to be displayed in both the menubar as well as the ribbon page it would have been good if there was a way to interchangeably switch between these 2 UI elements without having to write too much code!
|
|
Technical Support
|
Jun 6, 2007 - 7:24 AM
|
The top level menu can be converted into button groups in the ribbon page. The second level are buttons inside each group, other levels are popup menus displayed from buttons. The only problem is in the second level buttons. Some of them are more important than other. So more important buttons should have different rules for changing informativeness level. The recursive conversion function will not know which buttons are more important and all the buttons will behave equally.
Besides you should note the ribbon replaces both toolbars and menus. So the ribbon is not an exact replacement for the menu bar and it is not actually easy to implement such switching.
|
|
Technical Support
|
Jun 5, 2007 - 12:33 PM
|
It is possible to code some function which converts the menu tree to the ribbon, but the inner structures of these controls are quite different. The menu has one classic top level. The next levels can be commands and sub levels. The ribbon has two top levels: tab pages and ribbon groups (inside tab pages). At least this means your menu should have popup submenus only at the first level for representing ribbon tab pages and popup submenus only at the second level for representing ribbon groups. Besides menu commands have no information about informativeness levels and behavior used in ribbon buttons. So potentially is possible to write such code, but we guess it may turn out to be specific for one particular project only and even may require to the menu resources in the source project to be modified.
|
|
Eric Houvenaghel
|
Jun 5, 2007 - 9:42 AM
|
Hello. I have found a bug in the grid of the sample application ProfUIS_Controls. I am having the same bug in my project. The bug is as follows: If you go in the grid of the ProfUIS_Controls application and change the size of several rows, the vertical scrolling has a strange behaviour.
|
|
Technical Support
|
Jun 5, 2007 - 11:28 AM
|
The grid window supports a dynamic size of the thumb button in the scroll bar. Basically, the height of the thumb button in the vertical scroll bar depends on the number of rows visible in the grid’s client area. If the rows have different heights, the number of visible rows changes during scrolling. That is why the thumb button’s height changes.
|
|
Vrinda Savargaonkar
|
Jun 5, 2007 - 6:22 AM
|
Dear Sir,
We are using prof uis v-7.0 . & Ribbonbar mdi in our (Biomedical) Diagnostic ECG application. During online ECG showing on view the UI speed is very very slow & some time application get hang . I am using following code in main frame after initialization of ribbonbar & CustomizeStateLoad to gain UI speed. CExtPopupMenuWnd::g_bMenuWithShadows = false; CExtPopupMenuWnd::g_bMenuShowCoolTips = true; CExtPopupMenuWnd::g_bMenuExpanding = false; CExtPopupMenuWnd::g_bMenuHighlightRarely = false; CExtPopupMenuWnd::g_bMenuExpandAnimation = false; CExtPopupMenuWnd::g_DefAnimationType = CExtPopupMenuWnd::__AT_NONE; CExtPopupMenuWnd::g_nDefaultFadeOutAnimationStepCount = 0; CExtPopupMenuWnd::g_nDefaultFadeOutAnimationEllapse = 0; CExtPaintManager::g_DefAnimationParametersNormal But there is not enough improvement in UI speed. How to improve UI speed? Please suggest some appropriate solution.
Thanks
|
|
Vrinda Savargaonkar
|
Jun 6, 2007 - 8:19 AM
|
Dear Sir,
My application is real time ECG system , which takes data from external device & display it . For that I am using multithreading & timers also.
In this case UI speed become very slow.
Can you please suggest some code that handle these situations & to improve speed of UI.
Thanks.
|
|
Vrinda Savargaonkar
|
Jun 6, 2007 - 8:11 AM
|
Thanks Hans ,
I overloaded CWinThread::IsIdleMessage() this function but not much improvement in UI speed. I am using multithrading & timers also in real time ECG application ,can you please specify some other methods also to improve UI speed. Regards
|
|
Technical Support
|
Jun 5, 2007 - 10:54 AM
|
Are you using timers and/or idle application time processing in you project for such long operations as data base queries? Besides, all the command updating handler methods should also be free of heavy operations.
|
|
Hans Bergmeister
|
Jun 5, 2007 - 11:49 AM
|
Hello,
we had a similar problem here and achieved a major improvement by overloading CWinThread::IsIdleMessage() in the following way:
BOOL CMyApp::IsIdleMessage(MSG* pMsg) // checks for special messages { if (pMsg->message == WM_TIMER) { return FALSE; }
return CWinApp::IsIdleMessage(pMsg); }
|
|
Nilesh Yeolekar
|
Jun 5, 2007 - 5:33 AM
|
I have a code like CMenu tempCmenu; tempCmenu.CreatePopupMenu(); //after this I m creating different popups depending on criteria
then, I use somethinkg like this...
CMenu* pMenu = pFrameWnd->m_wndMenuBar.GetMenu(); //here m_wndMenuBar is of CExtMenuControlBar. I m creating menubar with wndMenuBar.Create()
pMenu->InsertMenu(nPos, MF_POPUP | MF_BYPOSITION, (UINT)tempCmenu.Detach(), strMenuTitle);
Now, I want to use CExtPopupMenuWnd instead of CMenu to update the main menu and to redraw it so that I can insert one popup menu in the main menu bar
How do I do it?
Thanks Nilesh ------------
|
|
Technical Support
|
Jun 5, 2007 - 10:43 AM
|
You can modify the CMenu object returned by CExtMenuControlBar::GetMenu() only if your application is SDI because MDI applications constantly reset this menu. Finally, you should invoke the CExtMenuControlBar::UpdateMenuBar() method to see the changes.
|
|
Nilesh Yeolekar
|
Jun 6, 2007 - 4:11 AM
|
We have a legacy application which uses CMenu to insert menu in the main menu. code is like below
CMenu tempMenu; tempMenu.CreatePopupMenu(); pObj->OnSelect(vBRSUserObj,&tempMenu);
//here we use AppendMenu to create various popup menus depending on the criteria.
then we use CMenu* pMenu = AfxGetApp()->GetMainWnd()->GetMenu();
pMenu->InsertMenu(nPos, MF_POPUP | MF_BYPOSITION, (UINT)tempMenu.Detach(), strMenuTitle);
//tempMenu.Detach() returns a handle of popup menus created above so the main menu will have all the popups appended to it.
then we use AfxGetApp()->GetMainWnd()->DrawMenuBar();
Now, we replaced our main menu with CExtMenuControlBar(m_wndMenuBar).
Now we use
CMenu tempCmenu; CExtPopupMenuWnd * tempMenu = new CExtPopupMenuWnd(); tempCmenu.CreatePopupMenu(); tempMenu->UpdateFromMenu(GetSafeHwnd(), &tempCmenu);
Is this a correct way to do this?
//then we use, CExtPopupMenuWnd pointer tempMenu to create various popup menus like
pObj->OnSelect(vBRSUserObj,tempMenu);
//here we create popup menus like for (i to n) { tempMenu->ItemInsertCommand(id, -1, sometext); }
Now how can I use the created popup menus (ceated from CExtPopupMenuWnd pointer tempMenu) to get appended in the main menu(which is of type CExtMenuControlBar?
How can I insert a menu(a popup menu created with CExtPopupMenuWnd) in a CExtMenuControlBar?
|
|
Technical Support
|
Jun 6, 2007 - 8:28 AM
|
|
|
Hans Bergmeister
|
Jun 5, 2007 - 5:27 AM
|
Hello,
the width of a toolbar button in a CExtToolControlBar, which contains an icon and the text "Men & Women" (with a visible ampersand - i.e. the text physically stored in the button is "Men && Women" with the directive to print a single ampersand) is not correctly calculated. The width is apparently to small. It seems, that the visible ampersand is still interpreted as prefix character. If ’&&’ is replaced by any other character in the stored text, then the width of the button is calculated correctly.
|
|
Technical Support
|
Jun 9, 2007 - 8:07 AM
|
We fixed this bug. You can download the updated code via ftp. If you don’t know how, please contact us via email.
|
|
Technical Support
|
Jun 5, 2007 - 9:23 AM
|
We confirm that the width is incorrectly calculated in this case and will provide you with a fix as soon as possible. Thank you.
|
|
tera t
|
Jun 4, 2007 - 11:20 PM
|
Hello.
Even if I install Prof-UIS2.7 I cannot print SimpleGrid definitely. A last line protrudes by all means.
ttp://profuis0.tripod.com/20070402/image01.jpg ttp://profuis0.tripod.com/20070402/image02.jpg
Will not size setting of "CreateEbhMetaFile" be different when I compare English version Windows with Japanese Windows? Or will size be set small?
I ask for an answer as soon as possible.
Thanks,
|
|
tera t
|
Jun 6, 2007 - 6:14 PM
|
Hi
>We are really sorry but could we schedule the remote >connection for tomorrow (June 07)? OK. I prepare.
By the way. I examined even this one. Resolution of an output metafile is 88. However, dots per 1 inch of a screen is 96.
A problem occurs in a difference of this resolution?
|
|
tera t
|
Jun 6, 2007 - 6:38 PM
|
Hi
When I change setting of a screen in 1dot88.
With this PC, it was printed well.
It is caused by the fact that resolution of the metafile side is not set?
|
|
tera t
|
Jun 6, 2007 - 10:20 PM
|
I’m sorry
It is a mistake of dpi not dot.
88dot -> 88dpi 96dot -> 96dpi
|
|
tera t
|
Jun 4, 2007 - 11:27 PM
|
Hi
If "Debug" environment is necessary, please say. I prepare for environment.
Thanking you in advance.
|
|
Technical Support
|
Jun 5, 2007 - 10:46 AM
|
It would be very convenient to debug the problem on your machine. Please send us information about how and when we can connect to your desktop.
|
|
Offer Har
|
Jun 4, 2007 - 7:51 PM
|
Dear Support, We would like to color each item in the drop-down list in a different color. How can this be achieved? Thanks, Ron.
|
|
Technical Support
|
Jun 5, 2007 - 9:15 AM
|
You cannot do this directly but there is a workaround. You need to draw combo box items yourself. Derive your class from CExtGridCellCheckListComboBox and override the OnPopupListBoxItemDraw method which is used for drawing items. Just copy the content of this method from CExtGridCellCheckListComboBox class and make the appropriate changes in the code that draws the background.
|
|
Hans Bergmeister
|
Jun 4, 2007 - 10:26 AM
|
Hello,
many thanks for releasing version 2.70. It seems to contain again many great new features and improvements. Since we are very happy with your products so far, we are recommending your products and got another major company here in Europe to buy a site license of Prof-UIS recently.
However, the following bug, that has been reported earlier, still persists in Version 2.70:
Start the MDI_DynamicBars sample and make Dynamic Bar 8, Dynamic Bar 9 and Dynamic Bar 10 floating. Then dock Bar 9 and then Bar 10 together with bar 8 side by side in a row within the same floating container. Bar 8 to the left, Bar 9 in the middle, Bar 10 to the right, visible side by side in a row (not tabbed !!) within the same floating container (let us call this "Figure 1"). Now hide the floating container together with all three bars by clicking the X in the container’s NC area. Now select the menu entry View->Dynamic Resizable Bars->Dynamic Bar 8. Dynamic Bar 8 appears as expected. Now select View->Dynamic Resizable Bars->Dynamic Bar 9. Dynamic Bar 9 appears as expected right of Dynamic Bar 8. Now select View->Dynamic Resizable Bars->Dynamic Bar 10. Dynamic Bar 10 appears, too, but the sizes of the bars, i.e. the ratio of their particular widths, does not match the original ratio of "Figure 1". In our case Bar 9 ends as a very narrow window with a width of a few pixels. In other words: the three bars are not restored with their previous width.
I reported this bug already for Version 2.64 on Feb. 22. Your prompt response here in this forum was: "We reproduced the problem. It is the highest possible priority for us. We hope to fix this issue in a few days. We will notify as it is ready." It still doesn’t seem to be ready. ;-)
|
|
Technical Support
|
Jun 5, 2007 - 9:09 AM
|
This issue is not fixed yet because we have not found a good solution. It is not a problem to restore the size of two control bars in one floating palette. But if you have more than two control bars, their positions mutually depend on each other. In fact, it is hardly possible to keep all possible state combinations for all possible bar states especially when some of control bars are not visible in a particular state. By the way, the same problem exists in Visual Studio 2005:
1) Open the Search In Files window. It is a resizable control bar in Visual Studio 2005 and it is constantly floating by default.
2) Make its dockable. This is needed to make it possible to dock several other bars into the same floating palette with it.
3) Dock several other control bars into the same complex floating palette.
4) The Search In Files bar has two +/- buttons which affect the size of its bar. Press any button several times and take a look at the entire layout of the palette.
|
|
Hans Bergmeister
|
Jun 5, 2007 - 9:42 AM
|
Hello,
I understand your problem, especially with regard to keeping all possible state combinations for all possible bar states.
However, in the scenario, that I described earlier, bar 9 ends with a width of just a few pixels. You should at least assign a "reasonable" minimum width to all restored bars.
Second, our bug report is basically based on the following request: we need a mode to restore all bars in a hidden floating palette in one step. That means: if the floating bar has been hidden before by pressing the X on its titile bar, it should be possible to restore the complete palette with all bars in their most recent state _in_one_step_. Calling one of the contained bars (e.g. either bar 8, bar 9 or bar 10 in the example above) in this specific mode should make all previously visible sibling bars visible again, too, in one single step and in the same state.
This specific mode would reduce your problem of keeping all possible state combinations for all possible bar states to keep only the most recent state combination and to restore this most recent state combination in one step. Is there any chance to provide this feature?
|
|
Technical Support
|
Jun 6, 2007 - 7:13 AM
|
It is possible to restore visibility of all control bars inside a floating palette if all of them are invisible and all of them should become visible. The state loading algorithm does this when the floating palettes are loaded. But this task has no sense at run-time. We could code a function which gets a pointer to some control bar in its parameter and display all the control bars in the same floating palette. This task has no sense because the user can dock everything with everything. We guess you can provide us with more details about your task so we can try to find some better solution. For instance, some applications have several independent states for all the control bars. You can see this in the FullScreenState sample which supports the normal and full screen modes and all the bar states are different in these modes. The bar states become saved/restored when switching between modes. This is similar to switching between normal and debug modes in Visual Studio.
|
|
Hans Bergmeister
|
Jun 6, 2007 - 7:41 AM
|
Hello,
> We guess you can provide us with more details about your task so we can try to find some better solution. < Ok - this is what we want to achieve:
- Assume an application with lots of dynamic bars (like your MDI_DynamicBars sample) - The user is now able to group related bars together inside a common floating palette in an arbitrary manner. - The user can now hide this group of bars with one click. This is possible today by clicking to the "X" of the floating palette.
So far so good - everything is already possible.
- But it would be very handy now, if the end user could now restore the hidden floating palette with all contained bars in their _previous_ state (this is just the state of each bar just before clicking the "X") in one_single_step.
|
|
Dusan Gibarac
|
Jun 4, 2007 - 9:39 AM
|
compling the program I got an error:
..\ExtPopupMenuWnd.h(125): error C2504: ’CEvent’: base class undefined
Any helps?
|
|
Technical Support
|
Jun 5, 2007 - 6:48 AM
|
It seems you explicitly included ExtPopupMenuWnd.h somewhere in your code and that may be the cause of the problem. Typically it is enough to include only one file Prof-UIS.h into your project so that you can use Prof-UIS. The best place is StdAfx.h.
|
|
Paul Cowan
|
Jun 4, 2007 - 6:58 AM
|
How do I dtermine the currently selected cell in a CExtReportGridWnd?
|
|
Technical Support
|
Jun 5, 2007 - 6:17 AM
|
There is an article about how to get selected cells (Prof-UIS grids support multiple cell selection). But the approach below may be easier in the case of CExtReportGridWnd .
You can enumerate all the selected cells in column nColNo by using the following code: LONG nRowNo = m_wndReportGrid.SelectionGetFirstRowInColumn( nColNo );
while( nRowNo >= 0L )
{
HTREEITEM hTreeItem =
m_wndReportGrid.ItemGetByVisibleRowIndex( nRowNo );
ASSERT( hTreeItem != NULL );
CExtReportGridItem * pRGI =
m_wndReportGrid.ReportItemFromTreeItem( hTreeItem );
ASSERT( pRGI != NULL );
ASSERT_VALID( pRGI );
if( pRGI->TreeNodeGetChildCount() == 0L )
{
//
// Here pRGI is a data cell
//
}
nRowNo = m_wndReportGrid.SelectionGetNextRowInColumn( nColNo, nRowNo );
} You can use the SelectionGetLastRowInColumn() and SelectionGetPrevRowInColumn() methods for traversing the column in the reversed order from bottom to top. Alternatevely, you can enumerate all the selected cells in row nRowNo by using: LONG nColNo = m_wndReportGrid.SelectionGetFirstColumnInRow( nRowNo );
while( nColNo >= 0L )
{
...
nColNo = m_wndReportGrid.SelectionGetNextColumnInRow( nColNo, nRowNo );
} You can use the SelectionGetLastColumnInRow() and SelectionGetPrevColumnInRow() methods for traversing the same row in the reversed order from right to left.
|