Subject |
Author |
Date |
|
Debabrata Mukherjee
|
Aug 28, 2007 - 7:54 AM
|
Hi,
I’m getting the runtime error: Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.
I analyzed the code and found that my code is using a virtual function from Prof-UIS namely CExtControlBar::Create(). And the error occurs at this point. If I skip this function, it works fine but no toolbar control are visible. So, this method is necessary for creating and displaying the toolbar.
Could anyone please let me know, why I’m getting such error and what can be done to remove it?
Thanks, Debabrata
|
|
Technical Support
|
Aug 28, 2007 - 1:26 PM
|
|
|
Rado Manzela
|
Aug 28, 2007 - 5:08 AM
|
After I’ve switched to 2.80 it seems grid scroll bars are not working correctly in Win98. Try the SimpleGrids sample in Win98 and move the vertical scroll bar. After leaving scrooll bar it is drawn at top and not working correctly.
Thank you.
|
|
Technical Support
|
Aug 30, 2007 - 11:05 AM
|
We are currently testing the scroll bars on Windows 98. Please give us 1-2 days more.
|
|
Technical Support
|
Aug 31, 2007 - 9:21 AM
|
We have detected the following problem with skinned scroll bars only when running on Windows 98: when the grid’s scrollable area is small but not very small (400 x 300 pixels for example), the horizontal scroll bar thumb button is painted incorrectly, has an incorrect size and sometimes intersects with left/right buttons. We found no problems with vertical scroll bars. Please provide us with some description about any other problems with scroll bars you faced when the app is running on Windows 98.
|
|
Rado Manzela
|
Aug 31, 2007 - 10:40 AM
|
I’ve run simple grids in Win98 (running in MS virtual pc but I don’t think it does matter) because I have the same problem in my app where I’m using tree grid control. Screen resolution is 800x600, I maximize the app, then click vertical scroll bar, drag it to center and release. After I leave scroll bar area by moving pointer to client area, scroll bat jumps to top, but it is not really there, I can’t drag it again. I cannot try it again until monday so I hope I’ve described it good enough. Sample was using default office 2007 theme, I don’t remember whether I’ve tried it in another theme.
|
|
Technical Support
|
Sep 3, 2007 - 8:32 AM
|
This message is to notify you that we are working on this problem. To make the scroll bars working on Windows 98, please add the following code into CExtScrollBar constructor: if( ! g_PaintManager.m_bIsWin2000orLater )
m_bCompleteRepaint = false;
|
|
Rado Manzela
|
Sep 3, 2007 - 9:12 AM
|
scrolls are working now but scrollbars are drawn using old theme (I guess you know about it)
|
|
Technical Support
|
Sep 3, 2007 - 11:36 AM
|
This is just a temporary solution which should let you test your application on Windows 98.
|
|
Glen Cook
|
Aug 28, 2007 - 4:47 AM
|
Hi,
I installed Prof-uis on my new vista machine last night, and set it off compiling the source whilst I slept. On checking the installation today, I found a large number of error in the build.
fatal error C1083: Cannot open type library file: ’msxml.dll’: No such file or directory
On doing a little research into the matter, I’ve discovered this file is no longer supplied with a vista install.
This link discusses the issue
http://darrensargent.com/blog/?p=8
Any suggestions on the best way of fixing this issue?
Convert over to msxml6.dll or register the missing file and have the associated issues with vista and regsvr32
Cheers
Glen.
|
|
Technical Support
|
Aug 28, 2007 - 1:21 PM
|
The solution suggested in the article is: #if (_WIN32_WINNT >= 0x0600)
#import \"msxml6.dll\"
#else
#import \"msxml.dll\"
#endif This solution is not good for Prof-UIS. We support all the Windows versions starting from 95/NT4 and WIN32_WINNT in Prof-UIS projects is defined as 0x0400 . So, please put the msxml.dll file from the ZIP file attached here into the ./Prof-UIS/Bin_XXX folder which corresponds to the Visual Studio version you are using and then build Prof-UIS.
|
|
Maksim Timchenko
|
Sep 6, 2007 - 6:12 AM
|
Xmm... Its are legal to include in my commercial deployment package, Microsoft XML core library ā msxml.dll?
|
|
Technical Support
|
Sep 7, 2007 - 5:34 AM
|
You need msxml.dll only at compile time. When your application runs on Windows Vista, the newer version of MS XML COM objects will be used automatically.
|
|
tera t
|
Aug 28, 2007 - 1:21 AM
|
Hello.
Please teach it. In CDialog, there is a description of DECLARE_DYNCREATE. Even if I do not declare DECLARE_DYNCREATE, I can call it in DoModal. I do not understand a meaning to declare DECLARE_DYNCREATE.
|
|
Technical Support
|
Aug 29, 2007 - 12:31 PM
|
In addition to what Christina said, we would like to add the following. MFC allows you to easily get run-time information about any CObject -derived classes. The CRuntimeClass class describes type information about some other class. Most of MFC classes have run-time class information. You can also describe your classes. A pointer to the CRuntimeClass object allows you to create an instance of the class which it describes and easily find out whether it is derived from some other known class described by other pointer to the CRuntimeClass object. You can describe your class using the following ways:
1) Add the DECLARE_DYNAMIC /IMPLEMENT_DYNAMIC to the implementation of your class, which makes it possible to get run-time description of your classes and determineif one class is derived from another class: CYourDialogClass1 * p1 = . . .
CYourDialogClass2 * p2 = . . .
CRuntimeClass * pRtc1 = p1->GetRuntimeClass();
ASSERT( pRtc1 != NULL );
CRuntimeClass * pRtc2 = p2->GetRuntimeClass();
ASSERT( pRtc2 != NULL );
if( pRtc2->IsDerivedFrom( pRtc1 ) )
::AfxMessageBox( _T("CYourDialogClass2 derived from CYourDialogClass1") );
else if( pRtc1->IsDerivedFrom( pRtc2 ) )
::AfxMessageBox( _T("CYourDialogClass1 derived from CYourDialogClass2") );
else
::AfxMessageBox( _T("There is no inheritance between CYourDialogClass1 and CYourDialogClass1") ); You can do the same using class names and the RUNTIME_CLASS() preprocessor function: CYourDialogClass1 * p1 = . . .
CYourDialogClass2 * p2 = . . .
if( p2->IsKindOf( RUNTIME_CLASS( CYourDialogClass1 ) ) )
::AfxMessageBox( _T("CYourDialogClass2 derived from CYourDialogClass1") );
else if( p1->IsKindOf( RUNTIME_CLASS( CYourDialogClass2 ) ) )
::AfxMessageBox( _T("CYourDialogClass1 derived from CYourDialogClass2") );
else
::AfxMessageBox( _T("There is no inheritance between CYourDialogClass1 and CYourDialogClass1") ); If some function in your code has a CWnd * pWnd parameter and some part of this function expects that this CWnd * pointer must be a pointer to the CDialog * object, you can use the following assertion:
ASSERT( pWnd->IsKindOf( RUNTIME_CLASS( CButton ) ) ); Or this: ASSERT_KINDOF( CButton, pWnd ); If you need to use a CButton * pointer after that, then you can get it using the following code: CButton * pButton = STATIC_DOWNCAST( CButton, pWnd ); The line of code above should be invoked if you know that the pWnd pointer will really point to a CButton</coded> object. If you do not know this and it may point to a <code>CButton object in some cases and to other class object in some other cases, you should you use type checking assertion failures like described above. You should analyze the type of the CWnd * pWnd pointer dynamically: CButton * pButton = DYNAMIC_DOWNCAST( CButton, pWnd );
if( pButton != NULL )
{
::AfxMessageBox( _T("pWnd is button") );
return . . .
}
CComboBox * pComboBox = DYNAMIC_DOWNCAST( CComboBox, pWnd );
if( pComboBox != NULL )
{
::AfxMessageBox( _T("pWnd is combo box") );
return . . .
}
. . . 2) Add the DECLARE_DYNCREATE / IMPLEMENT_DYNCREATE into the implementation of your class. This includes all the previously described features plus allows you to create your classes dynamically by their run-time descriptions. Let us say you have saved the description of your class in some part of your code: CYourDialogClass1 * p1 = . . .
CRuntimeClass * pRtc1 = p1->GetRuntimeClass();
ASSERT( pRtc1 != NULL ); The pRtc1 is the description of your class. Then some function in your code can receive a pRtc1 pointer in a parameter and invoke the following: CObject * pObject = pRtc1->CreateObject(); The pObject pointer is really a CYourDialogClass1 pointer and you can check and use its type as described above.
3) Add the DECLARE_SERIAL / IMPLEMENT_SERIAL to the implementation of your class. This includes both features described above plus allows you to load/save objects with run-time class information from/to MFC archives. If you have a pointer to some object, then you can serialize it with its run-time type: CArchive & ar = . . .
CObject * pObject = . . .
ASSERT_VALID( pObject );
CRuntimeClass * pRTC = pObject->GetRuntimeClass();
ASSERT( pRTC != NULL );
ar.WriteClass( pRTC );
pObject->Serialize( ar ); This allows you to load an object of serializeable type from the archive dynamically. I.e. object of exactly the same type will be created from the archived data: CArchive & ar = . . .
CRuntimeClass * pRTC = ar.ReadClass();
ASSERT( pRTC != NULL );
CObject * pObject = pRTC->CreateObject();
ASSERT_VALID( pObject );
pObject->Serialize( ar );
|
|
Suhai Gyorgy
|
Aug 28, 2007 - 5:21 AM
|
This has nothing to do with ProfUIS, it’s an MFC issue. MSDN can tell you about it. Read this
|
|
Pawel Kalinowski
|
Aug 27, 2007 - 7:38 AM
|
Hi!
Is there a way to make CExtLabel handle the End/Word Ellipsis or Simple properties of CStatic controls? As far as I can tell the CExtLabel will always do multiline if its text doesn’t fit in a single line but there is enough space vertically.
I would also like to know when can we expect a release fixing the ribbon problems I reported some time ago?
Regards
|
|
Technical Support
|
Aug 28, 2007 - 1:15 PM
|
Thank you for reporting the problem. To fix it, please update the CExtLabel::DoPaint() method using the code below and recompile the library. void CExtLabel::DoPaint(
CDC * pDC,
CRect & rcClient
)
{
ASSERT_VALID( this );
ASSERT_VALID( pDC );
CExtMemoryDC dc(
pDC,
&rcClient
);
CRgn rgnClient;
if( rgnClient.CreateRectRgnIndirect( &rcClient ) )
dc.SelectClipRgn( &rgnClient );
OnEraseBackground( dc, rcClient );
DWORD dwWndStyle = GetStyle();
DWORD dwWndType = (dwWndStyle&SS_TYPEMASK);
if( dwWndType == SS_ICON )
{
HICON hIcon = GetIcon();
if( hIcon != NULL )
{
CExtCmdIcon _icon;
_icon.AssignFromHICON( hIcon, true );
CSize szIcon = _icon.GetSize();
bool bCenterImage = ( (dwWndStyle&SS_CENTERIMAGE) != 0 );
int nOffsetX = bCenterImage ? (rcClient.Width() - szIcon.cx) / 2 : 0;
int nOffsetY = bCenterImage ? (rcClient.Height() - szIcon.cy) / 2 : 0;
_icon.Paint(
PmBridge_GetPM(),
dc.GetSafeHdc(),
rcClient.left + nOffsetX,
rcClient.top + nOffsetY,
-1,
-1
);
}
}
else
{
CExtSafeString strText;
int nTextLen = GetWindowTextLength();
if( nTextLen > 0 )
{
GetWindowText( strText.GetBuffer( nTextLen + 2 ), nTextLen + 1 );
strText.ReleaseBuffer();
}
if( strText.GetLength() > 0 )
{
DWORD dwDrawTextFlags = 0;
switch( dwWndType )
{
case SS_RIGHT:
dwDrawTextFlags = DT_RIGHT;
break;
case SS_CENTER:
dwDrawTextFlags = DT_CENTER;
break;
case SS_LEFTNOWORDWRAP:
dwDrawTextFlags = DT_LEFT;
break;
default:
// all the other types assumed as left
dwDrawTextFlags = DT_LEFT;
break;
} // switch( dwWndType )
// do tabs expanding
if( strText.Find( _T(’\t’) ) != -1 )
dwDrawTextFlags |= DT_EXPANDTABS;
bool bSingleLine =
( strText.Find( _T("\r\n") ) >= 0 ) ? false : true;
if( ( dwWndStyle&SS_CENTERIMAGE ) != 0 )
{
bSingleLine = true;
dwDrawTextFlags |= DT_VCENTER;
}
if( ( ! bSingleLine )
&& dwWndType != SS_LEFTNOWORDWRAP
)
{
dwDrawTextFlags |= DT_WORDBREAK;
}
else
{
dwDrawTextFlags |= DT_SINGLELINE;
if( (dwWndStyle&SS_ENDELLIPSIS) != 0 )
dwDrawTextFlags |= DT_END_ELLIPSIS;
if( (dwWndStyle&SS_PATHELLIPSIS) != 0 )
dwDrawTextFlags |= DT_PATH_ELLIPSIS;
}
bool bEnabled = IsWindowEnabled() ? true : false;
OnDrawLabelText(
dc,
rcClient,
strText,
dwDrawTextFlags,
bEnabled
);
} // if( strText.GetLength() > 0 )
}
PmBridge_GetPM()->OnPaintSessionComplete( this );
if( rgnClient.GetSafeHandle() != NULL )
dc.SelectClipRgn( &rgnClient );
}
|
|
Rado Manzela
|
Aug 27, 2007 - 6:13 AM
|
It seems that window maximize in office 2007 themes is not working correctly when you place the windows taskbar to left or top of the screen. Maximized window has lefto or top offset depending on where the taskbar is placed.
There is also bug in FullScreenSatate sample: 1. maximize the window 2. turn on full screen 3. turn off full screen 4. restore the window. It’s not restored at original position, but upper left corner is moved off the screen
|
|
Rado Manzela
|
Aug 28, 2007 - 4:35 AM
|
|
|
Technical Support
|
Aug 27, 2007 - 11:24 AM
|
Thank you for reporting this bug. It is fixed. Please download the update. It includes the latest version of the ../Prof-UIS/Include/ExtNcFrame.h and ../Prof-UIS/Src/ExtNcFrame.cpp files from Prof-UIS source code and an updated version of the MainFrm.cpp file from the FullScreenState sample.
|
|
Khachatur Petrosyan
|
Aug 25, 2007 - 3:31 AM
|
Hello,
When I run the standard the Ribbon Sample ’RibbonBar-ym.exe’ for your web site I got a strange bug on Vista. On the program title two sections are not painted correctly, please see the screen-shot:
http://www.pka.name/bug.jpg
The same bug appears on my own program’s title complied with Prof-UIS 2.8.
I have Vista-Business Edition with all latest updates installed on it.
Please help.
Thanks, Khachatur
|
|
Khachatur Petrosyan
|
Sep 13, 2007 - 2:58 AM
|
Hello,
Do you have any update for this? My current technical support subscription is expiring on September 17.
Any chance to receive the updated version till then?
Thank you, Khachatur
|
|
Technical Support
|
Sep 13, 2007 - 10:53 AM
|
Most probably the new version will be available at the end of September. We are working on this issue right now and it will be a new version of the non-client area implementation. We would recommend you renew the subscription.
|
|
Khachatur Petrosyan
|
Aug 28, 2007 - 4:38 AM
|
Yes, please send me the source code as soon as it will be ready.
Thank you, Khachatur
|
|
Khachatur Petrosyan
|
Aug 27, 2007 - 9:52 AM
|
Hello again,
Do you have any time estimation whet it will be done?
Thank you, Khachatur
|
|
Technical Support
|
Aug 27, 2007 - 12:31 PM
|
We plan to fix it in the next release that is scheduled for September. We can provide you with the updated source code as soon as it is fixed.
|
|
Technical Support
|
Aug 26, 2007 - 9:21 AM
|
We confirm that this bug may occur on some machines. We are currently refactoring some parts of code relating to integration with DWM glass areas on Windows Vista. So this bug will be fixed soon.
|
|
Neville Franks
|
Aug 24, 2007 - 2:44 AM
|
I have a split toolbar button with a menu attached to the drop-down arrow. I want to activate & display this menu from my code. All I’ve found so far is CExtBarButton::OnClick() which I assume I can call if I work out what the button rect is. Or is there some better way?
Alternatively is there a way to get the toolbar button menu to activate when the user presses some key?
Thanks, Neville
|
|
Neville Franks
|
Aug 24, 2007 - 6:28 AM
|
|
|
Suhai Gyorgy
|
Aug 24, 2007 - 6:13 AM
|
It seems like all you need to call is m_wndToolBar.TrackButtonMenu(uIndexOfYourButton); I’ve tried it in ProfUIS_Controls sample, in PageToolBars class. In the handler of one of the central checkboxes, I put the line m_wndToolBarColor.TrackButtonMenu(0); and it worked fine. There are 3 more parameters of this method, but I’m not sure what they mean, it seems their default values are good enough.
|
|
Pierre MEDART
|
Aug 23, 2007 - 4:09 AM
|
Is-it possible to have a PaintManager that draws the tabs as the CExtPaintManagerOffice2007_Blue but offers the theme support such as CExtPaintManagerOffice2003 ?
What should be done ?
|
|
Pierre MEDART
|
Aug 24, 2007 - 9:47 AM
|
My question is more, I want one global paint manager, so deriving it from one of the existing PaintManager.
What do I need to do so that it:
1) supports the Theme (Bleu, Olive, ...)
2) draws the tab controls and menus in the same manner as CExtPaintManagerOffice2007
To sum-up... Theme support but with cool and nice UI
|
|
Suhai Gyorgy
|
Aug 23, 2007 - 7:55 AM
|
Support’s answer in this thread gives you the solution. Just substitute CExtGridWnd in the thread with CExtTabWnd or CExtTabPageContainerWnd or whichever ProfUIS control you are using.
|
|
Pierre MEDART
|
Aug 24, 2007 - 10:30 AM
|
My question is more, I want one global paint manager, so deriving it from one of the existing PaintManager.
What do I need to do so that it:
1) supports the Theme (Bleu, Olive, ...)
2) draws the tab controls and menus in the same manner as CExtPaintManagerOffice2007
Is there any overidable such as the virtual int GetThemeDockingType() const to get the docking of Visual Studio 2005 in any other paintmanager.
To sum-up... Theme support but with cool and nice UI
|
|
Technical Support
|
Aug 26, 2007 - 9:35 AM
|
The TabbedBars sample demonstrates how to use any re-docking algorithm for resizable control bars with any paint manager.
The following code will make resizable control bars using algorithm which corresponds to the currently installed global paint manager:
CExtControlBar::g_eResizablePanelDockingType =
CExtControlBar::__RESIZABLE_DOCKING_TYPE_BY_THEME; The following code will make resizable control bars using algorithm of Visual Studio .NET: CExtControlBar::g_eResizablePanelDockingType =
CExtControlBar::__RESIZABLE_DOCKING_TYPE_STUDIO_2003; The following code will make resizable control bars using algorithm of Visual Studio 2005: CExtControlBar::g_eResizablePanelDockingType =
CExtControlBar::__RESIZABLE_DOCKING_TYPE_STUDIO_2005;
|
|
Pierre MEDART
|
Aug 27, 2007 - 2:02 AM
|
OK I know that. That’s why I was mentionning this example.
What I am asking is : is-there a way to have the nice CExtPaintManagerOffice2007 with the support of the theme?
Cause when I’m changing the Theme from default (bleu) to Olive I’m getting a weird result :
- toolbar is green - menu is blue - toolbars have a title bar that is green, the tab control is blue
This is ugly!
|
|
Suhai Gyorgy
|
Aug 27, 2007 - 6:30 AM
|
<<< quote from Support >>> The Office 2007 themes are colorized versions of the Office 2003 theme plus a set of bitmap-based painting algorithms for such UI items as push/check/radio buttons, combo boxes and non client window areas. <<< end quote >>>
If you are using any Office 2007 theme without modification, changing XP color scheme should not cause anything to turn green/olive. So I guess the paint manager you are using is somehow modified: it is colorizing everything ( that can be colorized ) as Office 2003 theme, but of course the bitmaps are unchanged.
Your requirement would mean: you need to have many sets of bitmaps (meaning all default bitmaps would need to be copied and modifed) and you need to be able to switch between these sets of bitmaps dynamically. I don’t think this would be a solution: many resources are needed and the number of bitmap-sets is static.
|
|
Pierre MEDART
|
Aug 29, 2007 - 4:07 AM
|
Can we have a chat out of the forum ?
I can’t describe here what we are doing. But I defenitely want to fix my issues.
|
|
Technical Support
|
Aug 30, 2007 - 11:20 AM
|
Please send us an e-mail to the support mail box at this web site with your contact information: phone, ICQ, Skype, MSN, AIM, Yahoo, or any other contact information you would like we to use so we can chat with you.
|
|
Pierre MEDART
|
Aug 31, 2007 - 1:36 AM
|
email sent yesterday : subject is "isssue with the paint manager of style Office2007 on win XP"
my details are at the bottom.
|
|
Suhai Gyorgy
|
Aug 29, 2007 - 6:02 AM
|
I’m not part of the Prof-UIS Support Team and I’m not very familiar with the new, skinned Office 2007 themes. You can try describing your problem privately to Support through their e-mail address: support@prof-uis.com
|
|
Francesco Toscano
|
Aug 22, 2007 - 12:26 PM
|
I do not know if it is possible, but I would like to make dockable a CExtToolControlBar in a CWnd (it is a grid that I use as view). I can see the toolbar, but it stay on top of the view and it is anlarged on all the width of the view and can’nt be moved. can it be displayed as a Toolbar in a Mainframe window? It can be dockable ?
I doing this on OnCreate of the view:
if((! m_wndToolBar.Create( NULL, this, IDR_PLANNER_TOOLBAR, WS_CHILD|WS_VISIBLE |CBRS_ALIGN_TOP|CBRS_TOOLTIPS |CBRS_FLYBY|CBRS_SIZE_DYNAMIC ) ) ||(!m_wndToolBar.LoadToolBar(IDR_PLANNER_TOOLBAR)) ) { TRACE0("Failed to create true-color toolbar\n"); return false; // fail to create } m_wndToolBar.SetBarStyle( m_wndToolBar.GetBarStyle() | CBRS_GRIPPER );
Thanks Francesco
|
|
Technical Support
|
Aug 22, 2007 - 1:27 PM
|
In the ProfStudio sample, you can find CExtToolControlBar windows created as children of CWnd windows inside control bars . But such toolbars are only statically docked to the left, right, top or bottom side of its parent window. If this is what you need, then you should simply create a toolbar and use CWnd::RepositionBars(0,0xFFFF,0); in these two places in toolbar’s parent window: in the WM_CREATE or WM_INITDIALOG handler method and in the WM_SIZE handler method. If you need a toolbar which can be redocked via drag-and drop, then your toolbar should be created in the frame window. The frame windows can be created either as popup windows and as child windows.
|
|
Henri Hein
|
Aug 22, 2007 - 12:00 PM
|
Reposted from General forum
I create a bottom row of cell headers with:
OuterRowCountBottomSet(1, false);
I set the text with:
CExtGridCellHeader * pCellBottom =
STATIC_DOWNCAST(
CExtGridCellHeader,
GridCellGetOuterAtBottom(
0L,
0L,
RUNTIME_CLASS(CExtGridCellHeader), false)
);
if (pCellBottom)
pCellBottom->TextSet("gugu-guchu");
This works, but my problem is, this also sets the top header. How can I decouple the two so that I can have separate text in the top and bottom headers?
|
|
Henri Hein
|
Aug 23, 2007 - 12:47 PM
|
Yes, that works. Thank you.
|
|
Henri Hein
|
Aug 22, 2007 - 1:26 PM
|
As I mentioned in the title, it’s with CExtReportGridWnd.
I am using the ReportGrid_600 sample app.
|
|
Technical Support
|
Aug 23, 2007 - 12:12 PM
|
Here is the beginning of the modified version of the CChildView::InitReportGridContent() method in the ReportGrid sample where we added the two lines marked with comments: void CChildView::InitReportGridContent()
{
ASSERT_VALID( this );
CRect rcOutput( 275, 100, 400, 200 );
CSplashWnd _splash( this, IDB_BITMAP_SPLASH, &rcOutput );
ReportGroupAreaShow();
ReportAutoPreviewModeSet( true, false );
m_nBoldFontIndex = GridFontInsert( g_PaintManager->m_FontBold, -1, true );
INT nIconIndex = -1;
CExtCmdIcon _icon;
bool bInitiallyActive = true;
bool bInitiallyInactive = false;
INT nInitialColumnExtentSmall = 40;
INT nInitialColumnExtentNormal = 100;
INT nInitialColumnExtentBig = 250;
INT nInitialColumnExtentCheck = 22;
INT nInitialColumnExtentColor = 60;
INT nInitialColumnExtentNumber = 60;
INT nInitialColumnExtentCurrency = 60;
INT nInitialColumnExtentDateTime = 80;
CExtReportGridColumn * pRGC = NULL;
CTypedPtrList < CPtrList, CExtReportGridColumn * > _listColumns;
OuterRowCountBottomSet( 1L, false ); // !!!!!!! THIS LINE WAS ADDED !!!!!!!
_splash.SetStatusText( _T("Registering columns ...") );
// ProductName_ProductInformation
pRGC =
ReportColumnRegister(
_T("Name"),
_T("Main Information"),
bInitiallyActive,
false
);
ASSERT_VALID( pRGC );
pRGC->ExtentSet( nInitialColumnExtentNormal );
_listColumns.AddTail( pRGC );
ReportGridCellGetOuterAtBottom( pRGC, 0L, RUNTIME_CLASS(CExtGridCellString) )->TextSet( _T("123") ); // !!!!!!! THIS LINE WAS ADDED !!!!!!!
// ProductModelName_AdditionalInformation
. . . If you run this sample application with modifications above, then you will see outer header row at the bottom and the "Name" column from the "Main Information" field group will display a string cell with the "123" text in outer header row at the bottom when it is active.
|
|
Technical Support
|
Aug 22, 2007 - 1:23 PM
|
Please let us know which grid you are using: CExtReportGridWnd , CExtTreeGridWnd or CExtGridWnd ? Is it possible to reproduce this problem using our sample applications?
|
|
Debabrata Mukherjee
|
Aug 22, 2007 - 9:35 AM
|
I have a CView which gets automatically updated with new windows if we add new sinks. But now I want to insert them as pages to a PageContainer, The name of my view is m_pPresView.
I do it like this. The m_pChildView is the tabpagecontainer.
m_pChildView ->PageInsert (m_pPresView->GetSafeHwnd(),strStepName);
What s happening here is my m_pPresView is getting added to the last added tab. What I want instead is to add tabs in the m_pChildView as separate instances of m_pPresView, instead of new tab pages overwriting the contants of my tabbed view.
Please suggest.
|
|
Debabrata Mukherjee
|
Aug 22, 2007 - 9:37 AM
|
sorry for three similar postings.
|
|
Technical Support
|
Aug 22, 2007 - 12:33 PM
|
We guess you should remove the previously added page(s) by invoking of the CExtTabPageContainerWnd::PageRemove() method and then insert new pages at the same location (page index).
|
|
Darren Oliver
|
Aug 22, 2007 - 7:27 AM
|
Are there any automated test tools that are recommended for Prof-UIS code? WinRunner works out-of-the-box but Rational robot needs a plug-in. Are there any freeware tools that are being used?
|
|
Technical Support
|
Aug 22, 2007 - 12:29 PM
|
You can use any of the known tools. All the known automated test tools can work with standard built-in window menu lines and toolbar common controls. But popup menus, menu bars and toolbars in Prof-UIS are custom controls written from scratch and testing tools will not recognize them. So, you should use mouse click or keyboard input emulation provided by a testing tool instead of any APIs related to menus and toolbars.
|
|
Christoffer B
|
Aug 22, 2007 - 7:10 AM
|
Hi,
If I use the tab key, I dont jump to the next cell, but to the next control in the dialog. Is it possible to jump to the next cell in the same grid using the tab key?
|
|
Technical Support
|
Aug 22, 2007 - 12:25 PM
|
The Tab key is not used in the Prof-UIS grids. So, you should override the CExtGridWnd::OnGbwAnalyzeCellKeyEvent() virtual method so you can detect the VK_TAB key pressing event and adjust the focused cell position using the CExtGridWnd::FocusSet() and CExtGridWnd::FocusGet() methods.
|
|
Christoffer B
|
Aug 23, 2007 - 1:24 AM
|
The OnGbwAnalyzeCellKeyEvent() method does not catch the Tab key when the editor of a cell is activated. The tab key is only caught when the Grid has the focus. Can I avoid overriding all the different types of Cells I have in order to make the tab key work?
|
|
Technical Support
|
Aug 23, 2007 - 12:07 PM
|
The CExtGridWnd class allows you to monitor the window procedure of the inplace activated cell editor control. You should override the CExtGridWnd::OnGridCellInplaceControlWindowProc() virtual method. This will allow you to intercept the WM_KEYDOWN message of the inplace editor window with the WPARAM parameter set to VK_TAB .
|
|
David Skok
|
Aug 22, 2007 - 6:42 AM
|
Is it possible to turn the slider icon off? I want to display the slider only in the focused cell. Cells that are not focused would only display a text value.
Right now I am implementing this by populating the grid with CExtGridCellString cells then switching the cell type of the focused cell in OnGbwFocusChanged in the grid. This works however I can no longer select multiple cells as is required in my app. Switching the cell type causes problems when any type of multiple select is attempted.
|
|
Suhai Gyorgy
|
Aug 22, 2007 - 7:11 AM
|
There’s a cell class CExtGridCellSlider . It seems to me it implements just what you need. Check out how it is used in ProfUIS_Controls sample.
|
|
David Skok
|
Aug 22, 2007 - 8:49 AM
|
Thank you for the suggestion however CExtGridCellInplaceSlider cell type also allows direct entry by the user which my app requires. The CExtGridCellSlider type does not.
|
|
Technical Support
|
Aug 22, 2007 - 12:32 PM
|
You should use a CExtGridCellInplaceSlider -derived class which would paint slider like appearance in one case and text like appearance in other cases by implementing the following virtual method: virtual void OnPaintRestArea(
const RECT & rcCellRest,
const CExtGridWnd & wndGrid,
CDC & dc,
LONG nVisibleColNo,
LONG nVisibleRowNo,
LONG nColNo,
LONG nRowNo,
INT nColType,
INT nRowType,
const RECT & rcCellExtra,
const RECT & rcCell,
const RECT & rcVisibleRange,
DWORD dwAreaFlags,
DWORD dwHelperPaintFlags
) const; Your method should invoke the CExtGridCellInplaceSlider::OnPaintRestArea() parent class method for painting the slider. It should invoke the CExtGridCellVariant::OnPaintRestArea() parent class method for painting text. The dwHelperPaintFlags parameter contains a set of __EGCPF_*** flags which provide you with all information about the selected/focused cell state.
|
|
Hans Bergmeister
|
Aug 21, 2007 - 12:30 PM
|
Hello,
I just detected something, that seems to be a bug. It can be easily reproduced with your IconEditor sample. Copy the following code to the beginning of CMainDlg::OnInitDialog(), please:
BOOL CMainDlg::OnInitDialog() { CRect rcCli; GetClientRect(rcCli);
CRect rcCalc = rcCli; CalcWindowRect(rcCalc);
CRect rcWin; GetWindowRect(rcWin);
ASSERT(rcWin.Size() == rcCalc.Size());
It is my understanding, that CalcWindowRect() returns the same dimensions as GetWindowRect(), if the client rectangle is passed to CalcWindowRect(). And as expected the above code works fine with all non Office 2007 themes. With an Office2007 theme, however, an assertion occurs, because CalcWindowRect() seems to return wrong dimensions. Is there something wrong in your NC calc handlers?
Best regards.
|
|
Technical Support
|
Aug 22, 2007 - 11:30 AM
|
The CExtNCW template class completely recomputes and repaints the window non-client area. In the case of Office 2007 and ProfSkin themes, the non-client area metrics are not equal to the current Windows window metrics. The CExtPaintManager::NcFrame_IsSupported() method returns a flag which indicates if the current paint manager supports window non-client area skinning. The following two methods of the CExtPaintManager class compute the size of the caption and border for the specified window: virtual INT NcFrame_GetCaptionHeight(
bool bActive,
const CWnd * pWnd,
LPARAM lParam = 0L
) const;
virtual void NcFrame_GetMetrics(
RECT & rcNcBorders,// returns border sizes
RECT & rcThemePadding,
const CWnd * pWnd,
LPARAM lParam = 0L
) const; We could implement the CalcWindowRect() method in the CExtNCW template class using the paint manager’s APIs specified above.
|
|
Hans Bergmeister
|
Aug 23, 2007 - 1:25 AM
|
Hello,
yes, an additional CalcWindowRect() method in the CExtNCW template would help to avoid errors.
|
|
Technical Support
|
Aug 25, 2007 - 11:41 AM
|
Please download the updated ExtNcFrame.h and ExtNcFrame.cpp files
UpdatedCExtNCW.zip
You should replace the files with the same names in ../Prof-UIS/Include and ../Prof-UIS/Src folders. This updated version of the CExtNCW class now supports the CalcWindowRect() method.
|
|
Debabrata Mukherjee
|
Aug 21, 2007 - 9:45 AM
|
Can you plz suggest us how hav u managed to group-tab dynamic controlbars as shown in the "Dynamic Control Bars" sample in ur website. I have ur samples project. "MDI_Dynamic Bars" but I can see only the tab grouping of pages on the SDI/MDI docs. But the snap in ur website shows us that u have managed to tab grp them even in the area covwered by the "Persistent Bar" also(Left side bottom of the snap). How is it possible.I want to tabgrp more than one control bar in that way.
Please provide us with some sample also if possible.
|
|
Debabrata Mukherjee
|
Aug 24, 2007 - 8:28 AM
|
I have sent you a mail with the details again . Hope it helps.
|
|
Debabrata Mukherjee
|
Aug 23, 2007 - 9:54 AM
|
The issue now is my ControlBars are not part of the mainframe but are invoked frm another OCX. So using methods like DockControlBarIntoTabbedContainer cause exception. The present arch. of my application is:
A Main CtrlBar is created in the MainFrame Oncreate() method. Then a CView is made over it. On this CView we have a COleCtrl class. And on this OleControl class there are three CWnd classes. I want to make these CWnd classes to tabgrouped CExtControlBars. So first when I create the ControlBars, they seem fine.Next When I try to make them Tabgroup by calling the methods - DockControlBarIntoTabbedContainer just after the creation, the application is failing as obviously I dont have the pointers pApp for m_dataFrameWP. How Do I resolve this.
Hope yu got the issue.
|
|
Technical Support
|
Aug 23, 2007 - 12:35 PM
|
You can create an OCX control in a resizable control bar and you should not have any problems with this. You can find control bars with a web browser control in the ProfStudio sample. What OCX controls exactly you are using? If they are your controls and they based on MFC, ensure your controls do MFC state switching correctly. We may need to debug your application failures to clarify what is wrong.
|
|
Suhai Gyorgy
|
Aug 22, 2007 - 1:54 AM
|
Regular CExtControlBars can also be tab docked with each other, you don’t need Dynamic control bars for that. To tab group one control bar into another, you can use the CExtControlbar::DockControlBarIntoTabbedContainer method. TabbedBars sample shows how to use it, you can find the DockControlBarIntoTabbedContainer calls in CMainFrame::OnCreate method, near CExtControlBar::ProfileBarStateLoad .
Users can also tab dock control bars. Grab any control bar by its caption and pull it over another control bar. When the mouse pointer is over the caption area, the gray "rectangle" - which would show the final position of the control bar being moved - will get a tab. That’s when you have to release the mouse button and the 2 control bars will be tab docked. A third control bar can be tab docked if it is pulled over the tab area of the previous group.
Visual Studio 2005 theme has different appearance while docking the control bars. Any theme can use this docking behavior, if you like it. (Personally, I prefer this one) Read this FAQ: How to switch between the Visual Studio .NET and Visual Studio 2005 docking behavior of control bars?
|
|
Massimo Germi
|
Aug 21, 2007 - 3:09 AM
|
Hi, to all is there a way to create a CExtComboBox (not as a cell in grid ctrl) that display a Tree items structures?
Tx a lot
|
|
Technical Support
|
Aug 21, 2007 - 7:05 AM
|
|
|
Ramesh Sojitra
|
Aug 20, 2007 - 11:38 PM
|
Hello sir,
We are using Prof-UIS Version 2.6 .Now we want to change or upgrade to newer version 2.8 .We already downloaded newer version of Prof-UIS. We want to know how we upgrade our Project in new version.We are asking this because of our last experience of upgrading in newer version and there was lots of problem. Thanking you.
|
|
Technical Support
|
Aug 21, 2007 - 6:53 AM
|
You should uninstall v.2.60, then install 2.80, compile the library (i.e., the configurations you need, like MBCS Debug and MBCS Release) and rebuild your project(s). There should not be any problems. Please also read the list of changes in the Version History section.
|
|
Chris Anderson
|
Aug 20, 2007 - 8:15 PM
|
hi there,
We have a legacy app which allows the user to set the text and select a bitmap for a menu item at run time. I tried several "short cuts" but not very lucky so far.
What I did is : 1. use the legacy code to create a menu, and attach it in CExtMenuControlBar later.
// create the menu AppendMenu(hMenu, MF_String, uMenuID, lpText); SetMenuItemBitmaps(pMainMenu->m_hMenu, g_uMenuID, MF_BYCOMMAND, hBmp, hBmp);
// later attach the menu m_wndMenuBar.m_menuFrame.Attach( hMenu );
2. similiar to #1, but update the menu after the attach CMenu* pSubMenu = pMenu->GetSubMenu(nIndex); UINT nMenuID = pSubMenu->GetMenuItemID(nIndex);
pSubMenu->SetMenuItemBitmaps(...)
Both works with the text very well, but the image never show up. From another thread, looks like it should be done in CMainFrame::OnExtMenuPrepare(), but this is something I tried to avoid considering the amount of work. could you pls confirm?
Thanks in advance
|
|
Chris Anderson
|
Aug 21, 2007 - 11:33 AM
|
Thanks, this works really well without too many changes
|
|
Technical Support
|
Aug 21, 2007 - 6:56 AM
|
Bitmaps are supported by Windows menu items starting from Windows 2000. Prof-UIS supports Windows versions starting from 95 and NT 4.0. We are using older menu APIs to provide wider compatibility. Of course, we could add a menu bitmap exporting feature for you, but the task of assigning a menu icon can also be easily solved using the command manager which contains command descriptions including icons. The CExtCmdManager::CmdSetIcon() method (g_CmdManager->CmdSetIcon(...) code) assigns an icon to the specified command identifier and this icon will automatically be used for this command both in toolbars and menus. You should only preliminary register all the menu commands in the command manager. This can be done with the CExtCmdManager::UpdateFromMenu() method.
|