Forum
Please
Log In
to post a new message or reply to an existing one. If you are not registered, please
register.
NOTE: Some forums may be read-only if you are not currently subscribed to
our technical support services.
Subject |
Author |
Date |
|
tera tera
|
Sep 24, 2009 - 12:01 AM
|
Hello. In the setting window of the quick access bar, I want to display a name.
But the name does not want to display it by the ribbon menu.
Please teach a way. 
|
|
Technical Support
|
Sep 26, 2009 - 12:37 PM
|
Here is how the "Paste" command is initialized in the CMainFrame::_InitRibbonNode_Home_Clipboard() method in the RibbonBar sample application:
CExtRibbonNode * pNodePaste =
new CExtRibbonNode( ID_EDIT_PASTE, 0, NULL, 0, _T("Paste") );
The _T("Paste") text is specified as a constructor parameter. That is why you see this text in the ribbon quick access toolbar customization dialog. But not all the commands are initialized with the text. That is why you see some commands without text in the commands list
|
|
tera tera
|
Oct 7, 2009 - 1:44 AM
|
A name came to be displayed definitely by quick tool bar.
Thanks,
However, it is displayed as follows if a view area is big this time.

When a view area is big, I do not want to display a name.

|
|
Technical Support
|
Oct 7, 2009 - 9:54 AM
|
You should specify different layout rules to the ribbon buttons displayed on your screen shot. Your buttons should never have the normal informativeness level. They should use only small and big levels or, even only small level.
|
|
Technical Support
|
Sep 25, 2009 - 6:41 AM
|
You should specify the names of these commands during ribbon bar initialization. The constructor of each command tree node allows you to specify the command text.
|
|
tera tera
|
Sep 25, 2009 - 7:42 PM
|
Hello. How should I program it?
I do not understand it.
Please offer a sample program.
|
|
Offer Har
|
Sep 23, 2009 - 3:56 PM
|
Dear Support, I have created a grid class derived from CExtNSB<CExtPPVW<CExtGridWnd>> . The main frame create the grid as follows (m_wndView is an instance of my grid class):
if( ! m_wndView.Create(
this,
CRect( 0, 0, 0, 0 ),
AFX_IDW_PANE_FIRST
)
)
{
TRACE0("Failed to create view window\n");
return -1;
} The application roots are in the report view sample. All works well, but some evens do not reach the grid class, such as mouse events. If I use the same grid class inside a dialog, the events are reached. Please help me finding what can cause this problem... Thanks, Ron.
|
|
Offer Har
|
Sep 24, 2009 - 12:15 AM
|
Problem solved... my BEGIN_MESSAGE_MAP was directly to the wring class.
|
|
Rolf Boerkoel
|
Sep 21, 2009 - 7:53 AM
|
Dear support, I have a CExtLabel to which I assign a bitmap. This bitmap is larger than the available client area of the CExtLabel, therefore I like it to be drawn smaller while retaining its original aspect ratio. How can I get this to work with the CExtLabel control? It looks like the bitmap is always drawn in a "stretch to fit" manner in this particular case, no matter what image mode or style is applied. The same holds for the CExtGridCellPicture. Thanks, Marco
|
|
Rolf Boerkoel
|
Sep 27, 2009 - 8:11 AM
|
I think you missed the point, I’ll try and explain it in other words. The first remark is about the following piece of code. I think it is incorrect and can even be left out: if( eImageMode == eTouchInside )
{
if( sizeNew.cx > sizeTouchSrc.cx )
rcTouchDst.OffsetRect( ( sizeNew.cx - sizeTouchSrc.cx ) / 2, 0 );
if( sizeNew.cy > sizeTouchSrc.cy )
rcTouchDst.OffsetRect( 0, ( sizeNew.cy - sizeTouchSrc.cy ) / 2 );
}
else
{
rcTouchDst.OffsetRect( - ( sizeNew.cx - sizeTouchSrc.cx ) / 2, 0 );
rcTouchDst.OffsetRect( 0, - ( sizeNew.cy - sizeTouchSrc.cy ) / 2 );
}
If "eImageMode == eTouchInside" evaluates to TRUE, the code within the block will never do anything because sizeNew.cx and sizeNew.cy can and will never become bigger than sizeTouchSrc.cx and sizeTouchSrc.cy (the new image size is already adapted to the client area)! So this part does nothing at all. As a result the whole image will be drawn within the client area positioned at the top-left corner. See the green asterisks in the attached image. When "eImageMode <> eTouchInside" the effect of the "rcTouchDst.OffsetRect" will be that the center part of an image is filling the complete client area leaving out the left/right (or top/bottom) parts of the image when necessary, see the red asterisks. This may be the behaviour you intended, but it is inconsistent with the eTouchInside mode which doesn’t do any centering. I would rather leave this part out. So this whole if( eImageMode == eTouchInside ) { .... } else { .... } can better be omitted.
My second remark is about a solution to the positioning of the image within the client area. The native SS_LEFT, SS_CENTER and SS_RIGHT styles could be used to specify the horizontal position of the image within the client area. The SS_CENTERIMAGE can be used to specify positioning at the top (SS_CENTERIMAGE excluded) or middle (SS_CENTERIMAGE included). See attached image.
Regards,
Marco

|
|
Rolf Boerkoel
|
Sep 24, 2009 - 3:42 AM
|
Thanks very much! However I think the following conditional test was intended? //if( eImageMode == eTouchInside ) {
if( eImageMode == eTouchOutside )
// Some OffsetRect calculations
} else {
// Some other OffsetRect calculations
}
It also would be a great feature if the image can be aligned based on the SS_ static styles, especially left/top and hcenter/vcenter positioning. But for now I can get by with the current solution.
|
|
Technical Support
|
Sep 25, 2009 - 6:40 AM
|
We used conditions like if( eImageMode == eTouchInside || eImageMode == eTouchOutside ) because both algorithms are exactly the same. They just use different scaling coefficients. The static styles are not needed because there is a much better approach is available even with old versions of label control and picture grid cell. The new versions stretch the image on-the-fly and each time when it should be painted. The stretching quality is enough good but it’s enough far from the real best stretching quality. We recommend you not to use the new feature. It’s much better to stretch the image before assigning it to label control or picture grid cell. The CExtBitmap class supports linear image scaling algorithms which provide much better stretching quality than GDI. Here is how you can scale an image:
CExtBitmap _bmp;
_bmp.Load . . . ( . . . );
CSize sizeDst = . . . ; // compute it from real label control size for instance
CExtBitmap::Filter _f( CExtBitmap::Filter::lanczos );
_bmp.Scale( sizeDst.cx, sizeDst.cy, _f );
The high quality stretching performed in the code snippet above is enough fast to do during label control or picture grid cell initialization.
|
|
Technical Support
|
Sep 23, 2009 - 10:06 AM
|
Thank you for the interesting question. First of all, we improved the image mode enumeration with adding two new constants for proportional image stretching:
enum e_ImageMode_t
{
eAlign = 0, // The image is aligned according to the text aligning styles (the __EGCS_TA_HORZ_xxx and __EGCS_TA_VERT_xxx styles)
eTile = 1, // The image is repeated until the entire available area is filled.
eStretch = 2, // The image is stretched to fit all the available area.
eTouchInside = 3, // Stretch the image proportionally and touch inside.
eTouchOutside = 4, // Stretch the image proportionally and touch outside.
};
Second, we modified the following method: 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);
bool bCenterImage = ( (dwWndStyle&SS_CENTERIMAGE) != 0 );
if( ! m_bmp.IsEmpty() )
{
bool bSmootherAsPossible = true;
e_ImageMode_t eImageMode = GetImageMode();
if( eImageMode == eStretch )
m_bmp.AlphaBlendSkinParts( dc.GetSafeHdc(), rcClient, CRect(0,0,0,0), CExtBitmap::__EDM_STRETCH, true, bSmootherAsPossible );
else if( eImageMode == eTouchInside || eImageMode == eTouchOutside )
{
CRect rcTouchSurface = rcClient;
CExtMemoryDC dcTouch( &dc, rcTouchSurface, CExtMemoryDC::MDCOPT_TO_MEMORY|CExtMemoryDC::MDCOPT_FILL_BITS|CExtMemoryDC::MDCOPT_RTL_COMPATIBILITY );
if( dcTouch.GetSafeHdc() )
{
CSize sizeTouchSrc = rcTouchSurface.Size();
CSize sizeBmp = m_bmp.GetSize();
double lfAspectX = double(rcTouchSurface.Width()) / double(sizeBmp.cx);
double lfAspectY = double(rcTouchSurface.Height()) / double(sizeBmp.cy);
double lfAspect = ( eImageMode == eTouchInside ) ? ( min( lfAspectX, lfAspectY ) ) : ( max( lfAspectX, lfAspectY ) );
CSize sizeNew( LONG(double(sizeBmp.cx)*lfAspect), LONG(double(sizeBmp.cy)*lfAspect) );
CRect rcTouchDst( rcTouchSurface.left, rcTouchSurface.top, rcTouchSurface.left + sizeNew.cx, rcTouchSurface.top + sizeNew.cy );
if( eImageMode == eTouchInside )
{
if( sizeNew.cx > sizeTouchSrc.cx )
rcTouchDst.OffsetRect( ( sizeNew.cx - sizeTouchSrc.cx ) / 2, 0 );
if( sizeNew.cy > sizeTouchSrc.cy )
rcTouchDst.OffsetRect( 0, ( sizeNew.cy - sizeTouchSrc.cy ) / 2 );
}
else
{
rcTouchDst.OffsetRect( - ( sizeNew.cx - sizeTouchSrc.cx ) / 2, 0 );
rcTouchDst.OffsetRect( 0, - ( sizeNew.cy - sizeTouchSrc.cy ) / 2 );
}
INT nOldStretchBltMode = bSmootherAsPossible ? ( ::GetStretchBltMode( dcTouch.m_hDC ) ) : ( COLORONCOLOR ) ;
if( bSmootherAsPossible )
::SetStretchBltMode( dcTouch.m_hDC, ( g_PaintManager.m_bIsWinNT ) ? HALFTONE : COLORONCOLOR );
m_bmp.AlphaBlend( dcTouch.m_hDC, rcTouchDst );
if( bSmootherAsPossible )
::SetStretchBltMode( dcTouch.m_hDC, nOldStretchBltMode );
}
}
else if( eImageMode == eTile )
m_bmp.AlphaBlendSkinParts( dc.GetSafeHdc(), rcClient, CRect(0,0,0,0), CExtBitmap::__EDM_TILE, true, bSmootherAsPossible );
else if( eImageMode == eAlign )
{
CSize szSize = m_bmp.GetSize();
CRect rcDst( rcClient.left, rcClient.top, rcClient.left + szSize.cx, rcClient.top + szSize.cy );
bool bCenterHorizontally = false;
switch( dwWndType )
{
case SS_RIGHT: rcDst.OffsetRect( rcClient.right - rcDst.right, 0 ); break;
case SS_CENTER: bCenterHorizontally = true; break;
default: /* all the other types assumed as left */ break;
}
if( bCenterHorizontally )
rcDst.OffsetRect( ( (rcClient.right - rcClient.left) - (rcDst.right - rcDst.left) ) / 2, 0 );
if( bCenterImage )
rcDst.OffsetRect( 0, ( (rcClient.bottom - rcClient.top) - (rcDst.bottom - rcDst.top) ) / 2 );
CRect rcSrc( 0, 0, szSize.cx, szSize.cy );
rcDst.top = max( rcDst.top, rcClient.top );
rcDst.left = max( rcDst.left, rcClient.left );
rcDst.bottom = min( rcDst.bottom, rcClient.bottom );
rcDst.right = min( rcDst.right, rcClient.right );
if( ::RectVisible( dc.GetSafeHdc(), &rcDst ) )
{
INT nOldStretchBltMode = bSmootherAsPossible ? ( ::GetStretchBltMode( dc.m_hDC ) ) : ( COLORONCOLOR );
if( bSmootherAsPossible )
::SetStretchBltMode( dc.m_hDC, ( g_PaintManager.m_bIsWinNT ) ? HALFTONE : COLORONCOLOR );
m_bmp.AlphaBlend( dc.m_hDC, rcDst, rcSrc );
if( bSmootherAsPossible )
::SetStretchBltMode( dc.m_hDC, nOldStretchBltMode );
}
}
}
else if( dwWndType == SS_ICON )
{
HICON hIcon = GetIcon();
if( hIcon != NULL )
{
CExtCmdIcon _icon;
_icon.AssignFromHICON( hIcon, true );
CSize szIcon = _icon.GetSize();
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,
IsWindowEnabled() ? CExtCmdIcon::__PAINT_NORMAL : CExtCmdIcon::__PAINT_DISABLED
);
}
}
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 )
if( strText.Find( _T(’\t’) ) != -1 ) // do tabs expanding
dwDrawTextFlags |= DT_EXPANDTABS;
if( (dwWndType == SS_SIMPLE)
|| (dwWndStyle&(SS_CENTERIMAGE|SS_ENDELLIPSIS|SS_PATHELLIPSIS)) != 0
)
{
dwDrawTextFlags |= DT_SINGLELINE;
if( (dwWndStyle&SS_CENTERIMAGE) != 0 )
dwDrawTextFlags |= DT_VCENTER;
if( (dwWndStyle&SS_ENDELLIPSIS) != 0 )
dwDrawTextFlags |= DT_END_ELLIPSIS;
if( (dwWndStyle&SS_PATHELLIPSIS) != 0 )
dwDrawTextFlags |= DT_PATH_ELLIPSIS;
}
else
dwDrawTextFlags |= DT_WORDBREAK;
if( dwWndType == SS_LEFTNOWORDWRAP )
dwDrawTextFlags &= ~(DT_WORDBREAK|DT_SINGLELINE);
if( (dwWndStyle&SS_NOPREFIX) != 0 )
dwDrawTextFlags |= DT_NOPREFIX;
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 );
}
Third, we modified the following method: void CExtGridCellPictureBase::OnPaintText(
const RECT & rcCellText,
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
{
ASSERT_VALID( this );
ASSERT_VALID( (&wndGrid) );
ASSERT( dc.GetSafeHdc() != NULL );
if( ! dc.RectVisible(&rcCellText) )
return;
wndGrid; nVisibleColNo; nVisibleRowNo; nColNo; nRowNo; nColType; nRowType; rcCellExtra; rcCell; rcVisibleRange; dwAreaFlags; dwHelperPaintFlags;
if( IsInvisible() || IsUndefined() || IsEmpty() )
return;
const CExtBitmap * pBmpBuffer = BitmapGetBuffer();
if( pBmpBuffer == NULL || pBmpBuffer->IsEmpty() )
return;
if( ( dwHelperPaintFlags & __EGCPF_SIMPLIFIED_RENDERING_TARGET ) != 0 )
{
CRect rcX( rcCellExtra );
CExtMemoryDC dcX( &dc, &rcX );
OnPaintText( rcCellText, wndGrid, dcX, nVisibleColNo, nVisibleRowNo, nColNo, nRowNo, nColType, nRowType, rcCellExtra, rcCell, rcVisibleRange, dwAreaFlags, dwHelperPaintFlags&(~__EGCPF_SIMPLIFIED_RENDERING_TARGET) );
return;
}
bool bSmootherAsPossible = true;
if( m_eImageMode == eStretch )
{
CRect rcStretch = rcCellText;
rcStretch.InflateRect( 2, 0 );
pBmpBuffer->AlphaBlendSkinParts( dc.GetSafeHdc(), rcStretch, CRect(0,0,0,0), CExtBitmap::__EDM_STRETCH, true, bSmootherAsPossible );
}
else if( m_eImageMode == eTouchInside || m_eImageMode == eTouchOutside )
{
CRect rcTouchSurface = rcCellText;
CExtMemoryDC dcTouch( &dc, rcTouchSurface, CExtMemoryDC::MDCOPT_TO_MEMORY|CExtMemoryDC::MDCOPT_FILL_BITS|CExtMemoryDC::MDCOPT_RTL_COMPATIBILITY );
if( dcTouch.GetSafeHdc() )
{
CSize sizeTouchSrc = rcTouchSurface.Size();
CSize sizeBmp = pBmpBuffer->GetSize();
double lfAspectX = double(rcTouchSurface.Width()) / double(sizeBmp.cx);
double lfAspectY = double(rcTouchSurface.Height()) / double(sizeBmp.cy);
double lfAspect = ( m_eImageMode == eTouchInside ) ? ( min( lfAspectX, lfAspectY ) ) : ( max( lfAspectX, lfAspectY ) );
CSize sizeNew( LONG(double(sizeBmp.cx)*lfAspect), LONG(double(sizeBmp.cy)*lfAspect) );
CRect rcTouchDst( rcTouchSurface.left, rcTouchSurface.top, rcTouchSurface.left + sizeNew.cx, rcTouchSurface.top + sizeNew.cy );
if( m_eImageMode == eTouchInside )
{
if( sizeNew.cx > sizeTouchSrc.cx )
rcTouchDst.OffsetRect( ( sizeNew.cx - sizeTouchSrc.cx ) / 2, 0 );
if( sizeNew.cy > sizeTouchSrc.cy )
rcTouchDst.OffsetRect( 0, ( sizeNew.cy - sizeTouchSrc.cy ) / 2 );
}
else
{
rcTouchDst.OffsetRect( - ( sizeNew.cx - sizeTouchSrc.cx ) / 2, 0 );
rcTouchDst.OffsetRect( 0, - ( sizeNew.cy - sizeTouchSrc.cy ) / 2 );
}
INT nOldStretchBltMode = bSmootherAsPossible ? ( ::GetStretchBltMode( dcTouch.m_hDC ) ) : ( COLORONCOLOR ) ;
if( bSmootherAsPossible )
::SetStretchBltMode( dcTouch.m_hDC, ( g_PaintManager.m_bIsWinNT ) ? HALFTONE : COLORONCOLOR );
pBmpBuffer->AlphaBlend( dcTouch.m_hDC, rcTouchDst );
if( bSmootherAsPossible )
::SetStretchBltMode( dcTouch.m_hDC, nOldStretchBltMode );
}
}
else if( m_eImageMode == eTile )
pBmpBuffer->AlphaBlendSkinParts( dc.GetSafeHdc(), rcCellText, CRect(0,0,0,0), CExtBitmap::__EDM_TILE, true, bSmootherAsPossible );
else if( m_eImageMode == eAlign )
{
CSize szSize = pBmpBuffer->GetSize();
CRect rcDst( rcCellText.left, rcCellText.top, rcCellText.left + szSize.cx, rcCellText.top + szSize.cy );
DWORD dwCellStyle = GetStyle();
switch( (dwCellStyle&__EGCS_TA_HORZ_MASK) )
{
case __EGCS_TA_HORZ_BY_TYPE:
case __EGCS_TA_HORZ_LEFT:
break;
case __EGCS_TA_HORZ_RIGHT:
rcDst.OffsetRect( rcCellText.right - rcDst.right, 0 );
break;
case __EGCS_TA_HORZ_CENTER:
rcDst.OffsetRect( ( (rcCellText.right - rcCellText.left) - (rcDst.right - rcDst.left) ) / 2, 0 );
break;
#ifdef _DEBUG
default:
ASSERT( FALSE );
break;
#endif // _DEBUG
}
switch( (dwCellStyle&__EGCS_TA_VERT_MASK) )
{
case __EGCS_TA_VERT_BY_TYPE:
case __EGCS_TA_VERT_TOP:
break;
case __EGCS_TA_VERT_BOTTOM:
rcDst.OffsetRect( 0, rcCellText.bottom - rcDst.bottom );
break;
case __EGCS_TA_VERT_MIDDLE:
rcDst.OffsetRect( 0, ( (rcCellText.bottom - rcCellText.top) - (rcDst.bottom - rcDst.top) ) / 2 );
break;
#ifdef _DEBUG
default:
ASSERT( FALSE );
break;
#endif // _DEBUG
}
CRect rcSrc( 0, 0, szSize.cx, szSize.cy );
rcDst.top = max( rcDst.top, rcCellText.top );
rcDst.left = max( rcDst.left, rcCellText.left );
rcDst.bottom = min( rcDst.bottom, rcCellText.bottom );
rcDst.right = min( rcDst.right, rcCellText.right );
if( ::RectVisible( dc.GetSafeHdc(), &rcDst ) )
{
INT nOldStretchBltMode = bSmootherAsPossible ? ( ::GetStretchBltMode( dc.m_hDC ) ) : ( COLORONCOLOR ) ;
if( bSmootherAsPossible )
::SetStretchBltMode( dc.m_hDC, ( g_PaintManager.m_bIsWinNT ) ? HALFTONE : COLORONCOLOR );
pBmpBuffer->AlphaBlend( dc.m_hDC, rcDst, rcSrc );
if( bSmootherAsPossible )
::SetStretchBltMode( dc.m_hDC, nOldStretchBltMode );
}
}
}
Now both the label control and picture cell support proportional image resizing.
|
|
Offer Har
|
Sep 21, 2009 - 12:12 AM
|
Dear Support, We are using CutePDF to generate a PDF document from a grid application. We have encountered several issues: 1. There are no margines - how do we add margines to the print layout? 2. When moving to the next page, several lines from the grid are lost... we have a number column, and we see that after row X which is the last on page N, the next row on page N+1 is X+18, and not X+19 3. The last line in each page is cut in the middle - again, controlling the pargines would have helped. 4. Is there any way to add a couple of text line before the grid begins, like some kind of header and a summery of operations done on the grid? Thanks, Ron.
|
|
Technical Support
|
Sep 21, 2009 - 1:07 PM
|
We are sorry, but we didn’t come across the CutePDF software yet. We simply don’t know how it works.
|
|
Offer Har
|
Sep 21, 2009 - 2:14 PM
|
Dear Support,
The problem is not the CutePDF, but the print-preview of the grid in Prof-UIS. you can also see it in FilteredGrids sample - go to the tree grid (the one with the row numbers) and see how they skip about ten rows between pages.
This is a bug I see in all the print previews in 2.84
We have to a deliver a system which is built with 2.84 very soon, and this is one of the last outstanding issues - please help us with it.
Thanks, Ron.
|
|
Technical Support
|
Sep 23, 2009 - 5:01 AM
|
The print preview layout and measurement issues were closed in 2.85. We have confirmations about solved status of these issues from our customers.
|
|
Offer Har
|
Sep 19, 2009 - 7:27 AM
|
Hi, I managed to get a print preview of my grid, how ever, all the styles are missing in the print-preview: 1. Grid lines - I want to have them in the printed version 2. Header row and header column - I want them to be colored like in the grid How do I do this? Thanks, Ron.
|
|
Technical Support
|
Sep 20, 2009 - 1:43 AM
|
Please invoke the following line of code in the constructor of your grid class:
m_bDrawSimpleBlackBorders = true;
The grid lines will appear in the print preview. The colors are supported in the printer/preview output in Prof-UIS 2.85.
|
|
Offer Har
|
Sep 20, 2009 - 2:06 AM
|
Hi, I am using 2.84, this member is not defined there. How about having the headers in different color? When is 2.87 out? Ron.
|
|
Technical Support
|
Sep 21, 2009 - 11:28 AM
|
You need at least 2.85 for better print preview: layout measurement fixes and colored printing. We can provide you with the 2.87 download information via e-mail. It should be released at the end of this month or beginning of next.
|
|
Offer Har
|
Sep 18, 2009 - 5:07 AM
|
Hi, I defined my class like this: class CChildView : public CExtPPVW< CExtNSB<CExtGridWnd> >
but when I go to the print preview I see nothing (empty page, even when there are cells in the grid), and the page numbers are displayed as 1-65535 What am I missing? Thanks, Ron.
|
|
Technical Support
|
Sep 18, 2009 - 2:43 PM
|
Please use the CExtNSB < CExtPPVW < CExtGridWnd > > template based type. The CExtPPVW template class has the CExtPPVW < CExtGridWnd > > specialized version. Your current template construction does not allow the C++ compiler to find it.
|
|
tera tera
|
Sep 18, 2009 - 3:03 AM
|
Hello. The same noted place is displayed, and it is difficult to choose it. 
Cannot you set a name for customization individually?
|
|
Technical Support
|
Sep 18, 2009 - 2:45 PM
|
This indicates an incorrect ribbon bar design. The ribbon bar control is task oriented. Each tab page, each group of buttons and each popup menu should be related to particular task available to user. You should not have exactly the same commands placed into different pages, button groups and menus. But we can regard your message is a feature request for removing exactly the same items from customization list boxes.
|
|
Offer Har
|
Sep 17, 2009 - 9:12 PM
|
|
|
Technical Support
|
Sep 18, 2009 - 2:44 PM
|
We need to discuss some details about your task. You have 2000 rows and 10 columns. It’s not an enough large number of rows/columns and you can load it into the memory based grid control enough fast of all the grid cells are simple text grid cells. Then you can setup sort order to the grid control and all the grid rows will become sorted like you need. You can try to code this solution first and let us know whether the performance of the grid control is acceptable in your app.
The virtually cacheable grid will be noticeably faster even on this number of rows and columns. But it does not support data sorting and you will need to provide the grid with already sorted data.
|
|
Offer Har
|
Sep 17, 2009 - 11:34 AM
|
Hi, Our report has several columns that have almost limited text width, and a last column of free-text. We would like that no matter what is the width of the window, or all other columns, the last column will always extend all the way to the right. How can we do it? Thanks, Ron.
|
|
Technical Support
|
Sep 18, 2009 - 2:43 PM
|
You wrote: I need to setup the width of all columns (not proportional) and just having the last column fill all the space that is left. Then, each time the width of one of the column changes, the last column’s width will change accordingly as well, and all the others will be left with the same width. It looks we explained you how to do exactly the same. What is needed additionally? What is working not like you expect?
|
|
Technical Support
|
Sep 18, 2009 - 3:40 AM
|
You should use the __ESIS_STH_NONE horizontal scrolling type which disables horizontal scrolling. This is required for the proportional resizing feature which is applied with the __EGBS_BSE_EX_PROPORTIONAL_COLUMN_WIDTHS style. All the columns will be resized proportionally. You should configure all the columns excepting the last one to use equal widths in pixels (CExtGridCell::ExtentSet() ). Only the last column will be resized by the grid control automatically.
|
|
Offer Har
|
Sep 18, 2009 - 5:00 AM
|
That’s close but not enough... I need to setup the width of all columns (not proportional) and just having the last column fill all the space that is left. Then, each time the width of one of the column changes, the last column’s width will change accordingly as well, and all the others will be left with the same width.
|
|
howard liu
|
Sep 16, 2009 - 10:28 PM
|
I got following error when compiling a source file, anyone can advise how to solve it? Thank you. I’m using VS2005, ProfUIS285. Error 193 error C2661: ’CExtWFF<CExtWFFBase>::CExtWFF’ : no overloaded function takes 2 arguments c:\program files\foss software inc\prof-uis\include\extscrollwnd.h 446
CExtNCSB_Impl(
UINT nIDTemplate,
CWnd * pParentWnd,
bool bNcsbDelayedInitialization = false,bool bNcsbForceMiddleContainerMode = false
)
: _BTNCSBimpl( nIDTemplate, pParentWnd )
, m_pNcsbContainerHorizontal( NULL )
, m_pNcsbContainerVertical( NULL )
, m_pNcsbContainerCorner( NULL )
, m_pNcsbContainerMiddle( NULL )
, m_hWndNcsbContainerHorizontal( NULL )
, m_hWndNcsbContainerVertical( NULL )
, m_hWndNcsbContainerCorner( NULL )
, m_hWndNcsbContainerMiddle( NULL )
, m_bNcsbUse32BitScrollInfo(
, m_bNcsbHelperDestructionMode(
, m_bNcsbDelayedInitialization( bNcsbDelayedInitialization )
, m_bNcsbForceMiddleContainerMode( bNcsbForceMiddleContainerMode )
, m_bNcsbProtectMessageLoopFromMfcToolHitTesting(
, m_ptNcsbProtectMouseMoveLast( -32767, -32767 )
, m_rcNcsbCustomNcAreaSizes( -1, -1, -1, -1 )
, m_clrNcsbCustomNcAreaFill( COLORREF(-1L) )
, m_bNcsbFirstPaintMessagePassed(
, m_bNcsbForceRedrawOnMouseWheel(
, m_bNcsbCreatingContainers(
{
} true )false )true )false )false )false )
|
|
Technical Support
|
Sep 23, 2009 - 5:01 AM
|
Please use CExtWFF < CExtNCSB < CTreeCtrl > > instead of CExtNCSB < CExtWFF < CTreeCtrl > > .
|
|
Technical Support
|
Sep 18, 2009 - 3:43 AM
|
Where are you using the CExtNCSB and CExtWFF template classes in your project? Please provide us with more detailed compiler output?
|
|
howard liu
|
Sep 21, 2009 - 9:30 PM
|
Thanks for your reply, there is one place CExtNCSB and CExtWFF template classes used in my project, in class declaration as following:
class
GEXUTILSAPI CVNTITreeCtrl : public CExtNCSB < CExtWFF<CTreeCtrl> > { . .. } , the compiler error is: Error 135 error C2661: ’CExtWFF<CExtWFFBase>::CExtWFF’ : no overloaded function takes 2 arguments c:\program files\foss software inc\prof-uis\include\extscrollwnd.h 446
Please help, thanks.
|
|
tera tera
|
Sep 16, 2009 - 7:11 PM
|
|
|
Technical Support
|
Sep 25, 2009 - 6:42 AM
|
We coded the printing/previewing subsystem in 2 month. Then it was improved several Prof-UIS releases. We used GDI in it. Recode it with GDI+ means to create a new print/preview subsystem from scratch. This is not a support task. This task is not related to any bugs in Prof-UIS. This task is a feature request.
|
|
Technical Support
|
Sep 18, 2009 - 3:44 AM
|
We dig into GDI+ and classic GDI metafiles compatibility problem. The following links contain some interesting information:
http://www.undocprint.org/formats/winspool/emf_plus http://books.google.com/books?id=ElAaTGP__U0C&pg=PA366&lpg=PA366&dq=printing+in+gdi%2B+emf%2B&source=bl&ots=AgE-P1i-vH&sig=Wde4QxYgxwDOIWa0BSBLHcKV6aA&hl=en&ei=VY2ySvrOEZXJ_gaDnr3MDQ&sa=X&oi=book_result&ct=result&resnum=2#v=onepage&q=&f=false
It looks like GDI+ simply emulates their APIs invocation and translates them into GDI APIs very approximately when the GDI+ is invoked for painting into classic metafiles. It’s logically correct. The classic metafiles (WMF or EMF) are simply saved sequences of classic GDI API invocations. The classic metafiles does not know anything about GDI+ APIs. This means the only way to draw correctly with GDI+ APIs into classic metafiles is to draw into bitmap and the draw composed bitmap into classic metafile. The alternate solution is to re-code Prof-UIS printing/previewing subsystem and make it GDI+ based.
The GDI and GDI+ graphic systems are two absolutely independent software libraries nevertheless they have APIs for integrating with each other. That’s why they are using different metafiles. These two systems are not the only graphic painting APIs in this world. For instance, the Firefox web browser uses the www.cairographics.org system. This library has its own device contexts working similar to classic and GDI+ metafiles. The Cairo library uses SVG and PDF contexts which can be assumed as metafile replacements.
The Prof-UIS library uses classic GDI metafiles in its printing previewing subsystem because all the other classes are using GDI - not GDI+. To switch to GDI+ in the printing/previewing subsystem will require to switch to GDI+ in all the Prof-UIS. It’s possible. But it’s not a quick work.
|
|
tera tera
|
Sep 23, 2009 - 11:18 PM
|
Hello. >It’s possible. But it’s not a quick work.
I consulted with a boss.
The boss seems to want you to cope.
However, If support seems to be difficult, the boss seems to reconsider it
Thanks,
|
|
Courtney Smith
|
Sep 16, 2009 - 8:20 AM
|
We have a cextgridcellcombobox. Our font size for the grid is XX, but the combobox dropdown shows a font of YY. Is there a way to set the item font for the drop list? Thanks,
CJ
|
|
Courtney Smith
|
Sep 18, 2009 - 1:51 PM
|
Ok that works well. How do i increase my droplist heigh. I can only see 2 items in the drop list because its small and not all the items add to the droplist.
|
|
Technical Support
|
Sep 20, 2009 - 1:43 AM
|
Prof-UIS 2.85 prevents this situation automatically. The CExtGridCell::OnPopupListBoxAdjustSize() virtual method does popup list box size adjustment and you can see well looking list box on the screen. If the list box has only a few items, then it’s height is decreased and you don’t see white space at the bottom. The width of the list box is adjusted to fit its items. Older Prof-UIS versions require overriding of the CExtGridCell::OnPopupListBoxMeasureTrackSize() or CExtGridWnd::OnGridCellPopupListBoxMeasureTrackSize() virtual methods if you need to change the size of the popup list box.
|
|
Courtney Smith
|
Sep 17, 2009 - 12:47 PM
|
I have those two functions in my custom class, but the problem i run into is, i’m not totally sure how i should change those functions to increase the font size and rect size.
|
|
Technical Support
|
Sep 18, 2009 - 3:41 AM
|
Please take a look at the source code of the CExtGridCell::OnPopupListBoxItemDraw and CExtGridCell::OnPopupListBoxItemMeasure methods. Both are invoking the _tcsi.m_wndGrid.OnSiwGetDefaultFont() code. The CExtScrollItemWnd::OnSiwGetDefaultFont() method provides all the grid parts with the default font for painting and measuring. You should simply replace the _tcsi.m_wndGrid.OnSiwGetDefaultFont() code invocation with some your code for providing popup list box with required font.
|
|
Technical Support
|
Sep 17, 2009 - 3:03 AM
|
It’s possible to replace the font of the popup list boxes displayed from the grid cells. But currently this requires coding a grid cell class which implements the CExtGridCell::OnPopupListBoxItemMeasure() and CExtGridCell::OnPopupListBoxItemDraw() virtual methods. We can regard your message is a feature request and provide you with the source code update which will allow you to assign a font to popup list boxes and/or individual list box items.
|
|
Courtney Smith
|
Sep 16, 2009 - 7:50 AM
|
Currently we have an application with 2 main windows. We have a client that wants window 2 to handle a key press when window 1 has focus. Can a keyboard handler be created that can intercept keys app-wide? Thanks, CJ
|
|
Technical Support
|
Sep 17, 2009 - 3:02 AM
|
We think you should add a keyboard accelerator for the key combination which should be handled in the second background window. The OnCmdMsg() virtual method of the first focused window should invoke the OnCmdMsg() virtual method of the second background window when the command identifier is a background executed command identifier.
|
|
Dave Foster
|
Sep 15, 2009 - 8:43 PM
|
CMainWnd::DockControlBar( m_ToolBar, AFX_IDW_DOCKBAR_LEFT, &rect ) appears to undesirably resize our m_ToolBar when docked. This did not occur when running with an MFC CToolBar. m_ToolBar is an instance of CExtToolControlBar which was constructed with a 6 or so buttons (implemented from a bitmap), two CExtComboBox items and two CStatic objects inserted dynamically (they were "created", then "positioned" on the m_ToolBar). I have read that one should use CExtToolControlBar::DockControlBar() instead of CMainWnd::DockControlBar(), but I cannot see the equivelent functionality in the CExtControlBar class. Thanks
|
|
Technical Support
|
Sep 17, 2009 - 3:35 AM
|
The CExtToolControlBar::_CalcSize() method does not assume all buttons have a equal size. Yes, it invokes the CSize sizeDefButton = _GetDefButtonSize(); code at startup to retrieve the default size of tool bar button. But the sizeDefButton object is just required for computing the real size of each button. The default size is assumed to be minimal. The CExtToolControlBar::_CalcSize() method is really organized as the for loop through all the toolbar buttons. This loop really computes size of each button:
CSize sizeTBB(
pTBB->CalculateLayout(
dc,
sizeDefButton,
(!bVerticallyDocked) || m_bPaletteMode
)
);
It would be really interesting to take a look at the overridden method in your project. It would be really interesting to find out what’s the real source of the problem?
|
|
Dave Foster
|
Sep 17, 2009 - 1:36 PM
|
The solution required supplying functions normally supplied by CToolBar, and overriding the _CalcSize() function in CExtToolControlBar: void CMyToolBar::SetSizes( SIZE sizeButton, SIZE sizeImage )
{
m_SizeButton = sizeButton;
m_SizeImage = sizeImage;
int nButtonCount = CExtToolControlBar::GetButtonsCount();
int nOffset = 0;
for ( int i = 0; i < nButtonCount; i++ ) {
int nButtonWidth = GetButtonID( i ) != ID_SEPARATOR ? m_SizeButton.cx : 8;
CRect ClientRect( nOffset, 0, nOffset + nButtonWidth, m_SizeButton.cy ); // l, t, r, b
CExtToolControlBar::GetButton( i )->SetRect( ClientRect );
nOffset += nButtonWidth;
}
}
void CMyToolBar::SetButtonInfo( int nIndex, UINT nID, UINT nStyle, int iImage )
{
CExtToolControlBar::SetButtonInfo( nIndex, nID, nStyle );
int nOffset = 0;
for ( int i = 0; i < nIndex; i++ ) {
CRect Rect;
GetButtonRect( i, Rect );
nOffset += Rect.Width();
}
CRect ClientRect( nOffset, 0, nOffset + iImage, m_SizeButton.cy ); // l, t, r, b
CExtToolControlBar::GetButton( nIndex )->SetRect( ClientRect );
}
void CMyToolBar::GetItemRect( int nIndex, LPRECT lpRect )
{
CExtToolControlBar::GetButtonRect( nIndex, lpRect );
}
CSize CMyToolBar::_CalcSize( BOOL bVerticallyDocked )
{
#if 0
CSize BarSize = CExtToolControlBar::_CalcSize( bVerticallyDocked );
#else
CSize BarSize( bVerticallyDocked ? m_SizeButton.cx : 0, bVerticallyDocked ? 0 : m_SizeButton.cy );
int nButtonCount = CExtToolControlBar::GetButtonsCount();
for ( int i = 0; i < nButtonCount; i++ ) {
CRect ItemRect;
GetItemRect( i, &ItemRect );
if ( bVerticallyDocked )
BarSize.cy += ItemRect.Height();
else
BarSize.cx += ItemRect.Width();
}
#endif
return BarSize;
} The button width of "8" for a separator is a WAG.
|
|
Technical Support
|
Sep 17, 2009 - 3:03 AM
|
The CExtControlBar::Dock***() methods should be used with CExtControlBar resizable control bars. The CFrameWnd::DockControlBar() method should be used with CExtToolControlBar , CExtMenuControlBar , CExtPanelControlBar panel bars and other fixed size bars which cannot be resized by the user when docked.
The problem is to do with something else. Please drop an e-mail to the support mail box at this web site and attach the source code of your classes mentioned in your forum message and the source code of the main frame class.
|
|
Dave Foster
|
Sep 16, 2009 - 2:02 PM
|
I found the solution to my own problem. I found that not only did DocControlBar() have the problem, but so did FloatControlBar(). After much wading through source code (both Prof-UIS and MFC), I discovered that CExtToolControlBar::_CalcSize() actually assumes that all buttons are the same width/height. For the particular contol bar in question, this not the case. I over-rode the function _CalcSize() and now have the result that we expect.
|
|
Chris Anderson
|
Sep 15, 2009 - 6:25 PM
|
Is it possible to make the edit control on a dialog "transparent" ? For those themes with non-gradient background ( like lunar blue or native XP ) we can simply use the same background color of the dialog. But this work around doesn’t work for the theme with gradient background like office 2007 R1.
|
|
Technical Support
|
Sep 16, 2009 - 11:09 AM
|
Edit controls are not transparent. You can replace the background of an edit window only by handling its WM_CTLCOLOR message and providing it with the bitmap pattern brush for painting its background. This brush should be based on a bitmap image with the size equal to size of editor’s client area. The CExtEditBase class handles it. It has the ON_WM_CTLCOLOR_REFLECT() message map entry and the CExtEditBase::CtlColor() handler method.
|
|
tera tera
|
Sep 15, 2009 - 1:50 AM
|
Hello. I am troubled.
When I draw a screen, I use GDI+.
 In GDI+, I perform PrintPrview.
However, it is displayed incorrectly when I make a metafile in CMetaFileDC and do PrintPreview. BOOL CNxkCViewPPW :: OnPreparePrinting( CPrintInfo * pInfo )
{
:
:
:
:
CMetaFileDC dcEMF;
if( ! dcEMF.CreateEnhanced(
pDC ,
( ! strMetafileName.IsEmpty() )
? LPCTSTR(strMetafileName)
: NULL
,
rcEmfExtent,
NULL
)
)
{
ASSERT( FALSE );
throw 0;
}

There is a MetaFile command in GdiPlus.
Will it be displayed definitely if I use Class of GdiPlust-MeFile? Gdiplus
http://msdn.microsoft.com/en-us/library/ms534077(VS.85).aspx /**************************************************************************\
* Copyright (c) 1998-2001, Microsoft Corp. All Rights Reserved.
* Module Name:
* GdiplusMetafile.h
* Abstract:
* GDI+ Metafile class
\**************************************************************************/ #ifndef _GDIPLUSMETAFILE_H
#define _GDIPLUSMETAFILE_H class Metafile : public Image
{
public:
friend class Image; // Playback a metafile from a HMETAFILE
// If deleteWmf is TRUE, then when the metafile is deleted,
// the hWmf will also be deleted. Otherwise, it won’t be.
Metafile(IN HMETAFILE hWmf,
I want you to offer a sample.
Give my best regards
|
|
tera tera
|
Sep 16, 2009 - 7:09 PM
|
In win32 metafile, a figure is not drawn normally.
I think that "class Metafile" for GdiPlus is drawn normally.
I want you to offer a sample source of PrintPreview which incorporated Metafile of GdiPlus.
Please answer it. /**************************************************************************\
* Copyright (c) 1998-2001, Microsoft Corp. All Rights Reserved.
* Module Name:
* GdiplusMetafile.h
* Abstract:
* GDI+ Metafile class
\**************************************************************************/ #ifndef _GDIPLUSMETAFILE_H
#define _GDIPLUSMETAFILE_H class Metafile : public Image
{
public:
friend class Image; // Playback a metafile from a HMETAFILE
// If deleteWmf is TRUE, then when the metafile is deleted,
// the hWmf will also be deleted. Otherwise, it won’t be.
Metafile(IN HMETAFILE hWmf,
|
|
Technical Support
|
Sep 18, 2009 - 3:44 AM
|
We dig into GDI+ and classic GDI metafiles compatibility problem. The following links contain some interesting information:
http://www.undocprint.org/formats/winspool/emf_plus http://books.google.com/books?id=ElAaTGP__U0C&pg=PA366&lpg=PA366&dq=printing+in+gdi%2B+emf%2B&source=bl&ots=AgE-P1i-vH&sig=Wde4QxYgxwDOIWa0BSBLHcKV6aA&hl=en&ei=VY2ySvrOEZXJ_gaDnr3MDQ&sa=X&oi=book_result&ct=result&resnum=2#v=onepage&q=&f=false
It looks like GDI+ simply emulates their APIs invocation and translates them into GDI APIs very approximately when the GDI+ is invoked for painting into classic metafiles. It’s logically correct. The classic metafiles (WMF or EMF) are simply saved sequences of classic GDI API invocations. The classic metafiles does not know anything about GDI+ APIs. This means the only way to draw correctly with GDI+ APIs into classic metafiles is to draw into bitmap and the draw composed bitmap into classic metafile. The alternate solution is to re-code Prof-UIS printing/previewing subsystem and make it GDI+ based.
The GDI and GDI+ graphic systems are two absolutely independent software libraries nevertheless they have APIs for integrating with each other. That’s why they are using different metafiles. These two systems are not the only graphic painting APIs in this world. For instance, the Firefox web browser uses the www.cairographics.org system. This library has its own device contexts working similar to classic and GDI+ metafiles. The Cairo library uses SVG and PDF contexts which can be assumed as metafile replacements.
The Prof-UIS library uses classic GDI metafiles in its printing previewing subsystem because all the other classes are using GDI - not GDI+. To switch to GDI+ in the printing/previewing subsystem will require to switch to GDI+ in all the Prof-UIS. It’s possible. But it’s not a quick work.
|
|
Technical Support
|
Sep 16, 2009 - 3:45 AM
|
You can try and draw what you want through GDI plus into standalone GDI plus metafile. Then you should draw GDI plus metafile into Win32 metafile.
|
|
tera tera
|
Sep 16, 2009 - 4:13 AM
|
I do a metafile of GDI+ and do forward it to dcEMF? CMetaFileDC dcEMF;
if( ! dcEMF.CreateEnhanced( I want a sample code.
Give my best regards
|
|
Adrian M
|
Sep 14, 2009 - 2:43 PM
|
Hi,
Do you have a sample on to add a status bar to a dialog based app?
Thanks,
Adrian
|
|
Technical Support
|
Sep 16, 2009 - 11:07 AM
|
|
|
Eric Houvenaghel
|
Sep 11, 2009 - 9:32 AM
|
I’m using CExtReportGridWnd. At some point in time, cells are join (e.g. GridCellJoinSet(CSize(4, 1), 3, nRowNo); ). At some other point in time the joins are reduced (e.g. GridCellJoinSet(CSize(4, 1), 3, nRowNo); to GridCellJoinSet(CSize(2, 1), 3, nRowNo); something like that). Problem is that the cells that were part of the first joint are now empty?!?! Any idea what gives?
|
|
Technical Support
|
Sep 11, 2009 - 10:42 AM
|
The grid cell joining feature is incompatible with the grid sorting feature and report grid row grouping and column activation/deactivation features. If you deactivate all these features in the CExtReportGridWnd report grid control, then it will become absolutely similar to the CExtGridWnd simple plain grid control (see the SynchronizedGrids sample application). But it will support joining well.
|
|
Eric Houvenaghel
|
Sep 11, 2009 - 11:05 AM
|
Understood. I’ve found a way to deal with the problem. All the cell in the row have to be reset to CSize(1, 1) via the JoinSet method. Only then can you apply the new join. The only down side is that you need to loop through every column for every row iteration.
|
|
tera tera
|
Sep 11, 2009 - 4:08 AM
|
Hello. It is a selection of Tree.
When a focus moves to other UI, a selection disappears.
I want to always display selections. 
|
|
Technical Support
|
Sep 14, 2009 - 6:26 AM
|
Please take a look at the source code of the CPageTreeCtrl::OnBnClickedCheckShowSelAlways() handler method in the ProfUIS_Controls sample application. It’s invoked when the Show selection always check box is checked/un-checked on the Tree View dialog page. You can see how the CExtTreeCtrl control on this dialog page displays the selection permanently when the Show selection always check box is checked. Is that is what you need? But, of course, the selection look is different when the tree control is focused and when it’s not focused. You can override the CExtTreeCtrl::OnQueryWindowFocusedState() virtual method and simply return true flag from it. As result, your tree control will think that it’s always a focused window.
|
|
Technical Support
|
Sep 11, 2009 - 7:20 AM
|
We guess here is what you need: CExtTreeCtrl & wndTree = . . .
wndTree.ShowSelectionAlwaysSet();
|
|
tera tera
|
Sep 13, 2009 - 6:44 PM
|
The command does not work.
When the focus of other spirit screens moves, the selection of the tree disappears. 
ProfLib uses 2009-08-19.
|
|
tera tera
|
Sep 11, 2009 - 2:12 AM
|
Hello. Cannot you display the following cells? 
|
|
Technical Support
|
Sep 11, 2009 - 7:21 AM
|
You can see the very similar menu in the FormulaGrid sample application. You should initialize the button node for the right buttons collection, then insert the children CExtCustomizeCmdTreeNode nodes which represent the dropped menu.
|
|
tera tera
|
Sep 13, 2009 - 6:11 PM
|
Please describe the comment precisely. Thanks,
|
|
Technical Support
|
Sep 14, 2009 - 6:26 AM
|
We are sorry, we misunderstood your question. The CExtGridCellButton class implements a push button like looking grid cell with the button shape covering entire grid cell’s area. Other buttons are unsupported by this grid cells. You can organize this two-button grid cell as two columns of grid cells.
|
|
Technical Support
|
Sep 11, 2009 - 7:21 AM
|
It looks like a simple text grid cell (the CExtGridCellString class) with an icon and ellipsis button (the __EGCS_BUTTON_ELLIPSIS style).
|
|
tera tera
|
Sep 13, 2009 - 6:58 PM
|
Beside a button, I cannot display __EGCS_BUTTON_ELLIPSIS. CMuGridCellButton * pGridCellButton;
pGridCellButton =
STATIC_DOWNCAST(
CMuGridCellButton,
m_pMuGrid->GridCellGet(
0,
9,
0,
0,
RUNTIME_CLASS(CMuGridCellButton)
)
);
pGridCellButton->TextSet(" button "); pGridCellButton->ModifyStyle( __EGCS_BUTTON_ELLIPSIS, 0L );
|
|