Subject |
Author |
Date |
|
David Skok
|
May 29, 2008 - 8:40 AM
|
In certain cases CExtTabWnd controls in my app will not have any tabs to start with. Where can I override the empty tab painting so that I may put a text message in its place. Thanks, Dave
|
|
David Skok
|
Jun 2, 2008 - 7:48 AM
|
You misunderstand. The message is to be displayed only if there are no tabs or no visible tabs. The empty client space would contain text such as "No tabs inserted yet."
This message would be similar to the one displayed in empty grids, overridable to customize.
Dave
|
|
Technical Support
|
Jun 2, 2008 - 11:58 AM
|
You should implement the CExtTabWnd::OnTabWndEraseClientArea() virtual method. The method should call the parent class’s method and use the rcTabItemsArea parameter for painting text if no tab items are available.
|
|
Technical Support
|
May 29, 2008 - 11:48 AM
|
You can implement the CExtTabWnd::OnTabWndDrawItem() virtual method and not invoke the parent class method if you want to hide tab items. But the tab items will exist and be still selectable what is not good because you need to implement several additional virtual methods. The better solution would be to apply the __ETWI_INVISIBLE style by invoking the CExtTabWnd::TAB_ITEM_INFO::ModifyItemStyle() method to all tab items which you want to hide. You can get a pointer to the CExtTabWnd::TAB_ITEM_INFO data object describing the tab item by using the CExtTabWnd::ItemGet() method.
|
|
Timothy Anderson
|
May 28, 2008 - 6:36 PM
|
You need a combo LoadIconFromModule and LoadIconFile that is something like: STDMETHODIMP CExtAutoCommand::LoadIconFromModuleFile( BSTR strFileName, int nIconIndex, int dx,int dy, VARIANT_BOOL * bRetVal )
So I can set the toolbar button size instead of hard coding it to 16x16... Luckily this is easy enough to hammer together myself.
|
|
Timothy Anderson
|
May 28, 2008 - 8:02 PM
|
I added this in to LoadIconFromModule, hopefully it is correct. I just yanked it from google ICONINFO IconInfo; if (!GetIconInfo( hIcon, &IconInfo )) { ::DestroyIcon(hIcon); return S_OK; }
BITMAP bmp; if (GetObject( IconInfo.hbmColor, sizeof(BITMAP), &bmp ) == 0) { ::DestroyIcon(hIcon); return S_OK; }
// Convert the color format to a count of bits. DWORD cClrBits = (DWORD)(bmp.bmPlanes * bmp.bmBitsPixel); if (cClrBits == 1) cClrBits = 1; else if (cClrBits <= 4) cClrBits = 4; else if (cClrBits <= 8) cClrBits = 8; else if (cClrBits <= 16) cClrBits = 16; else if (cClrBits <= 24) cClrBits = 24; else cClrBits = 32;
BITMAPINFOHEADER bih; ::memset( &bih, 0, sizeof(BITMAPINFOHEADER) ); bih.biSize = sizeof(BITMAPINFOHEADER);
bih.biWidth = bmp.bmWidth; bih.biHeight = bmp.bmHeight; bih.biPlanes = bmp.bmPlanes; bih.biBitCount = bmp.bmBitsPixel; bih.biCompression = BI_RGB; if (cClrBits < 24) { bih.biClrUsed = (1<<cClrBits); }
// Compute the number of bytes in the array of color // indices and store the result in biSizeImage. // For Windows NT, the width must be DWORD aligned unless // the bitmap is RLE compressed. This example shows this. // For Windows 95/98/Me, the width must be WORD aligned unless the // bitmap is RLE compressed. bih.biSizeImage = ((bih.biWidth * cClrBits + 31) & ~31) /8 * bih.biHeight;
|
|
Technical Support
|
May 31, 2008 - 10:39 AM
|
Could you show the entire source code of this method to let us debug and test it?
|
|
Offer Har
|
May 28, 2008 - 5:03 PM
|
The CExtNCW on child frame makes everything acts very slowly - the main frame frame flickers, the maximize and minimize of views takes much longer, etc etc.
|
|
Offer Har
|
May 29, 2008 - 11:49 AM
|
|
|
Technical Support
|
May 29, 2008 - 11:44 AM
|
This is fixed. Thank you. We can provide you with the source code update.
|
|
Offer Har
|
May 29, 2008 - 2:58 PM
|
I went to the ftp site, and I see the latest 2.83 is from May 27. Does it contain all the fixes for they bugs from today? When is the final 2.83 going to be released? any date? we have some deadlines, and would like to know if we’ll be able to switch to a final version for them.
|
|
Offer Har
|
May 28, 2008 - 5:01 PM
|
When a tab control is docked on the right side the lines separating the inactive tabs are not displayed. I have reported this bug last year, and it is still there in 2.83. You can see it in my previous thread about the CExtNCW child frame bug.
|
|
Technical Support
|
May 29, 2008 - 11:45 AM
|
This is fixed. Thank you for this report.
|
|
Offer Har
|
May 28, 2008 - 4:59 PM
|
I am using 2.83 with the new CExtNCW template on my CMDIChildWnd docked on the right side. I have a CExtTabMdiWnd . When I open two views (maximized), and start to move between them by pressing their tabs, weird things start to happen - I get weird ttitle bars to my child frames, sometime on top, sometimes on the bottom.
When I remove the CExtNCW , this bug is not there... Here is a picture of the extra lines:
|
|
Technical Support
|
May 29, 2008 - 11:43 AM
|
This is fixed. Thank you.
|
|
howard liu
|
May 28, 2008 - 3:26 AM
|
Hi, <o:p></o:p> In my application I would like to create an CExtControlMenuBar and to this add menu items by using something like InsertMenuItem (MFC type). I would like to know a method in Prof UI that is equivalent of InsertMenuItem( ) in MFC that will enable us to add menu items to an already existing menu list either statically or dynamically. We are are looking at an alternative option to overriding the _UpDateMenuBar( ). We would like to have a solution by having a method that would insert a menu item to the menu bar from being any where in the application (NOT specifically only through the _UpDateMenuBar() handler).<o:p></o:p> Thanks, <o:p></o:p> Howard <o:p></o:p>
|
|
Technical Support
|
May 29, 2008 - 4:05 AM
|
It’s not possible to provide the menu bar with custom buttons in the menu line without overriding the _UpdateMenuBar() virtual method. Of course, we are talking about a non-customizable menu bar. You can implement exactly the same _UpdateMenuBar() method but it will build the content using a custom CMenu object. Different subsystems in your application should simply modify the menu tree, update the command manager from it and, finally update the menu bar by invoking its CExtMenuControlBar::UpdateMenuBar() method.
|
|
tera t
|
May 27, 2008 - 10:38 PM
|
Hello I want the Japanese of the following contents to revise it. The usage of words called is in particular strange.
|
|
Technical Support
|
May 31, 2008 - 10:40 AM
|
Thank you for the updated resources. v.2.83 does not introduce any new resources.
|
|
Technical Support
|
May 29, 2008 - 4:03 AM
|
Please let us know more details about the problem. If you disagree with the Japanese translation, would you modify the corresponding Japanese resource and send it to us?
|
|
tera t
|
May 29, 2008 - 8:04 PM
|
|
|
Kevin Eshbach
|
May 27, 2008 - 12:46 PM
|
I have a slider on a toolbar to replace a button, but the area occupied by the button still appears. I have managed to get rid of the button’s bitmap and set the text to a string with a single space character, but there is still a slight gap where the button is for the space character. How do I completely get rid of the button so that it doesn’t show a small gap for the space character? Kevin Eshbach
|
|
Kevin Eshbach
|
May 28, 2008 - 11:27 AM
|
<o:p></o:p> I started with the example that you suggested but when I set the icon to null I now get the tooltip text to the left of the slider. I would like to not have the icon or the tooltip show up to the left of the slider. I do want the tooltip to appear when the mouse cursor hovers over the slider. Below is the code I have tried but text still shows up after I create a second slider from the customize dialog.
CAgUiToolbarSlider::CAgUiToolbarSlider( CExtToolControlBar* pBar,<o:p></o:p> UINT nCmdID,<o:p></o:p> UINT nStyle,<o:p></o:p> ULONG nScrollTotalRange,<o:p></o:p> ULONG nScrollPos,<o:p></o:p> ULONG nScrollPageSize,<o:p></o:p> INT nScrollButtonExtentH,<o:p></o:p> INT nScrollButtonExtentV,<o:p></o:p> INT nScrollControlExtentH,<o:p></o:p> INT nScrollControlExtentV ) :<o:p></o:p> CExtBarSliderButton(pBar,nCmdID,nStyle,nScrollTotalRange,nScrollPos,nScrollPageSize,<o:p></o:p> nScrollButtonExtentH,nScrollButtonExtentV,nScrollControlExtentH,<o:p></o:p> nScrollControlExtentV)<o:p></o:p> {<o:p></o:p> CPersMainFrame* pFrame = dynamic_cast<CPersMainFrame*>(AfxGetMainWnd());<o:p></o:p> if( pFrame )<o:p></o:p> {<o:p></o:p> CExtCmdIcon* pIcon = new CExtCmdIcon();<o:p></o:p> pIcon->Empty();<o:p></o:p> g_CmdManager->CmdSetIcon(pFrame->GetProfileName(),nCmdID,pIcon,false);<o:p></o:p> <o:p> </o:p> CExtCmdItem* pCmdItem = g_CmdManager->CmdGetPtr(pFrame->GetProfileName(),nCmdID);<o:p></o:p> pCmdItem->m_sToolbarText = "";<o:p></o:p> }<o:p></o:p> }
Kevin Eshbach
|
|
Technical Support
|
May 29, 2008 - 4:17 AM
|
You can invoke the CExtCmdManager::CmdSetIcon() method and in it specify a reference to an empty CExtCmdIcon object in order to remove an icon from any command. You can get a pointer to a CExtCmdItem object by its command identifier using the CExtCmdManager::CmdGetPtr() method and change the tooltip and/or status tip texts of the command to empty strings.
|
|
Technical Support
|
May 28, 2008 - 4:57 AM
|
We would recommend you not to use any windows attached to toolbar buttons if it is possible. By default toolbars, menu bars and ribbons instantiate CExtBarButton objects for each of toolbar buttons. But there are also several CExtBar*** classes in Prof-UIS implementing different kind of toolbar buttons without using any HWND handles. The CExtBarSliderButton class implements a slider toolbar button and a scroll bar toolbar button. It’s demonstrated in the AviFrames sample.
|
|
Ulrich Heinicke
|
May 27, 2008 - 4:12 AM
|
Hi,
i want to allow the user to change the style (maybe from CExtPaintManagerOffice2007_R3_LunaBlue to CExtPaintManagerNativeXP). The menu, toolbars, buttons etc. will be changed by the paintmanager, but not the tabwnd (TabPageContainerWnd and TabMdiWnd) see the screenshots: 1. CExtPaintManagerOffice2007_R3_LunaBlue and OneNoteWnd 2. CExtPaintManagerNativeXP and the wrong TabWnd-style (OneNoteWnd any more) 3. CExtPaintManagerNativeXP and how it should be (standard TabWnd) Is there a posiblility to change the TabWnd according to the style? Thanks
Ulrich
|
|
Technical Support
|
May 27, 2008 - 1:59 PM
|
The paint manager is used in most of Prof-UIS classes. But some classes like one note tab window and tab page container window are theme independent.
|
|
Ulrich Heinicke
|
May 28, 2008 - 8:40 AM
|
Than i make it by my own. Please tell me how i can get the selected style (RUNTIME_CLASS) from the paintmanager. Thanks
Ulrich
|
|
Technical Support
|
May 29, 2008 - 4:12 AM
|
You should get a pointer to the currently installed instance of the paint manager and analyze its type: CExtPaintManager * pPM = g_PaintManager.GetPM();
ASSERT_VALID( pPM );
if( pPM->IsKindOf( RUNTIME_CLASS( CExtPaintManagerOffice2003 ) ) )
{
// Office 2003 paint manager is installed or some other derived from it
}
|
|
Ulrich Heinicke
|
May 27, 2008 - 2:38 AM
|
Hi,
my question is how i can receive the modified values from a CExtPropertyGrid, when the user press the apply button ? thanks
Ulrich
|
|
Technical Support
|
May 28, 2008 - 4:46 AM
|
The property grid control displays a tree like data structure called "property store". The property store is based on the CExtPropertyItem classes and derived from it. The root node is CExtPropertyStore . The other nodes are CExtPropertyCategory and CExtPropertyValue objects. Each property value contains two grid cells representing the active and default values. The property grid control displays active values. The default values allow you to reset the values (available from the context menu displayed over property value rows). If some property value has unequal active and default grid cells, this property value assumed as modified and displayed as bold row. You can invoke ValueActiveGet() and ValueDefaultGet() methods of the CExtPropertyValue object to get active and default grid cells.
Some more detailed information about property grid control. It’s designed as container for one or more tree grid windows displaying property store content and other windows called bars (toolbar, combo box bar, help tip bar). The CExtPropertyGridCtrl property grid control needs at least one tree grid window based on the CExtPropertyGridWnd class to be created inside it (by default two grids are created: CExtPropertyGridWndCategorized and CExtPropertyGridWndSorted ). The bar windows can be not created at all. Each tree grid window contains cloned copies of the active grid cells stored in property values inside property store. When user completes editing of some grid cell describing active value of some property value, then the corresponding grid cells in other tree grid and active grid cell of property value inside property store becomes automatically synchronized with just edited grid cell. The CExtPropertyGridCtrl::OnPgcInputComplete() virtual notifies about end-of-editing event. The similar synchronization is performed when user reset’s some property value and CExtPropertyGridCtrl::OnPgcResetValue() notifies about reset event. You need to implement both virtual methods for complete tracking of value changing events.
The described above information allows you to get 100% controlled property grid control and apply any editing changes on-the-fly even without any Apply button outside the property grid control. If you need Apply button based approach, then you simply should walk through all the property items in the property store and detect modified property values using CExtPropertyItem::IsModified() method.
|
|
tera t
|
May 26, 2008 - 8:22 PM
|
Hello. In ribbon, is such an expression possible?
|
|
Technical Support
|
May 27, 2008 - 1:53 PM
|
Yes, it’s possible. Do you need buttons of a custom size and/or the custom number of rows/columns?
|
|
tera t
|
May 27, 2008 - 6:24 PM
|
Hello. I inquire it for your information.
However, only 16(Height)*24(Width) buttons want to come out. Should I make 16*24 bmp? Thanks,
|
|
Technical Support
|
May 28, 2008 - 12:15 PM
|
If you change the size of your icons to 16*24, they will be used with exactly this size. Prof-UIS does not change the size of icons.
|
|
tera t
|
May 26, 2008 - 8:18 PM
|
Hello. Beside a tab, I want to stick CButton and CEdit.
Will it be impossible?
|
|
tera t
|
May 27, 2008 - 6:37 PM
|
Hello. It was able to come true. Thanks,
|
|
Technical Support
|
May 29, 2008 - 3:52 AM
|
You created a button window and its position is above the tab window. This design is OK. But please note you should have enough space for tab items.
|
|
Technical Support
|
May 27, 2008 - 1:52 PM
|
This is possible but you should manually place your button and edit windows into the same row with the tab window. Please provide us more details about this tab window.
|
|
howard liu
|
May 26, 2008 - 5:57 AM
|
Hi, I have enabled Prof-UI tool bars for several of the user interfaces in my application. These are dockable Prof-UI tool bars. There is a feature that allows one to see a popup menu showing list of tool bars, when right clicked either on the tool bar or within the non-client area near the tool bar. Is there a possibility to make this popup menu NOT TO appear upon right click Thanks, Howard
|
|
howard liu
|
May 27, 2008 - 11:46 AM
|
Hi, Thanks for the links. The link that you have provided is going to be very informative and useful to us for the improvements that we want to make over the popup menus. Also presently we are looking for an equivalent method in Prof-UI for the MFC method called ’InsertMenuItem()’. Is there a equivalent for this method in Prof-UI that will enable us to add menu items to the existing menu list statically. That is we are looking at an alternative to overriding the _UpDateMenuBar(). We would like to have a solution by having a method that would insert a menu item to the menu bar from being any where in the application (NOT specifically only through the _UpDateMenuBar() handler). Thanks, Howard
|
|
Technical Support
|
May 28, 2008 - 4:26 AM
|
The CExtMenuControlBar::GetMenu() method returns a Win32 menu tree that is currently displayed in the menu bar. This menu can be different in the MDI environment depending on which MDI child frame window is active. This menu is static and persistent in the SDI environment. In the latter case, you can modify this menu and call CExtMenuControlBar::UpdateFromMenu() method to rebuild the menu bar’s buttons. But Prof-UIS popup menus, including those displayed from menu bar’s buttons require all menu command be registered in the command manager. So, you should also update the command manager from your dynamically re-constructed menus by using g_CmdManager->UpdateFromMenu() code.
The Prof-UIS popup menus based on the CExtPopupMenuWnd class are always dynamic. The CExtPopupMenuWnd -based menu tree is always constructed in dynamically allocated C/C++ memory, displayed on the screen with CExtPopupMenuWnd::TrackPopupMenu() and left without being manually destructed. The popup menus always destroy themselves automatically when the menu is closed.
Prof-UIS also supports customizable toolbars and menus with or without COM wrapper objects implemented in the ProfAuto library. The customizable toolbars and menus are really the most configurable UI ever implemented in Windows and used in many Microsoft applications including a set of MS Office and Visual Studio versions. You can see simplest possible customizable UI in the StyleEditor sample application. The Pluggable sample demonstrates how to build customizable toolbars and menus dynamically using a set of DLL modules as EXE plugins. Each found DLL module uses its own command(s) in the customizable UI implemented in the main frame window of this sample. The ActiveScripts sample uses a customizable UI with COM wrapper objects provided by the ProfAuto library. This sample allows some scripts to register their commands and input fields in toolbars and menus. It also allows these scripts to handle events of toolbar and menu items.
|
|
Technical Support
|
May 26, 2008 - 12:37 PM
|
|
|
howard liu
|
May 26, 2008 - 5:41 AM
|
Hi, I am using 2.83 version of Prof-UI in enabling the scroll bars to take up prof-ui properties. I am having problems while enabling prof-ui over scroll bars associated with cformview. Is there anything specific to be done for enabling prof-ui property over scroll bars in cformview. Thanks, Howard
|
|
Technical Support
|
May 26, 2008 - 12:35 PM
|
|
|
Kevin Murray
|
May 23, 2008 - 11:38 AM
|
<font color="#030003" size="2"><font color="#030003" size="2">
CExtDockOuterBar::_AffixmentBringToTop asserts during the drag operation, around line 6562 (this is version 2.82) in ExtDockBar.cpp, which is ASSERT( nWeight2 != nWeightX ); The assert can be safely ignored, and things continue as expected. The ASSERT does not occur for the remainder of the application run, but only on that first try... Any ideas? We did just load customization data and toolbar information from a saved file (going through your Serialization methods). K.
|
|
Technical Support
|
May 23, 2008 - 1:58 PM
|
Please ensure all the toolbars (and resizable control bars too) created in the main frame window have unique dialog control identifiers.
|
|
howard liu
|
May 23, 2008 - 5:04 AM
|
Hi,<o:p></o:p> I am trying apply Prof-UI design to the user interface of my application. The main user interface of my application has a menu bar and 3 panes. One pane is used to display a graph(graphics pane), other pane is used to exhibit text(text pane) and the third pane is used to show some results(result pane). Depending on which pane i click, the menu bar items gets updated. I.e. to say when i click on graphics pane I have a particular set of menu bar items. When I move and click on text pane the menu bar items get changed and again when i move to result pane the menu bar items get changed. The menu bar gets dynamically updated depending on which pane you are in. <o:p></o:p> But after enabling Prof-UI modification over the user interfaces, the dynamic updation of the menu bar is not happening. I am not able to see any dynamic changes to the menu bar items on moving from one pane to the other. Are there any specific method that is already available in Prof-UI that I can use for the dynamic updation of the menu bar items.<o:p></o:p> <o:p></o:p> Thanks, <o:p></o:p> Howard <o:p></o:p>
|
|
Technical Support
|
May 24, 2008 - 6:21 AM
|
The menu bar in Prof-UIS supports automatic menu content updating depending on the active MDI child frame window in the MDI interface. If you need to modify the menu bar’s content depending on the focused windows in resizable control bars, you should reload the menu bar’s content content manually. The CExtMenuControlBar control is kind of the CExtToolControlBar toolbar control. I.e. the menu bar is a toolbar in which the menu line is implemented as a set of toolbar buttons with menus. The CExtMenuControlBar::UpdateMenuBar() recreates all the buttons in the menu bar. The CExtMenuControlBar::_UpdateMenuBar() virtual method removes all the buttons and creates a new set of buttons. You can override the CExtMenuControlBar::_UpdateMenuBar() virtual method and implement your algorithm of building the menu bar’s content. Your method should be the same as the original one except that it should use your preferred menu resources instead of the default menu tree assigned to the main frame window.
|
|
tera t
|
May 22, 2008 - 10:19 PM
|
Hello. I choose a color pop-up menu many times.
Then there is time when "?" is displayed.
It is a bug.
|
|
Technical Support
|
May 26, 2008 - 12:31 PM
|
We cannot reproduce this problem. We used the ProfUIS_Controls sample for testing.
Please note the __EGCS_*** styles should be used with the CExtGridCell::GetStyle() and CExtGridCell::ModifyStyle() methods but the __EGCS_EX_*** styles should be used with the CExtGridCell::GetStyleEx() and CExtGridCell::ModifyStyleEx() methods. Please check if you are using the grid cell styles correctly.
|
|
Technical Support
|
May 23, 2008 - 1:45 PM
|
The "?" character is painted instead of the color box in the CExtGridCellColor grid cells if at least one of the following extended grid cell styles are applied: __EGCS_EX_UNDEFINED_ROLE
__EGCS_EX_EMPTY
__EGCS_EX_INVISIBLE The __EGCS_EX_INVISIBLE extended grid cell style is new in Prof-UIS 2.83.
|
|
tera t
|
May 25, 2008 - 6:53 PM
|
Hello. I do not use those styles.
It is sample itself. When I touch it in a collar button continually.
The malfunction that "a" is displayed appears. Will you examine it?
|
|
tera t
|
May 25, 2008 - 6:57 PM
|
Hello. I do not use those styles.
It is sample itself. When I touch it in a collar button continually
The malfunction that "?" is displayed appears. Will you examine it?
|
|
Ulrich Heinicke
|
May 22, 2008 - 1:41 PM
|
Hi, i have a problem when i open a document in my MDI program. The filename is not displayed in the MDI tab and in the view menu, but in the small menu into the tab bar the filename will be displayed. see Please tell my how to solve the problem. Thanks Ulrich
|
|
Ulrich Heinicke
|
May 25, 2008 - 11:08 AM
|
|
|
Technical Support
|
May 26, 2008 - 12:28 PM
|
Both MFC and Prof-UIS do not distinct if a document template (a document, a view or a frame object) is created as an instance of an EXE-based class or a DLL-based one. The Prof-UIS MDI tab control does not use statically assigned text strings. It finds tab item texts automatically. Please let us describe some more details. Any tab window in Prof-UIS uses the CExtTabWnd::OnTabWndQueryItemText() virtual method for querying tab item text. The generic tab windows return the text stored in each tab item from this virtual method. The MDI tabs are based on the CExtTMWI template class which implements the OnTabWndQueryItemText() virtual method and it does not return text stored in tab items. It tries to find appropriate MDI child frame windows and associated document objects. If the document is found, the tab item uses its document title. If document is not found, the MDI child frame window’s caption is used. You should implement the OnTabWndQueryItemText() virtual method for providing tab items with required custom text. Please see CExtTMWI::OnTabWndQueryItemText() virtual method’s source code for details.
|
|
Ulrich Heinicke
|
Jun 4, 2008 - 2:17 PM
|
Hi,
the first i do when i open a document is to set the title of the document. So the method OnTabWndQueryItemText() must get the title. After that i copy the source into a new class and use the tracetool from CodeProject to look into the method. I find out that the method retrieve the title from the document. There is a preculiar behaviour, when the opening document will be the first TabWnd the text will not shown, but when i create a new document at first the title form the opening document will be displayed. So if there is an tab then it display the title. If you want i can send you my TabWnd-class. Please tell me what’s going wrong. Ulrich
|
|
Technical Support
|
Jun 5, 2008 - 11:51 AM
|
If would be helpful to take a look at your tab window class.
|
|
Ulrich Heinicke
|
Jun 10, 2008 - 6:43 AM
|
Hi,
i find out that happend. There is a bug into the function OnTabWndDrawItem . If the text has only one character then the variable bDrawText will be false. See screenshot and class www.ibh-software.org/ibhtabwnd.zip: The workaround for standard and whidbey tabs is to add a space chracter to the string. Then is will be display. For OneNoteTab this will not be working. But maybe i find a solution later. Ulrich
|
|
Technical Support
|
Jun 19, 2008 - 6:08 AM
|
We have fixed the problem with not showing a single character tab caption. If you need the update now, please contact us via email.
|
|
Ulrich Heinicke
|
Jun 19, 2008 - 6:14 AM
|
Please send me the update now. Ulrich
|
|
Technical Support
|
Jun 22, 2008 - 1:23 PM
|
We have just sent it to you by email.
|
|
Technical Support
|
May 23, 2008 - 6:42 AM
|
v.2.70 or an earlier one contains an issue when a short text in tab items like "1" did not show correctly. It was fixed in later versions. This issue in your project depends on whether it’s based on MFC’s document/view architecture or not. The CExtTMWI::OnTabWndQueryItemText() method provides MDI tab control’s items with text strings displayed in its tab items. This method tries to get document objects asscociated with MDI child frames and get the titles of the found documents to display them in the tab items of the MDI tab control. If a document is not found for a particular MDI child frame, it is the window text of this frame that will be used in the tab item. The problem described in your message can potentially occur if you use the MFC’s document/view based MDI environment and some code in it invokes the SetWindowText() API for MDI child frame windows what makes tab item’s text de-synchronized with document titles in the MDI interface. We need more details.
|
|
tera t
|
May 22, 2008 - 3:18 AM
|
Hello.
(1), I want to display a non-selection tab thinly. (2), I want to take the space of this point widely. Thanks,
|
|
tera t
|
May 22, 2008 - 10:28 PM
|
Hello. I ask you for an answer. Thanks,
|
|
Technical Support
|
May 23, 2008 - 1:59 PM
|
Please implement the CExtTabWnd::OnTabWndGetParentSizingMargin() virtual method like as follows: virtual INT OnTabWndGetParentSizingMargin( DWORD dwOrientation ) const
{
ASSERT_VALID( this );
INT nRetVal = __parent_tab_class_name_here__ :: OnTabWndGetParentSizingMargin( dwOrientation );
switch( dwOrientation )
{
case __ETWS_ORIENT_TOP:
{
INT nPixelCountToIncreaseHeightOfTopDockedTabWindow = . . .
nRetVal += nPixelCountToIncreaseTopDockedTabWindow;
}
break;
case __ETWS_ORIENT_BOTTOM:
{
INT nPixelCountToIncreaseHeightOfBottomDockedTabWindow = . . .
nRetVal += nPixelCountToIncreaseHeightOfBottomDockedTabWindow;
}
break;
case __ETWS_ORIENT_LEFT:
{
INT nPixelCountToIncreaseWidthOfLeftDockedTabWindow = . . .
nRetVal += nPixelCountToIncreaseTopDockedTabWindow;
}
break;
case __ETWS_ORIENT_RIGHT:
{
INT nPixelCountToIncreaseWidthOfRightDockedTabWindow = . . .
nRetVal += nPixelCountToIncreaseTopDockedTabWindow;
}
break;
#if (defined _DEBUG)
default:
ASSERT( FALSE );
return 0;
#endif // _DEBUG
} // switch( dwOrientation )
return nRetVal;
}
|
|
Technical Support
|
May 22, 2008 - 12:22 PM
|
You should override the following virtual method of the CExtTabWnd class: virtual void OnTabWndUpdateItemMeasure(
TAB_ITEM_INFO * pTii,
CDC & dcMeasure,
CSize & sizePreCalc
); The sizePreCalc parameter contains the size of the pTii tab item measured by default . You should just make it wider and higher.
|
|
tera t
|
May 22, 2008 - 10:30 PM
|
Hello. Will such an expression be possible, too? Thanks,
|
|
Technical Support
|
May 23, 2008 - 1:46 PM
|
You can implement the CExtTabWnd::OnTabWndGetParentSizingMargin() virtual method like as follows: virtual INT OnTabWndGetParentSizingMargin( DWORD dwOrientation ) const
{
ASSERT_VALID( this );
INT nRetVal = __parent_tab_class_name_here__ :: OnTabWndGetParentSizingMargin( dwOrientation );
switch( dwOrientation )
{
case __ETWS_ORIENT_TOP:
{
INT nPixelCountToIncreaseHeightOfTopDockedTabWindow = . . .
nRetVal += nPixelCountToIncreaseTopDockedTabWindow;
}
break;
case __ETWS_ORIENT_BOTTOM:
{
INT nPixelCountToIncreaseHeightOfBottomDockedTabWindow = . . .
nRetVal += nPixelCountToIncreaseHeightOfBottomDockedTabWindow;
}
break;
case __ETWS_ORIENT_LEFT:
{
INT nPixelCountToIncreaseWidthOfLeftDockedTabWindow = . . .
nRetVal += nPixelCountToIncreaseTopDockedTabWindow;
}
break;
case __ETWS_ORIENT_RIGHT:
{
INT nPixelCountToIncreaseWidthOfRightDockedTabWindow = . . .
nRetVal += nPixelCountToIncreaseTopDockedTabWindow;
}
break;
#if (defined _DEBUG)
default:
ASSERT( FALSE );
return 0;
#endif // _DEBUG
} // switch( dwOrientation )
return nRetVal;
}
|
|
Krustys Donuts
|
May 21, 2008 - 5:09 PM
|
Dear Support, I am trying to implement tooltips for cells by using your suggestion from the May 14, 2007 - 3:39 AM thread. So far, I have the OnInitToolTip method being called in my class derived from CExtGridCellNumber. In this routine, the call to wndToolTip.AddTool() is made properly. The problem is that I never see the tooltip on the interface. Any help would be appreciated.
I have made the suggested calls:
EnableTooltips(
EnableExpanding(
SiwModifyStyleEx( __EGBS_EX_CELL_TOOLTIPS, 0, false);->m_nAdvancedTipStyle = CExtPopupMenuTipWnd::__ETS_NONE;
this true, true, true, true, true);false, false, false, false, false);
|
|
Krustys Donuts
|
May 27, 2008 - 5:20 PM
|
After inserting the suggested code into InitInstance, my program Asserts in the following routine, after called. TRACE(traceAppMsg, 0, "Error: no data exchange control with ID 0x%04X.\n", nIDC); is
HWND CDataExchange::PrepareCtrl(
{
ASSERT(nIDC != 0);
ASSERT(nIDC != -1); int nIDC)// not allowed
HWND hWndCtrl;
COleControlSite* pSite = NULL;
m_pDlgWnd->GetDlgItem(nIDC, &hWndCtrl);
{
if (hWndCtrl == NULL)// Could be a windowless OCX
pSite = m_pDlgWnd->GetOleControlSite(nIDC);
{
TRACE(traceAppMsg, 0,
ASSERT(FALSE);
AfxThrowNotSupportedException();
}
}
m_idLastControl = nIDC;
m_bEditLastControl = FALSE; if (pSite == NULL)"Error: no data exchange control with ID 0x%04X.\n", nIDC);// not an edit item by default
}
Also, upon further investigation, I can see were m_ctrlShadow.DestroyWindow is being called even though the value for m_ctrlShadow is NULL. This call takes place in the following routine:
void
{
CExtPopupMenuTipWnd::Hide()//ASSERT_VALID( this );
{
KillTimer( ID_TIMER_DELAY_SHOW );
KillTimer( ID_TIMER_DELAY_KILL );
KillTimer( ID_TIMER_LIFE_STEP );
KillTimer( ID_TIMER_ANIMATION );
SetWindowPos(
NULL, 0, 0, 0, 0,
SWP_HIDEWINDOW|SWP_NOSENDCHANGING
|SWP_NOSIZE|SWP_NOMOVE
|SWP_NOZORDER|SWP_NOOWNERZORDER
|SWP_NOACTIVATE|SWP_NOCOPYBITS
); if( GetSafeHwnd() != NULL )
// CWnd * pWnd = GetParent();
// CExtPopupMenuWnd * pPopup =
// DYNAMIC_DOWNCAST(
// CExtPopupMenuWnd,
// pWnd
// );
// for( ; pPopup != NULL; pPopup = pPopup->GetParentMenuWnd() )
// pPopup->_DelayPaint();
}
m_rcExcludeArea.SetRectEmpty();
m_shadow.Destroy();
m_ctrlShadow.DestroyWindow();
} if( m_ctrlShadow.GetSafeHwnd() != NULL )
Any suggestions?
Gil return hWndCtrl;
|
|
Technical Support
|
May 28, 2008 - 12:11 PM
|
Here is the current version of the CExtPopupMenuTipWnd::Hide() method and we believe there are no problems with it: void CExtPopupMenuTipWnd::Hide()
{
if( GetSafeHwnd() != NULL )
{
KillTimer( ID_TIMER_DELAY_SHOW );
KillTimer( ID_TIMER_DELAY_KILL );
KillTimer( ID_TIMER_LIFE_STEP );
KillTimer( ID_TIMER_ANIMATION );
SetWindowPos(
NULL, 0, 0, 0, 0,
SWP_HIDEWINDOW|SWP_NOSENDCHANGING
|SWP_NOSIZE|SWP_NOMOVE
|SWP_NOZORDER|SWP_NOOWNERZORDER
|SWP_NOACTIVATE|SWP_NOCOPYBITS
);
}
m_rcExcludeArea.SetRectEmpty();
m_shadow.Destroy();
if( m_ctrlShadow.GetSafeHwnd() != NULL )
m_ctrlShadow.DestroyWindow();
} As for the DDX related assertion failure , we believe it happens because your dialog or form view class contains some subclassed property for some control which does not exist in the dialog template resource. Please check all the lines in the DoDataExchange() virtual method of your dialog or form view class and check whether each line contains the dialog control identifier of really existing control in the corresponding dialog template resource.
|
|
Krustys Donuts
|
May 23, 2008 - 11:01 AM
|
At this point my tooltips seem to be functioning fine with one exception. When I move the cursor from one cell that produces a tooltip directly to another cell that produces a tooltip, my program Asserts. Below is the call stack and the function which causes the assertion. > mfc80d.dll!CWnd::DestroyWindow() Line 1013 + 0x1e bytes C++
ProfUIS282md.dll!CExtPopupMenuTipWnd::Hide() Line 7466 + 0x19 bytes C++
ProfUIS282md.dll!CExtPopupMenuTipWnd::Show(CWnd * pWndParent=0x0c346360, const tagRECT & rcExcludeArea={...}, bool bNoDelay=false, void * & hPassiveModeDWP=0x00000000) Line 7075 + 0x12 bytes C++
ProfUIS282md.dll!CExtPopupMenuTipWnd::Show(CWnd * pWndParent=0x0c346360, const tagRECT & rcExcludeArea={...}, bool bNoDelay=false) Line 666 + 0x22 bytes C++
ProfUIS282md.dll!CExtGridBaseWnd::OnAdvancedPopupMenuTipWndDisplay(CExtPopupMenuTipWnd & _ATTW={...}, const tagRECT & rcExcludeArea={...}) Line 11379 C++
ProfUIS282md.dll!CExtGridWnd::OnGbwTooltip(const CExtGridHitTestInfo & htInfo={...}) Line 54787 + 0x1a bytes C++
ProfUIS282md.dll!CExtGridBaseWnd::OnGbwHoverRecalc(const tagPOINT * pPtClient=0x0012fab8) Line 9359 + 0x19 bytes C++
ProfUIS282md.dll!CExtGridBaseWnd::OnMouseMove(unsigned int nFlags=0, CPoint point={...}) Line 8764 + 0x16 bytes C++
mfc80d.dll!CWnd::OnWndMsg(unsigned int message=512, unsigned int wParam=0, long lParam=6029599, long * pResult=0x0012fc04) Line 2169 C++
mfc80d.dll!CWnd::WindowProc(unsigned int message=512, unsigned int wParam=0, long lParam=6029599) Line 1741 + 0x20 bytes C++
ProfUIS282md.dll!CExtScrollWnd::WindowProc(unsigned int message=512, unsigned int wParam=0, long lParam=6029599) Line 3437 C++
ProfUIS282md.dll!CExtGridBaseWnd::WindowProc(unsigned int message=512, unsigned int wParam=0, long lParam=6029599) Line 11285 C++
mfc80d.dll!AfxCallWndProc(CWnd * pWnd=0x0c346360, HWND__ * hWnd=0x002e09a2, unsigned int nMsg=512, unsigned int wParam=0, long lParam=6029599) Line 240 + 0x1c bytes C++
BOOL CWnd::DestroyWindow()
{
CWnd* pWnd;
CHandleMap* pMap;
HWND hWndOrig;
BOOL bResult;
if ((m_hWnd == NULL) && (m_pCtrlSite == NULL))return FALSE;if (m_hWnd != NULL)
#ifdef
hWndOrig = m_hWnd; _DEBUG
#endif
}
#ifdef
bResult = ::DestroyWindow(m_hWnd); _AFX_NO_OCC_SUPPORTif (m_hWnd != NULL)
#else //_AFX_NO_OCC_SUPPORT
{
bResult = ::DestroyWindow(m_hWnd);
if ((m_hWnd != NULL) || (m_pCtrlSite != NULL))if (m_pCtrlSite == NULL)else
bResult = m_pCtrlSite->DestroyControl();
}
#endif //_AFX_NO_OCC_SUPPORT
{
if (hWndOrig != NULL)// Note that ’this’ may have been deleted at this point,
// (but only if pWnd != NULL)
{
if (pWnd != NULL)// Should have been detached by OnNcDestroy
#ifdef
ASSERT(pMap->LookupPermanent(hWndOrig) == NULL); _DEBUG
#endif
}
else
{
#ifdef
ASSERT(m_hWnd == hWndOrig); _DEBUG
#endif
// Detach after DestroyWindow called just in case
Detach();
}
}
} return bResult; bResult = FALSE; pMap = NULL; pWnd = NULL; hWndOrig = NULL; { pMap = afxMapHWND(); ENSURE(pMap != NULL); pWnd = (CWnd*)pMap->LookupPermanent(m_hWnd);
|
|
Technical Support
|
May 23, 2008 - 1:57 PM
|
This assertion looks like an incorrect MFC state switching problem. You have MFC based EXE projects and if you have MFC based regular DLL and/or ActiveX components used in EXE and some of them do not have the AFX_MANAGE_STATE( AfxGetStaticModuleState() ); code invoked everywhere it should be, the tooltips and content expand windows implemented in Prof-UIS can generate assertion failures similar to those described in your message. Although this problem should be fixed in each particular MFC regular DLL and ActiveX projects, you can also make Prof-UIS forcibly switch the MFC state to the MFC copy used by both Prof-UIS and your main EXE which can also prevent these assertion failures . You should invoke the following code in the InitInstance() virtual method of your CWinApp -derived class to make Prof-UIS switch the MFC state to the EXE-related copy of MFC: CExt_ProfUIS_ModuleState::InitExtension( AfxGetAppModuleState() );
|
|
Technical Support
|
May 22, 2008 - 12:20 PM
|
The grid cell tooltips in old Prof-UIS versions were based on the CToolTipCtrl window and CExtGridCell::OnInitToolTip() virtual method. The current version is based on a CExtPopupMenuTipWnd advanced tooltip window and CExtGridCell::OnInitAdvancedTip() virtual method. You can switch to advanced tooltips and implement the CExtGridCell::OnInitAdvancedTip() virtual method. If you like classic tooltips based on the CExtGridCell::OnInitToolTip() virtual method, you should override the CExtGridBaseWnd::OnAdvancedPopupMenuTipWndGet() virtual method in your grid class and simply return NULL .
|