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 |
|
Tak Ming Leung
|
Nov 1, 2009 - 7:23 AM
|
I have just installed the integration wizard on my VS2008. When I try to generate a Prof-uis application from "New Project" using ProfUISAppWizard, it goes straight back and display an error message - (Creating project "project" ...... project create failed) on the status bar. I wonder there is anything wrong on the installation. I checked the VCWizards - ProfUISAppWizard folder, all required folders are there but there is only ProfUISAppWizard.vsdir in the vcprojects - Prof-UIS folder. OS: Window XP professional Compiler: Microsoft Visual Studio 2008 Professional
|
|
Technical Support
|
Feb 17, 2010 - 1:34 PM
|
We can assume the first problem is brought by the Prof-UIS Application Wizard for Visual Studio 2008 (9.0). Though the VsWizard.VsWizardEngine.8.0 wizard engine version must also work with Visual Studio 2008.
The second problem is well known and this is a real problem of Visual Studio 2005 and later versions. These Visual Studio versions cannot work with multilingual resources (such as rich Prof-UIS resources translated into 40 languages) if the current system locale is set to one of the complex Asian languages (Korean, Japanese, Chinese). To avoid this problem you can either switch the default Windows locale to English for compiling Prof-UIS DLLs and then restore the default locale back or just comment most of Prof-UIS resource includes in the …/Prof-UIS/Include/Resources/Resource.rc file.
The third problem looks like the result of the second one.
Thank you for your effort. We additionally added three months to your subscription so it now expires March 22, 2011 .
|
|
Vincent SAFFRE
|
Nov 14, 2016 - 12:38 PM
|
Hi, I just installed ProfUIS 3.3.0.0 and I had the same issue with ProfUISAppWizard that doesn’t work with VisualStudio 2010. As explained by ILHwan Jeong (Thank’s to him), it comes from an error in the file ProfUISAppWizard.vsz on the following line : Wizard=VsWizard.VsWizardEngine.8.0 I just replaced ’8’ by ’10’ (for VisualStudio 2010) and it works. My langage is French so it is enough to solve my problem. It’s a shame that these files have not been corrected since 6 years. BR Vincent
|
|
Il Hwan Jeong
|
Feb 17, 2010 - 8:01 AM
|
OK, I had fixed all problem of ProFUIS 2.88 version. The first problem of AppWizard caused by setting value fault of Wizard in ProfUISAppWizard.vsz file at C:\Program Files\Microsoft Visual Studio 9.0\VC\vcprojects. -------------------------------------------------------------------------- VSWIZARD 7.0 Wizard=VsWizard.VsWizardEngine.8.0
Wizard=VsWizard.VsWizardEngine.9.0
Param="WIZARD_NAME = ProfUisAppWizard"
Param="RELATIVE_PATH = VCWizards"
Param="FALLBACK_LCID = 1033"
-------------------------------------------------------------------------- Second problem was ProFUIS DLL build error caused by resource importing fault of C:\Program Files\FOSS Software Inc\Prof-UIS\Include\Resources\resource.rc file. If you want to use asian language resource, you have to comment all other language except US (English) and your language. In my case i had used only US english and Korean. Other language resource were comment to prevent importing during resource compile. -------------------------------------------------------------------------- Third problem was ProFUIS DLL Release build error from mt.exe. Project : error PRJ0002 : Error result 31 returned from ... It caused by manifest setting of these Rlease projects’ property. So, i had select No of Generate Manifest Option of projects. Then all above mentioned error were fixed and i can build and create ProFUIS project properly. -------------------------------------------------------------------------- I had spent lots of days to solve all problem. So, I hope to extend term of my subscription license more than 90 days to compensate troubleshoot by myself.
Best Regards.
ILHwan, Jeong
|
|
Il Hwan Jeong
|
Feb 16, 2010 - 5:33 PM
|
Humm... I’m using Visual Studio 2008 English professional (I had purchased it. It is not beta version). So, the above likned solution are not work for me. I had tried the other ways too (to solve HKCR registry permission issue of VsWizard.VsWizardEngine.9.0 and tried "devenv /ResetSkipPkgs" command. But those solution also not worked for me.
|
|
Technical Support
|
Nov 2, 2009 - 7:16 AM
|
|
|
Il Hwan Jeong
|
Feb 16, 2010 - 5:34 PM
|
Humm... I’m using Visual Studio 2008 English professional (I had purchased it. It is not beta version). So, the above likned solution are not work for me. I had tried the other ways too (to solve HKCR registry permission issue of VsWizard.VsWizardEngine.9.0 and tried "devenv /ResetSkipPkgs" command. But those solution also not worked for me.
|
|
tera tera
|
Oct 30, 2009 - 12:14 AM
|
Hello. I want to change a clicked decision domain.
Because string is displayed, I click a decision domain of the blue by mistake.
I want to change a blue decision domain in a green decision domain. Give my best regards. 
|
|
Technical Support
|
Oct 30, 2009 - 2:38 PM
|
The bottom part of the big ribbon button has layout provided by the paint manager. All the Prof-UIS paint managers compute the layout of big ribbon buttons to make them similar to the same buttons in Office 2007 an Office 2010. But your proposal is interesting and we can assume this is the feature request.
|
|
tera tera
|
Nov 1, 2009 - 6:03 PM
|
After program revision completion, please tell me.
Give my best regards.
|
|
JM Kwon
|
Oct 30, 2009 - 12:06 AM
|
Dear Porf-Uis I need help. class CExtSpinRibbonNode : public CExtRibbonNode
{
public:
DECLARE_SERIAL( CExtSpinRibbonNode );
CExtSpinRibbonNode(
UINT nCmdIdBasic = 0L,
UINT nCmdIdEffective = 0L,
CExtRibbonNode * pParentNode = NULL,
DWORD dwFlags = 0L,
__EXT_MFC_SAFE_LPCTSTR strTextInToolbar = NULL,
__EXT_MFC_SAFE_LPCTSTR strTextInMenu = NULL,
__EXT_MFC_SAFE_LPCTSTR strTextUser = NULL,
LPARAM lParam = 0L
)
: CExtRibbonNode(
nCmdIdBasic,
nCmdIdEffective,
pParentNode,
dwFlags,
strTextInToolbar,
strTextInMenu,
strTextUser,
lParam
)
{
RibbonILE_RuleArrayGet().RemoveAll();
}
CExtSpinRibbonNode( CExtSpinRibbonNode & other )
: CExtRibbonNode( other )
{
RibbonILE_RuleArrayGet().RemoveAll();
}
virtual ~CExtSpinRibbonNode()
{
}
virtual CRuntimeClass * _OnRibbonGetButtonRTC()
{
ASSERT_VALID( this );
//RibbonILE_RuleArrayGet().RemoveAll();
return RUNTIME_CLASS( CExtBarSpinButton );
}
}; How to use CExtBarSpinButton in RibbonBar ? thanks.
|
|
JM Kwon
|
Nov 3, 2009 - 7:56 PM
|
Thank your help very much.
There are however a few problems. 1. __ECTN_TBB_TEXT_FIELD | __ECTN_TBB_DATE 2. pCmdScreenTip = new CExtCustomizeCmdScreenTip;
pCmdScreenTip->CaptionMainSet( _T("Font Size") );
pCmdScreenTip->TextMainSet( _T("Change then font size.") ); 3. Spin UP, Dwon Event. in CExtBarSpinButton. Thanks.
|
|
Technical Support
|
Nov 5, 2009 - 2:48 AM
|
The CExtBarSpinButton::SetPos() method is virtual. You can catch the position changing event.
|
|
Technical Support
|
Nov 2, 2009 - 5:20 AM
|
You need the following updated version of the CExtBarSpinButton class. Here is the class declaration:
/////////////////////////////////////////////////////////////////////////////
// CExtBarSpinButton
class __PROF_UIS_API CExtBarSpinButton : public CExtBarTextFieldButton
{
public:
DECLARE_DYNCREATE( CExtBarSpinButton );
CExtBarSpinButton(
INT nTextFieldWidth = __EXT_MENU_DEF_INPLACE_EDIT_WIDTH,
CExtToolControlBar * pBar = NULL,
UINT nCmdID = ID_SEPARATOR,
UINT nStyle = 0
);
virtual ~CExtBarSpinButton();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
public:
virtual INT SetPos( INT nPos );
virtual INT GetPos() const;
virtual void SetRange( INT nLower, INT nUpper );
virtual void GetRange( INT & nLower, INT & nUpper ) const;
virtual INT SetStep( INT nStep );
virtual INT GetStep() const;
protected:
mutable CExtSafeString m_strTextCache;
INT m_nRangeLower, m_nRangeUpper, m_nPos, m_nStep;
CRect m_rcButtonUp, m_rcButtonDown;
virtual void _UpdateSpinRectParts();
bool m_bButtonUpHovered:1, m_bButtonDownHovered:1, m_bButtonUpPressed:1, m_bButtonDownPressed:1;
virtual void _TrackSpinPressing();
virtual void _SetTrackPos( INT nPos );
public:
virtual bool IsAbleToTrackMenu(
bool bCustomizeMode = false
) const;
virtual CRect OnInplaceControlCalcRect(
const RECT & rcBtnArea
) const;
virtual void OnHovering(
CPoint point,
bool & bSuspendTips
);
virtual void OnHover(
CPoint point,
bool bOn,
bool & bSuspendTips
);
virtual void OnClick(
CPoint point,
bool bDown
);
virtual __EXT_MFC_SAFE_LPCTSTR GetFieldText() const;
virtual bool SetFieldText(
__EXT_MFC_SAFE_LPCTSTR sText,
bool bVerify = true
);
virtual bool OnInplaceControlWndProcCall(
LRESULT & lResult,
UINT message,
WPARAM wParam,
LPARAM lParam,
CEdit & wndEdit
);
virtual CSize CalculateLayout(
CDC & dc,
CSize sizePreCalc,
BOOL bHorz
);
virtual void PaintCompound(
CDC & dc,
bool bPaintParentChain,
bool bPaintChildren,
bool bPaintOneNearestChildrenLevelOnly
);
virtual CRect OnCalcSpinButtonsRect(
const RECT & rcBtnArea
) const;
virtual CRect OnCalcSpinButtonsMarginSizes() const;
}; // class CExtBarSpinButton
Here is the class implementation: /////////////////////////////////////////////////////////////////////////////
// CExtBarSpinButton
IMPLEMENT_DYNCREATE(CExtBarSpinButton, CExtBarTextFieldButton)
CExtBarSpinButton::CExtBarSpinButton(
INT nTextFieldWidth, // = __EXT_MENU_DEF_INPLACE_EDIT_WIDTH
CExtToolControlBar * pBar, // = NULL
UINT nCmdID, // = ID_SEPARATOR
UINT nStyle // = 0
)
: CExtBarTextFieldButton( false, nTextFieldWidth, pBar, nCmdID, nStyle )
, m_nRangeLower( 0 )
, m_nRangeUpper( 100 )
, m_nPos( 0 )
, m_nStep( 1 )
, m_rcButtonUp( 0, 0, 0, 0 )
, m_rcButtonDown( 0, 0, 0, 0 )
, m_bButtonUpHovered( false )
, m_bButtonDownHovered( false )
, m_bButtonUpPressed( false )
, m_bButtonDownPressed( false )
{
}
CExtBarSpinButton::~CExtBarSpinButton()
{
}
#ifdef _DEBUG
void CExtBarSpinButton::AssertValid() const
{
CExtBarTextFieldButton::AssertValid();
ASSERT( m_bComboField == false );
}
void CExtBarSpinButton::Dump( CDumpContext & dc ) const
{
CExtBarTextFieldButton::Dump( dc );
}
#endif // _DEBUG
bool CExtBarSpinButton::IsAbleToTrackMenu(
bool bCustomizeMode // = false
) const
{
ASSERT_VALID( this );
bCustomizeMode;
return false;
}
void CExtBarSpinButton::SetRange( INT nLower, INT nUpper )
{
ASSERT_VALID( this );
if( nUpper < nLower )
{
ASSERT( FALSE );
return;
}
if( m_nStep > (nUpper - nLower) )
{
ASSERT( FALSE );
return;
}
m_nRangeLower = nLower;
m_nRangeUpper = nUpper;
m_nPos = m_nRangeLower;
}
void CExtBarSpinButton::GetRange( INT & nLower, INT & nUpper ) const
{
ASSERT_VALID( this );
nLower = m_nRangeLower;
nUpper = m_nRangeUpper;
}
INT CExtBarSpinButton::GetPos() const
{
ASSERT_VALID( this );
return m_nPos;
}
INT CExtBarSpinButton::SetPos( INT nPos )
{
ASSERT_VALID( this );
if( nPos > m_nRangeUpper )
{
ASSERT( FALSE );
return -1;
}
INT nPosOld = m_nPos;
m_nPos = nPos;
m_strTextCache.Format( _T("%d"), m_nPos );
SetFieldText( LPCTSTR(m_strTextCache) );
return nPosOld;
}
INT CExtBarSpinButton::SetStep( INT nStep )
{
ASSERT_VALID( this );
if( nStep > (m_nRangeUpper - m_nRangeLower) )
{
ASSERT( FALSE );
return -1;
}
INT nStepOld = m_nStep;
m_nStep = nStep;
return nStepOld;
}
INT CExtBarSpinButton::GetStep() const
{
ASSERT_VALID( this );
return m_nStep;
}
CRect CExtBarSpinButton::OnCalcSpinButtonsRect( const RECT & rcBtnArea ) const
{
ASSERT_VALID( this );
CRect rcSpinButtonsRect( rcBtnArea );
rcSpinButtonsRect.left =
rcSpinButtonsRect.right - GetBar()->PmBridge_GetPM()->GetSpinButtonWidth( (CObject*)this );
CRect rcMargins;
rcMargins = OnCalcSpinButtonsMarginSizes();
rcSpinButtonsRect.left -= ( rcMargins.left + rcMargins.right );
rcSpinButtonsRect.DeflateRect( rcMargins );
return rcSpinButtonsRect;
}
void CExtBarSpinButton::OnHovering(
CPoint point,
bool & bSuspendTips
)
{
ASSERT_VALID( this );
ASSERT_VALID( m_pBar );
CExtBarTextFieldButton::OnHovering( point, bSuspendTips );
_UpdateSpinRectParts();
bool bButtonUpHoveredPrev = m_bButtonUpHovered;
bool bButtonDownHoveredPrev = m_bButtonDownHovered;
bool bButtonUpHoveredNext = false;
bool bButtonDownHoveredNext = false;
if( (! m_rcButtonUp.IsRectEmpty() )
&& m_rcButtonUp.PtInRect( point )
)
bButtonUpHoveredNext = true;
if( (! m_rcButtonDown.IsRectEmpty() )
&& m_rcButtonDown.PtInRect( point )
)
bButtonDownHoveredNext = true;
m_bButtonUpHovered = bButtonUpHoveredNext;
m_bButtonDownHovered = bButtonDownHoveredNext;
if( bButtonUpHoveredPrev != bButtonUpHoveredNext || bButtonDownHoveredPrev != bButtonDownHoveredNext )
RedrawButton();
}
void CExtBarSpinButton::OnHover(
CPoint point,
bool bOn,
bool & bSuspendTips
)
{
ASSERT_VALID( this );
ASSERT_VALID( m_pBar );
point;
bSuspendTips = false;
bool bDockSiteCustomizeMode =
m_pBar->_IsDockSiteCustomizeMode();
if( bDockSiteCustomizeMode )
return;
if( GetBar()->m_pDockSite == NULL
|| (! GetBar()->m_pDockSite->m_bHelpMode )
)
{
CExtPopupMenuWnd::ITEMCOVERINGNOTIFICATON _icn(
NULL,
this,
bOn
? CExtPopupMenuWnd::ITEMCOVERINGNOTIFICATON::__EICN_SET
: CExtPopupMenuWnd::ITEMCOVERINGNOTIFICATON::__EICN_CANCEL
);
HWND hWndOwn = GetBar()->GetSafeHwnd();
_icn.Notify();
bSuspendTips = _icn.m_bSuspendTips;
if( ! ::IsWindow( hWndOwn ) )
return;
}
_UpdateSpinRectParts();
bool bButtonUpHoveredPrev = m_bButtonUpHovered;
bool bButtonDownHoveredPrev = m_bButtonDownHovered;
bool bButtonUpHoveredNext = false;
bool bButtonDownHoveredNext = false;
if( (! m_rcButtonUp.IsRectEmpty() )
&& m_rcButtonUp.PtInRect( point )
)
bButtonUpHoveredNext = true;
if( (! m_rcButtonDown.IsRectEmpty() )
&& m_rcButtonDown.PtInRect( point )
)
bButtonDownHoveredNext = true;
m_bButtonUpHovered = bButtonUpHoveredNext;
m_bButtonDownHovered = bButtonDownHoveredNext;
if( bButtonUpHoveredPrev != bButtonUpHoveredNext || bButtonDownHoveredPrev != bButtonDownHoveredNext )
RedrawButton();
if( bOn )
{
if( CExtToolControlBar::g_bMenuTracking )
{
// if( ! OnQueryHoverBasedMenuTracking() )
// return;
// OnTrackPopup( point, false, false );
}
else
{
CExtControlBar::stat_SetMessageString(
GetCmdTargetWnd(),
(UINT)(
( // ( ! m_pBar->IsKindOf(RUNTIME_CLASS(CExtMenuControlBar)) )
( ! m_pBar->_IsSimplifiedDropDownButtons() )
&& ( ! IsKindOf(RUNTIME_CLASS(CExtBarContentExpandButton)) )
&& CExtCmdManager::IsCommand( GetCmdID(false) )
)
? GetCmdID(true)
: AFX_IDS_IDLEMESSAGE
)
);
}
CWnd * pCtrl = CtrlGet();
if( pCtrl == NULL
|| (pCtrl->GetStyle() & WS_VISIBLE) == 0
)
((CExtMouseCaptureSink *)m_pBar)->SetCapture( m_pBar->GetSafeHwnd() );
} // if( bOn )
else
{
CExtControlBar::stat_SetMessageString( GetCmdTargetWnd() );
CExtMouseCaptureSink::ReleaseCapture();
} // else from if( bOn )
}
void CExtBarSpinButton::_TrackSpinPressing()
{
ASSERT_VALID( this );
ASSERT_VALID( GetBar() );
if( ! ( m_bButtonUpPressed || m_bButtonDownPressed ) )
return;
_UpdateSpinRectParts();
const UINT nTimerID = 401;
const UINT nTimerEllapse = 100;
INT nPos = GetPos(), nAdvance = m_bButtonUpPressed ? (+GetStep()) : (-GetStep());
CRect rcArea = m_bButtonUpPressed ? m_rcButtonUp : m_rcButtonDown;
CExtToolControlBar * pBar = GetSafeBar();
HWND hWndOwnBar = pBar->GetSafeHwnd();
ASSERT( hWndOwnBar != NULL );
CPoint ptCursor;
::GetCursorPos( &ptCursor );
pBar->ScreenToClient( &ptCursor );
::SetCapture( hWndOwnBar );
::SetTimer( hWndOwnBar, nTimerID, nTimerEllapse, NULL );
bool bStopFlag = false, bSuspendTips = false;
for( MSG msg; ::IsWindow( hWndOwnBar ) && (!bStopFlag); )
{
if( !PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE) )
{
if( ! ::IsWindow( hWndOwnBar ) )
break;
::WaitMessage();
continue;
} // if( !PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE) )
bool bAnalyzeButton = false;
switch( msg.message )
{
case WM_LBUTTONDBLCLK:
case WM_LBUTTONUP:
case WM_RBUTTONDBLCLK:
case WM_RBUTTONDOWN:
case WM_RBUTTONUP:
case WM_MBUTTONDBLCLK:
case WM_MBUTTONDOWN:
case WM_MBUTTONUP:
case WM_CANCELMODE:
case WM_ACTIVATEAPP:
case WM_KEYDOWN:
case WM_KEYUP:
bStopFlag = true;
break;
case WM_CAPTURECHANGED:
if( (HWND)msg.wParam != hWndOwnBar )
bStopFlag = true;
break;
case WM_MOUSEMOVE:
if( ( ! CExtPopupMenuWnd::IsKeyPressed(VK_LBUTTON) )
|| CExtPopupMenuWnd::IsKeyPressed(VK_MBUTTON)
|| CExtPopupMenuWnd::IsKeyPressed(VK_RBUTTON)
|| CExtPopupMenuWnd::IsMenuTracking()
)
{
bStopFlag = true;
break;
}
PeekMessage(&msg,NULL,msg.message,msg.message,PM_REMOVE);
bAnalyzeButton = true;
::GetCursorPos( &ptCursor );
::ScreenToClient( hWndOwnBar, &ptCursor );
break;
case WM_TIMER:
if( ( ! CExtPopupMenuWnd::IsKeyPressed(VK_LBUTTON) )
|| CExtPopupMenuWnd::IsKeyPressed(VK_MBUTTON)
|| CExtPopupMenuWnd::IsKeyPressed(VK_RBUTTON)
|| CExtPopupMenuWnd::IsMenuTracking()
)
{
bStopFlag = true;
break;
}
if( msg.message == WM_TIMER )
{
if( msg.wParam != nTimerID )
break;
} // if( msg.message == WM_TIMER )
PeekMessage(&msg,NULL,msg.message,msg.message,PM_REMOVE);
::GetCursorPos( &ptCursor );
::ScreenToClient( hWndOwnBar, &ptCursor );
OnHovering( ptCursor, bSuspendTips );
if( ! rcArea.PtInRect(ptCursor) )
{
RedrawButton();
continue;
}
nPos += nAdvance;
_SetTrackPos( nPos );
nPos = GetPos();
break;
default:
if( ( ! CExtPopupMenuWnd::IsKeyPressed(VK_LBUTTON) )
|| CExtPopupMenuWnd::IsKeyPressed(VK_MBUTTON)
|| CExtPopupMenuWnd::IsKeyPressed(VK_RBUTTON)
|| CExtPopupMenuWnd::IsMenuTracking()
)
bStopFlag = true;
break;
} // switch( msg.message )
if( bStopFlag )
break;
if( bAnalyzeButton )
{
OnHovering( ptCursor, bSuspendTips );
if( ! rcArea.PtInRect(ptCursor) )
{
RedrawButton();
}
continue;
} // if( bAnalyzeButton )
if( !AfxGetThread()->PumpMessage() )
break;
} // for( MSG msg; ::IsWindow( hWndOwnBar ) && (!bStopFlag); )
if( ! ::IsWindow( hWndOwnBar ) )
return;
::KillTimer( hWndOwnBar, nTimerID );
m_bButtonUpHovered = m_bButtonDownHovered = m_bButtonUpPressed = m_bButtonDownPressed = false;
RedrawButton();
if( ::GetCapture() == hWndOwnBar )
::ReleaseCapture();
}
void CExtBarSpinButton::_SetTrackPos( INT nPos )
{
ASSERT_VALID( this );
ASSERT_VALID( GetBar() );
INT nLower, nUpper;
GetRange( nLower, nUpper );
nPos = max( nPos, nLower );
nPos = min( nPos, nUpper );
if( nPos == GetPos() )
return;
SetPos( nPos );
RedrawButton();
}
void CExtBarSpinButton::OnClick(
CPoint point,
bool bDown
)
{
ASSERT_VALID( this );
ASSERT_VALID( GetBar() );
bool bDockSiteCustomizeMode =
m_pBar->_IsDockSiteCustomizeMode();
if( bDockSiteCustomizeMode )
return;
if( m_bVertDocked
&& (! GetCtrlVisibleVertically() )
)
{
CExtBarButton::OnClick( point, bDown );
return;
}
_UpdateSpinRectParts();
bool bButtonUpHoveredPrev = m_bButtonUpHovered;
bool bButtonDownHoveredPrev = m_bButtonDownHovered;
bool bButtonUpHoveredNext = false;
bool bButtonDownHoveredNext = false;
bool bButtonUpPressedPrev = m_bButtonUpPressed;
bool bButtonDownPressedPrev = m_bButtonDownPressed;
bool bButtonUpPressedNext = false;
bool bButtonDownPressedNext = false;
if( (! m_rcButtonUp.IsRectEmpty() )
&& m_rcButtonUp.PtInRect( point )
)
{
bButtonUpHoveredNext = true;
if( bDown )
bButtonUpPressedNext = true;
}
if( (! m_rcButtonDown.IsRectEmpty() )
&& m_rcButtonDown.PtInRect( point )
)
{
bButtonDownHoveredNext = true;
if( bDown )
bButtonDownPressedNext = true;
}
m_bButtonUpHovered = bButtonUpHoveredNext;
m_bButtonDownHovered = bButtonDownHoveredNext;
m_bButtonUpPressed = bButtonUpPressedNext;
m_bButtonDownPressed = bButtonDownPressedNext;
if( bButtonUpHoveredPrev != bButtonUpHoveredNext || bButtonDownHoveredPrev != bButtonDownHoveredNext
|| bButtonUpPressedPrev != bButtonUpPressedNext || bButtonDownPressedPrev != bButtonDownPressedNext
)
RedrawButton();
if( m_bButtonUpPressed || m_bButtonDownPressed )
{
_TrackSpinPressing();
return;
}
if( bDown )
{
CExtToolControlBar::_CloseTrackingMenus();
CExtControlBar::stat_SetMessageString(
GetCmdTargetWnd(),
(UINT)GetCmdID(false)
);
return;
} // if( bDown )
CExtControlBar::stat_SetMessageString( GetCmdTargetWnd() );
CRect rcButton = Rect();
if( ! m_bTextFieldIsNotEditable )
{
CRect rcTextField = OnInplaceControlCalcRect( rcButton );
if( rcTextField.PtInRect(point) )
{
OnInplaceControlRun();
return;
}
} // if( !m_bTextFieldIsNotEditable )
if( ! IsComboTextField() )
return;
bool bTrackComboPopup = m_bTextFieldIsNotEditable;
if( ! bTrackComboPopup )
{
CRect rcComboDropRect = OnCalcComboDropRect( rcButton );
if( rcComboDropRect.PtInRect(point) )
bTrackComboPopup = true;
}
if( bTrackComboPopup )
OnTrackPopup( point, false, false );
}
CRect CExtBarSpinButton::OnInplaceControlCalcRect( const RECT & rcBtnArea ) const
{
ASSERT_VALID( this );
CRect rcCtrl( rcBtnArea );
CRect rcControlMarginSizes = OnInplaceControlCalcMarginSizes();
rcCtrl.DeflateRect(
rcControlMarginSizes.left,
rcControlMarginSizes.top,
rcControlMarginSizes.right,
rcControlMarginSizes.bottom
);
rcCtrl.right -= GetBar()->PmBridge_GetPM()->GetSpinButtonWidth( (CObject*)this );
CRect rcMargins;
rcMargins = OnCalcSpinButtonsMarginSizes();
rcCtrl.right -= ( rcMargins.left + rcMargins.right );
return rcCtrl;
}
__EXT_MFC_SAFE_LPCTSTR CExtBarSpinButton::GetFieldText() const
{
ASSERT_VALID( this );
LPCTSTR strText = CExtBarTextFieldButton::GetFieldText();
if( strText != NULL && _tcslen(strText) > 0 )
return strText;
m_strTextCache.Format( _T("%d"), GetPos() );
return LPCTSTR(m_strTextCache);
}
bool CExtBarSpinButton::SetFieldText(
__EXT_MFC_SAFE_LPCTSTR sText,
bool bVerify // = true
)
{
ASSERT_VALID( this );
if( bVerify
&& (! OnInplaceControlVerifyTextInput(
NULL,
( GetFieldText() == NULL ) ? _T("") : GetFieldText(),
( sText == NULL ) ? _T("") : sText
)
)
)
return false;
LPCTSTR sNewText = ( sText == NULL ) ? _T("") : sText;
#if (!defined __EXT_MFC_NO_CUSTOMIZE)
CExtCustomizeSite * pSite = m_pBar->GetCustomizeSite();
if( pSite != NULL )
{
CExtCustomizeCmdTreeNode * pNode = GetCmdNode( false );
if( pNode != NULL )
{
ASSERT_VALID( pNode );
pNode->m_sDefInplaceEditBuffer = m_sTextField;
} // m_sTextField
pSite->OnTextFieldInplaceTextSet(
this,
GetCmdNode( false ),
m_sTextField,
sNewText
);
}
else
#endif // (!defined __EXT_MFC_NO_CUSTOMIZE)
{
INT nPos = _ttoi( sNewText );
if( nPos > m_nRangeUpper )
nPos = m_nRangeUpper;
if( nPos < m_nRangeLower )
nPos = m_nRangeLower;
m_nPos = nPos;
TCHAR szBuf[100] = _T("");
memset( szBuf, 0, sizeof(szBuf) );
INT nBufSize = sizeof(szBuf)/sizeof(szBuf[0]);
__EXT_MFC_ITOA( nPos, szBuf, nBufSize, 10 );
m_sTextField = szBuf;
}
if( m_strTextCache != m_sTextField )
{
m_strTextCache = m_sTextField;
INT nPos = _ttoi( sNewText );
if( nPos > m_nRangeUpper )
nPos = m_nRangeUpper;
if( nPos < m_nRangeLower )
nPos = m_nRangeLower;
m_nPos = nPos;
}
return true;
}
bool CExtBarSpinButton::OnInplaceControlWndProcCall(
LRESULT & lResult,
UINT message,
WPARAM wParam,
LPARAM lParam,
CEdit & wndEdit
)
{
ASSERT_VALID( this );
ASSERT_VALID( m_pBar );
#if (!defined __EXT_MFC_NO_CUSTOMIZE)
CExtCustomizeSite * pSite = m_pBar->GetCustomizeSite();
if( pSite != NULL )
return
pSite->OnTextFieldWndProcHook(
lResult,
message,
wParam,
lParam,
wndEdit,
this,
GetCmdNode( false )
);
#endif // (!defined __EXT_MFC_NO_CUSTOMIZE)
lResult;
lParam;
if( message == WM_KEYDOWN )
{
switch( wParam )
{
case VK_DOWN:
case VK_UP:
{
INT nPos = m_nPos;
if( wParam == VK_DOWN )
nPos -= GetStep();
else
nPos += GetStep();
if( nPos > m_nRangeUpper )
nPos = m_nRangeUpper;
if( nPos < m_nRangeLower )
nPos = m_nRangeLower;
TCHAR szBuf[100] = _T("");
memset( szBuf, 0, sizeof(szBuf) );
INT nBufSize = sizeof(szBuf)/sizeof(szBuf[0]);
__EXT_MFC_ITOA(
nPos,
szBuf, nBufSize,
10
);
SetFieldText( szBuf, false );
::SetWindowText( wndEdit, szBuf );
return true;
}
break;
}
}
return false;
}
CRect CExtBarSpinButton::OnCalcSpinButtonsMarginSizes() const
{
ASSERT_VALID( this );
return GetBar()->PmBridge_GetPM()->GetSpinButtonMargins( (CObject*) this );
}
CSize CExtBarSpinButton::CalculateLayout(
CDC & dc,
CSize sizePreCalc,
BOOL bHorz
)
{
ASSERT_VALID( this );
ASSERT_VALID( m_pBar );
ASSERT_VALID( (&dc) );
CSize szActiveSize = CExtBarTextFieldButton::CalculateLayout( dc, sizePreCalc, bHorz );
_UpdateSpinRectParts();
return szActiveSize;
}
void CExtBarSpinButton::_UpdateSpinRectParts()
{
ASSERT_VALID( this );
CRect rcButton = Rect();
CRect rcSpinButtonsRect = OnCalcSpinButtonsRect( rcButton );
m_rcButtonUp = m_rcButtonDown = rcSpinButtonsRect;
m_rcButtonUp.bottom = m_rcButtonUp.top + (rcSpinButtonsRect.Height() / 2);
m_rcButtonDown.top = m_rcButtonUp.bottom;
}
void CExtBarSpinButton::PaintCompound(
CDC & dc,
bool bPaintParentChain,
bool bPaintChildren,
bool bPaintOneNearestChildrenLevelOnly
)
{
ASSERT_VALID( this );
ASSERT_VALID( GetBar() );
bool bHorz = IsHorzBarOrientation();
if( ! bHorz )
{
CExtBarButton::PaintCompound( dc, false, bPaintChildren, bPaintOneNearestChildrenLevelOnly );
return;
}
if( ! IsPaintAble( dc ) )
return;
if( AnimationClient_StatePaint( dc ) )
return;
if( bPaintParentChain )
PaintParentChain( dc );
_UpdateSpinRectParts();
CRect rcButton = Rect();
CRect rcTextField = rcButton;
rcTextField.DeflateRect( OnInplaceControlCalcMarginSizes() );
bool bDockSiteCustomizeMode =
m_pBar->_IsDockSiteCustomizeMode();
bool bPushed =
( (!bDockSiteCustomizeMode)
&& ( IsComboPopupDropped()
|| ( CtrlGet() != NULL
&& ( ! IsComboTextField() )
)
)
)
? true : false;
bool bEnabled =
( IsDisabled() && (!bDockSiteCustomizeMode) )
? false : true;
bool bHover =
( (!bDockSiteCustomizeMode)
&& ( IsHover()
|| CtrlGet() != NULL
|| IsComboPopupDropped()
)
)
? true : false;
if( (! bEnabled )
|| ( CExtPopupMenuWnd::IsMenuTracking()
&& (! IsComboPopupDropped() )
)
)
bPushed = bHover = false;
CExtSafeString sText;
if( !IsComboPopupDropped() )
sText = (GetFieldText() == NULL) ? _T("") : GetFieldText();
else
sText = m_sTextInplaceBuffer;
CExtToolControlBar * pBar = GetBar();
if( bEnabled )
{
CExtMenuControlBar * pMenuBar = DYNAMIC_DOWNCAST( CExtMenuControlBar, pBar );
if( pMenuBar != NULL )
{
int nFlatTrackingIndex = pMenuBar->_FlatTrackingIndexGet();
if( nFlatTrackingIndex >= 0 )
{
int nOwnIndex = pBar->_GetIndexOf( this );
if( nOwnIndex == nFlatTrackingIndex )
bHover = true;
} // if( nFlatTrackingIndex >= 0 )
} // if( pMenuBar != NULL )
} // if( bEnabled )
CExtPaintManager::PAINTTOOLBARTEXTFIELDDATA _ptbtfd(
this,
sText,
rcButton,
rcTextField,
IsComboTextField(),
bHover,
bPushed,
bEnabled
);
pBar->PmBridge_GetPM()->PaintToolbarTextField( dc, _ptbtfd );
pBar->PmBridge_GetPM()->PaintSpinButton(
dc,
m_rcButtonUp,
true,
false,
bEnabled,
false,
true,
m_bButtonUpPressed,
m_bButtonUpHovered,
false,// bHotTrack,
this,
0L
);
pBar->PmBridge_GetPM()->PaintSpinButton(
dc,
m_rcButtonDown,
false,
false,
bEnabled,
false,
true,
m_bButtonDownPressed,
m_bButtonDownHovered,
false,// bHotTrack,
this,
0L
);
if( bPaintChildren )
PaintChildren( dc, bPaintOneNearestChildrenLevelOnly );
}
|
|
tera tera
|
Oct 29, 2009 - 11:30 PM
|
|
|
Technical Support
|
Oct 30, 2009 - 2:37 PM
|
Thank you very much for reporting this issue. It’s fixed in the latest Prof-UIS 2.87 source code. You can download it from the same location.
|
|
John Ritzenthaler
|
Oct 29, 2009 - 5:00 PM
|
I wish to display a special dialog when the drop-down button is pressed (not a menu). Is there any way to just get a message?
|
|
John Ritzenthaler
|
Oct 30, 2009 - 5:47 PM
|
This is CExtBarButton in the toolbar, not CExtButton
|
|
Technical Support
|
Oct 31, 2009 - 1:43 PM
|
Please create your CExtBarButton -derived class which implements the CExtBarButton::GetSeparatedDropDown() , CExtBarButton::IsAbleToTrackMenu() and CExtBarButton::OnTrackPopup() virtual methods. First two methods should simply return true flag. Last method should display dialog instead of tracking popup menu. The CExtToolControlBar::OnCreateBarCommandBtn() method creates instances of toolbar buttons. You can override it for instantiating your toolbar button objects for particular command identifiers.
|
|
John Ritzenthaler
|
Oct 30, 2009 - 10:39 AM
|
I tried capturing the g_nMsgPrepareMenu command and setting m_bMenuCanceled but that results in an exception thrown at line 4219 of ExtToolControlBar.cpp when pPopup is deleted. The hWnd for pPopup is 0xfeeefeee (I’m on 2.83)
|
|
Technical Support
|
Oct 30, 2009 - 2:29 PM
|
Please override the CExtButton::_IsMenuAvail() virtual method and simply return true from it. The override the CExtButton::_OnTrackPopup() virtual method and display dialog in it.
|
|
John Ritzenthaler
|
Oct 31, 2009 - 7:06 AM
|
This is CExtBarButton in the toolbar, not CExtButton
|
|
Torsten Schucht
|
Oct 29, 2009 - 9:39 AM
|
I am creating a CExtComboBox dynamically:
CExtComboBox* pCombo = new CExtComboBox();
pCombo->m_bEnableAutoComplete = false;
pCombo->m_bEnableAutoFilter = true;
CRect Rect (110, 50, 300, 200);
DWORD uStyle = WS_CHILD | WS_VISIBLE | WS_TABSTOP | CBS_DROPDOWN | CBS_SORT; //CBS_AUTOHSCROLL;
pCombo->Create( uStyle, Rect, this, 12);
pCombo->ModifyStyleEx(0, WS_EX_NOPARENTNOTIFY);
pCombo->SetFont( CFont::FromHandle( (HFONT)::GetStockObject(DEFAULT_GUI_FONT) ) );
I am unable to make the filter popup list appear while typing. I compared my dynamically created control versus one created via resource. The resource one works just fine. I debugged the dynamic combo box and found out that in the method
CExtComboBoxBase::OnSubclassInnerEdit()
...
HWND hWnd = ::GetWindow( m_hWnd, GW_CHILD );
...
The hWnd is NULL which prevents m_wndInnerEditHook from being subclassed. Which than later in CExtComboBoxBase::OnEditCtrlUpdate()
the inner edit control is NULL and the filterlist is not shown. Is there anything I need to add to my dynamic creation to make this work?
|
|
Technical Support
|
Oct 30, 2009 - 2:35 PM
|
Thank you very much for your test project. It helped us to fix this issue. Please update the source code for the following method:
CEdit * CExtComboBoxBase::OnQueryInnerEditCtrl() const
{
ASSERT_VALID( this );
CEdit * pEdit = NULL;
DWORD dwWndStyle = GetStyle();
DWORD dwComboBoxType = dwWndStyle & 0x0003L;
if( dwComboBoxType != CBS_DROPDOWNLIST )
{
( const_cast < CExtComboBoxBase * > ( this ) ) -> OnSubclassInnerEdit();
if( m_wndInnerEditHook.GetSafeHwnd() != NULL )
pEdit = (CEdit *)&m_wndInnerEditHook;
}
return pEdit;
}
|
|
Torsten Schucht
|
Nov 2, 2009 - 9:59 AM
|
Thanks for the fix. It works just fine!!
|
|
Torsten Schucht
|
Oct 30, 2009 - 3:44 AM
|
Thanks for the information. Unfortunetly that didn’t help. I have created a very simple sample application, which contains a dialog with one dynamic combobox and one created from a resource. The one created from the resource behaves in the way I would like to have the dynamic one. I’ll send you the zipped solution via email.
|
|
Technical Support
|
Oct 29, 2009 - 2:27 PM
|
Your combo box is not based on the CBS_HASSTRINGS style. The CExtComboBox class does not know which text lines should be displayed in the filter popup list box.
|
|
Torsten Schucht
|
Oct 29, 2009 - 9:25 AM
|
CExtComboBox* pCombo = new CExtComboBox();
pCombo->m_bEnableAutoComplete = false;
pCombo->m_bEnableAutoFilter = true;
CRect Rect (110, 50, 300, 200);
DWORD uStyle = WS_CHILD | WS_VISIBLE | WS_TABSTOP;
uStyle |= CBS_DROPDOWN | CBS_SORT; //CBS_AUTOHSCROLL;
pCombo->Create( uStyle, Rect, this, 12);
pCombo->ModifyStyleEx(0, WS_EX_NOPARENTNOTIFY);
pCombo->SetFont( CFont::FromHandle( (HFONT)::GetStockObject(DEFAULT_GUI_FONT) ) );
|
|
Torsten Schucht
|
Oct 29, 2009 - 9:26 AM
|
Forget this entry !! I have accidentally posted this..sorry.
|
|
tera tera
|
Oct 29, 2009 - 1:30 AM
|
|
|
Technical Support
|
Nov 2, 2009 - 9:08 AM
|
You can create the frame window with the WS_CHILD style and use this frame as a page window. As a result, the splitter mode bar will become part of tab page.
|
|
tera tera
|
Nov 3, 2009 - 6:26 PM
|
Every tab, page content is different.
Can you stick a docking bar on the specific dialog inside? I want a sample.....
|
|
Technical Support
|
Oct 30, 2009 - 2:37 PM
|
This the default behavior of the splitter window. You have a reason to switch using resizable control bar without caption and with disabled re-docking behavior. You can simply dock such bar to the bottom and it will work like splitter. Additionally, resizable bars support the state persistence. I.e. you can save restore bar location and sizes.
|
|
tera tera
|
Nov 1, 2009 - 6:13 PM
|
In this example 1, I stick a tab1 in a dialog.
2, I stick a dialog2 in a tab1. In a dialog, CExtContorlBar is not stuck?
|
|
Borremans Pierre
|
Oct 28, 2009 - 2:13 AM
|
I want to have in my menu icones with a size of 16*16 and in my Cextoolcontrolbar icones with a size of 32*32. The ressource ID in my menu and in my cextoolcontrolbar must be the same. Is there any solution
|
|
Borremans Pierre
|
Nov 18, 2009 - 4:13 AM
|
Thanks for your help, I found a solution. I overdrive the CalculateLayout and PaintCompound from the CExtBarButton class and It works.
|
|
Technical Support
|
Nov 10, 2009 - 2:33 PM
|
1) Use DestroyIcon() Win32 API for destroying HICON handles. Invoking the DeleteObject() instead of it can even crash Windows.
2) Add the CExtCmdIcon m_icon; property to your toolbar button class and return a pointer it from the GetIconPtr() method.
|
|
Technical Support
|
Oct 28, 2009 - 9:44 AM
|
Prof-UIS supports only one icon for each one command identifier. So, it’s much easier to use different identifiers for menu items and toolbar buttons because you can simply add two message map entries for menu command / toolbar button and connect them to one handler method. But it’s also possible to use the same command identifiers for menu items and toolbar buttons and provide toolbar buttons with a bigger images at a same time. You can use your own CExtToolControlBar -derived class which implements the CExtToolControlBar::OnCreateBarCommandBtn() virtual method. Your virtual method should be similar to original, but it should instantiate You can use your own CExtBarButton -derived class. As result your application will use your toolbar class and each toolbar will contains buttons of your toolbar button class type. This CExtBarButton -derived class should implement CExtBarButton::GetIconPtr() virtual method for providing toolbar buttons with custom icons.
|
|
Borremans Pierre
|
Nov 10, 2009 - 7:59 AM
|
I try this but the icon in my mainframe menu change to 32*3. Where is my error ?
class CUI_ToolBar :
public CExtToolControlBar
{
public:
class CMyButtonToolBar : public CExtBarButton
{
public:
CMyButtonToolBar(
CExtToolControlBar * pBar, // = NULL
UINT nCmdID, // = ID_SEPARATOR
UINT nStyle // = 0
): CExtBarButton(pBar, nCmdID, nStyle)
{
}
virtual CExtCmdIcon * GetIconPtr()
{
CExtCmdIcon* pTmpIcon = __super::GetIconPtr();
if(pTmpIcon)
{
HICON hSomeNewIcon = (HICON) ::LoadImage(::AfxGetResourceHandle(), MAKEINTRESOURCE(501), IMAGE_ICON, 32,32,0);
pTmpIcon->AssignFromHICON(hSomeNewIcon, true, false);
DeleteObject(hSomeNewIcon);
}
return pTmpIcon;
}
};
virtual CExtBarButton * OnCreateBarCommandBtn(UINT nCmdID, UINT nStyle = 0)
{
ASSERT_VALID( this );
CExtBarButton * pTBB = new CMyButtonToolBar( this, nCmdID, nStyle );
ASSERT_VALID( pTBB );
return pTBB;
}
};
|
|
Eric Houvenaghel
|
Oct 27, 2009 - 12:57 PM
|
In the Report Grid, I am wondering if there is a good way of doing the following:
Basically, we would like the cell comparison, when grouping, to be based on one format.
And the comparison, when sorting, to be based on a second format.
This would be very easy to do if I knew what action triggered the ReportSortOrderUpdate (i.e. grouping or sorting).
I could then put an if statement in the cell’s TextGet method which is used by the Compare method:
if(IsGrouping) {
// Use grouping format.
...
}
else {
// Use sorting and filtering format.
...
}
Here is what we would like to see after grouping: 
|
|
Technical Support
|
Oct 30, 2009 - 2:36 PM
|
We added the following comparison reason enumeration and virtual method into the CExtGridCell class:
enum e_grid_cell_comparison_type_t
{
__EGCCT_UNKNOWN = -1,
__EGCCT_CELL_CLASS_OPERATOR_EQUALITY = 0,
__EGCCT_CELL_CLASS_OPERATOR_INEQUALITY = 1,
__EGCCT_CELL_CLASS_OPERATOR_LESS = 2,
__EGCCT_CELL_CLASS_OPERATOR_LESS_OR_EQUAL = 3,
__EGCCT_CELL_CLASS_OPERATOR_GREATER = 4,
__EGCCT_CELL_CLASS_OPERATOR_GREATER_OR_EQUAL = 5,
__EGCCT_GENERIC_GRID_SORTING = 6,
__EGCCT_TREE_GRID_SORTING = 7,
__EGCCT_REPORT_GRID_GROUPING = 8,
__EGCCT_FORMULA_ATOM_COMPUTATION = 9,
__EGCCT_PROPERTY_GRID_EMPTY_MIXED_STATE_DETECTION = 10,
__EGCCT_PROPERTY_GRID_MODIFIED_STATE_DETECTION = 11,
};
virtual int CompareEx(
e_grid_cell_comparison_type_t eGCCT,
const CExtGridCell & other,
DWORD dwStyleMask = __EGCS_COMPARE_MASK,
DWORD dwStyleExMask = __EGCS_EX_COMPARE_MASK,
LPARAM lParamCompareEx = 0L // user defined value
) const;
By default, the into the CExtGridCell::CompareEx() method simply invokes the CExtGridCell::Compare() method. But all the sort-able algorithms in all the Prof-UIS grids are invoking the CExtGridCell::CompareEx() method. You can drop us an e-mail to the support mail box at this web site and we will provide you with the source code update download information.
|
|
Eric Houvenaghel
|
Oct 27, 2009 - 2:55 PM
|
Yes CExtGridCell::CompareEx() would be nice. Would this be in 2.87? When do you expect 2.87? Thanks
|
|
Technical Support
|
Oct 27, 2009 - 2:32 PM
|
Thank you for the interesting version. The CExtGridCell::Compare() virtual method is used both for sorting and grouping in the report grid control. This virtual method is invoked for all the grid cells. You can create your own date/time grid cell which implements this virtual method. Your grid cell class should know pointer to the report grid control. This will let it to query the report grid for the sorting/grouping rules and choose the comparison type. This approach will work, but we think it’s not effective and may be really slow. So, we think your question is the feature request for implementing the new CExtGridCell::CompareEx() virtual method. This new virtual method should be similar to the existing CExtGridCell::Compare() method. The new method should have an additional DWORD dwComparisonFlags parameter and the report grid should let the method information about whether the comparison is invoked for sorting or grouping.
|
|
tera tera
|
Oct 26, 2009 - 1:41 AM
|
Hello. I widen a message column to the right side of the grid.
Display becomes abnormal afterwards when I return a message column to the left. http://ifreeta.dee.cc/20091026/Untitled.html switch ( iCnt ){
case EITEM_CHK:
case EITEM_NO:
case EITEM_TYPE:
case EITEM_KAISETU:
pMuGridCellHeader1->ExtentPercentSet( 0.0 );
break;
case EITEM_MES:
pMuGridCellHeader1->ExtentPercentSet( 1.0 );
break;
}
Had better the sample source prepare, too?
|
|
Technical Support
|
Oct 27, 2009 - 2:32 PM
|
Please try this improved version: INT nCurrentItemExtent; // THIS LINE WAS ADDED
pMuGridCellHeader1->ExtentGet( nCurrentItemExtent, 0 ); // THIS LINE WAS ADDED
switch ( iCnt ){
case EITEM_CHK:
case EITEM_NO:
case EITEM_TYPE:
case EITEM_KAISETU:
pMuGridCellHeader1->ExtentPercentSet( 0.0 );
pMuGridCellHeader1->ExtentSet( nCurrentItemExtent, -1 ); // THIS LINE WAS ADDED
pMuGridCellHeader1->ExtentSet( nCurrentItemExtent, +1 ); // THIS LINE WAS ADDED
break;
case EITEM_MES:
pMuGridCellHeader1->ExtentPercentSet( 1.0 );
break;
}
}
|
|
tera tera
|
Oct 27, 2009 - 8:49 PM
|
The program worked normally.
However, I was not able to coordinate the width of the cell........ I assume it completion first of all. Thank you.
|
|
Technical Support
|
Oct 26, 2009 - 2:18 PM
|
Please specify the equal minimal/current/maximal pixel width for all the non-scaled columns in your grid window using the CExtGridCell::ExtentSet() method.
|
|
tera tera
|
Oct 26, 2009 - 6:54 PM
|
//-----------------------------------------------------
/**
* @brief
*/
//-----------------------------------------------------
void CNxfErrorListSelGrid::InitGrid()
{
ASSERT_VALID( this );
ASSERT( GetSafeHwnd() != NULL && ::IsWindow(GetSafeHwnd()) ); MgdGroupSetUp(); LOGFONT lf; // Used to create the CFont.
memset(&lf, 0, sizeof(LOGFONT)); // Clear out structure.
strcpy(lf.lfFaceName, "MS ゴシック"); lf.lfHeight = 12;
lf.lfWeight = FW_NORMAL;
lf.lfOutPrecision = OUT_DEFAULT_PRECIS;
lf.lfClipPrecision = CLIP_DEFAULT_PRECIS;
lf.lfQuality = DEFAULT_QUALITY;
lf.lfCharSet = SHIFTJIS_CHARSET;
lf.lfPitchAndFamily = FIXED_PITCH;
m_font.CreateFontIndirect(&lf); SetFont(&m_font); lf.lfHeight = 10;
m_fontButton.CreateFontIndirect(&lf); //------------------------------------
SiwModifyStyle(
0
|__ESIS_STH_NONE
|__ESIS_STV_ITEM
|__EGBS_SFM_FULL_ROWS
|__EGBS_RESIZING_CELLS_OUTER_H
|__EGBS_SF_SELECT_OUTER_ROWS
|__EGBS_SUBTRACT_SEL_AREAS
|__EGBS_DYNAMIC_RESIZING
|__EGBS_MULTI_AREA_SELECTION
|__EGBS_NO_HIDE_SELECTION
|__EGBS_GRIDLINES
|__EGBS_LBEXT_SELECTION
,
0
,
false
);
//------------------------------------
SiwModifyStyleEx(
0
|__EGBS_EX_CELL_TOOLTIPS_OUTER
|__EGBS_EX_CORNER_AREAS_CURVE
,
0,
false
);
BseModifyStyle(
__EGWS_BSE_SORT_MULTIPLE_COLUMNS
| __EGWS_BSE_BUTTONS_IN_FOCUSED_CELL
| __EGWS_BSE_BUTTONS_IN_FOCUSED_ROW
| __EGWS_BSE_BUTTONS_IN_HOVERED_CELL
| __EGWS_BSE_BUTTONS_IN_HOVERED_ROW
| __EGWS_BSE_BUTTONS_IN_SELECTED_CELLS
| __EGWS_BSE_BUTTONS_IN_SELECTED_ROW
,
__EGWS_BSE_DEFAULT
,
false
);
//------------------------------------
BseModifyStyleEx(
__EGBS_BSE_EX_DRAG_COLUMNS
|__EGBS_BSE_EX_HIGHLIGHT_PRESSING_COLUMNS_OUTER
| __EGBS_BSE_EX_DBLCLK_BEST_FIT_COLUMN_MEASURE_INNER
| __EGBS_BSE_EX_DBLCLK_BEST_FIT_AVAILABLE
| __EGBS_BSE_EX_DBLCLK_BEST_FIT_COLUMN_MEASURE_OUTER
|__EGBS_BSE_EX_PROPORTIONAL_COLUMN_WIDTHS
,
__EGWS_BSE_EX_DEFAULT
,
false
); RowRemoveAll ( false );
ColumnRemoveAll ( false ); // カラム初期設定
OuterRowCountTopSet ( 1L, false ); OuterColumnCountLeftSet ( 1L, false );
OuterColumnWidthSet ( true, 0, 20 ); OuterTitleMake(); BestFitColumnAll(); ModifyStyle( 0, WS_CLIPCHILDREN | WS_CLIPSIBLINGS );
}
int CNxfErrorListSelGrid::_ColMax()
{
return 5;
} void CNxfErrorListSelGrid::OuterTitleMake()
{
CExtGridCellHeader *pMuGridCellHeader1;
int iCol = 0; // カラム数を設定
ColumnAdd ( _ColMax() , false); /// タイトル
CString csStr;
int iCnt;
int iSize; iSize = 50;
bool blFlag = false;
for ( iCnt = 0 ; iCnt < _ColMax() ; iCnt++ ){
blFlag = true; switch ( iCnt ){
case EITEM_CHK:
iSize = 8;
break;
case EITEM_NO:
iSize = 15;
break;
case EITEM_TYPE:
iSize = 30;
break;
case EITEM_MES:
iSize = 400;
blFlag = false;
break;
case EITEM_KAISETU:
iSize = 40;
break;
} pMuGridCellHeader1 = STATIC_DOWNCAST(
CExtGridCellHeader,
GridCellGetOuterAtTop(
iCnt ,
0 ,
RUNTIME_CLASS(CExtGridCellHeader)
)
);
pMuGridCellHeader1->ExtentSet ( iSize );
pMuGridCellHeader1->TextSet( csStr );
pMuGridCellHeader1->ModifyStyle( __EGCS_TA_HORZ_CENTER ); //
switch ( iCnt ){
case EITEM_CHK:
case EITEM_NO:
case EITEM_TYPE:
case EITEM_KAISETU:
pMuGridCellHeader1->ExtentPercentSet( 0.0 );
break;
case EITEM_MES:
pMuGridCellHeader1->ExtentPercentSet( 1.0 );
break;
}
} }
Is the necessary information good only in this?
|
|
tera tera
|
Oct 26, 2009 - 6:39 PM
|
|
|
tera tera
|
Oct 23, 2009 - 1:34 AM
|
|
|
Technical Support
|
Oct 23, 2009 - 12:47 PM
|
The identifier auto-changing is not well compatible with the design of the ribbon bar control, especially if the button displays the text. We implemented only the basic identifier auto-changing feature in the ribbon bar. The ribbon bar currently does not support the layout re-calculation if your auto-changeable commands use texts with different widths in pixels. Your issue report is really the feature request. We can do this after release of Prof-UIS 2.87.
|
|
tera tera
|
Oct 23, 2009 - 10:13 PM
|
|
|
Technical Support
|
Oct 24, 2009 - 9:40 AM
|
This is not a custom development task and you should not pay anything for it. This is a feature request and we would be happy to implement a better ribbon buttons with auto-change-able command identifiers and text. But we are currently overloaded with 2.87 release. We can do this work just a few weeks later.
|
|
tera tera
|
Oct 25, 2009 - 6:27 PM
|
After program revision completion, please tell me.
Give my best regards.
|
|
Richard Rodruck
|
Oct 22, 2009 - 3:11 PM
|
After converting from 2.85 to 2.87 the menu item for theme switching doesn’t appear. There is just the placeholder.
|
|
Technical Support
|
Oct 23, 2009 - 12:42 PM
|
Thank you for reporting us this issue. We fixed it. You can re-download Prof-UIS 2.87 from the same location.
|
|
Offer Har
|
Oct 21, 2009 - 4:04 AM
|
Hi, I have a tab control object in a dialog (CExtTabPageContainerWnd ). In 2.84 This call in OnInitDialog returned the tab window so I could update the tab’s attributes:
CExtTabWnd* pTabWnd = m_tab.GetSafeTabWindow(); The same code in 2.87 returns NULL, so I cannot set the attributes of the tabs anymore. Please fix. Thanks, Ron.
|
|
Technical Support
|
Oct 22, 2009 - 12:45 PM
|
The CExtTabPageContainerWnd control now creates the tab window dynamically. For example, it’s created when the first page window is inserted into the tab page container. This is needed for avoiding conflicts with MFC window creation hooking mechanism. You can invoke the GetSafeTabWindow() API after page insertions.
|
|
Offer Har
|
Oct 22, 2009 - 1:08 PM
|
Dear Support, 1. This is very problematic, as it breaks down a lot of already working code we have in many product. We moved to 2.87 only because the grid printing in 2.84 has bugs. 2. If I want the tab to be on top and have a close button, I don’t want to do it after the tab is added, I want to do it before - it does not make sense to have the tab created on the bottom just to move it up in the next line of code. 3. We have a dynamic tabs mechanism - the user can add and remove tabs as we wants. What will happen if he removes all the tabs? will you destroy the CExtTabPageContainerWnd ’s CExtTabWnd ? will we have to add special handling for this case and re-initialize the CExtTabPageContainerWnd ’s CExtTabWnd each time the last tab was removed and a new one is added? 4. Will this affect the MDI tab container as well? I urge you to remove this feature or at least give a different mechanism for storing tab attributes inside the CExtTabPageContainerWnd and pass them to the CExtTabWnd yourself, when you create it so that existing code will not break and crash. Thanks, Ron.
|
|
Technical Support
|
Oct 23, 2009 - 12:40 PM
|
We agree that such improvements must be 100% compatible with the previous code versions. This improvement is related to the tab page containers only. It’s not related to simple and MDI tab controls. We found the solution which makes the new tab page containers compatible with previous. Please update the source code for the following method:
CExtTabWnd * CExtTabPageContainerWnd::GetSafeTabWindow()
{
ASSERT_VALID( this );
VERIFY( _CreateHelper() );
if( m_pWndTab == NULL )
return NULL;
ASSERT_VALID( m_pWndTab );
if( m_pWndTab->GetSafeHwnd() == NULL )
return NULL;
return m_pWndTab;
}
|
|
tera tera
|
Oct 20, 2009 - 3:40 AM
|
|
|
Technical Support
|
Oct 20, 2009 - 9:33 AM
|
We cannot reproduce this issue in the RibbonBar and RibbonBarMDI sample applications. Could you please suggest us which actions/steps should we do to make the main frame window non-close-able from the first attempt?
|
|
tera tera
|
Oct 21, 2009 - 11:42 PM
|
|
|
Technical Support
|
Oct 22, 2009 - 12:50 PM
|
We reproduced this issue in your test project only. But it’s not possible to reproduce it even in your project if there are no MDI child frames open.
It occurs only if the Close menu command in the system menu is clicked by mouse. If we select the Close menu command with keyboard, then the main frame window closes OK.
Interesting thing, that the main frame’s window procedure receives the WM_SYSCOMMAND message with the WPARAM parameter set to SC_CLOSE and passes this message to the default window procedure. But the last procedure does not generate the WM_CLOSE message on this system command.
We just want to notify you we are still working on this problem.
|
|
tera tera
|
Oct 19, 2009 - 12:18 AM
|
Hello. m_pSelGrid->SelectionIsEmpty() Though a cell is not chosen
SelectionIsEmpty becomes true.
Is it a bug?
Is it specifications? 
|
|
Technical Support
|
Oct 19, 2009 - 8:28 AM
|
Here is the source code of the CExtGridBaseWnd::SelectionIsEmpty() method:
bool CExtGridBaseWnd::SelectionIsEmpty() const
{
ASSERT_VALID( this );
return ( SelectionGetAreaCount() == 0) ? true : false;
}
It simply returns the true flag if the selection region consists of zero rectangle count. Your grid excludes intersected rectangles and uses full row selection model. You should use methods like CExtGridBaseWnd::SelectionGetFirstRowInColumn() / CExtGridBaseWnd::SelectionGetNextRowInColumn() to detect whether at least one row is selected.
|
|
tera tera
|
Oct 18, 2009 - 11:53 PM
|
Hello. pNode->ModifyFlags(
__ECTN_DISPLAY_TEXT_AND_IMAGE|
__ECTN_TBB_AUTOCHANGE_ID |
__ECTN_TBB_SEPARATED_DROPDOWN
); 1, I add the item of the list of drop-downs of the ribbon to QTA.
2, I reboot application.
3, The text of the drop-down is not displayed
Support please. 
http://ifreeta.dee.cc/20091019/movie.html
|
|
Technical Support
|
Oct 20, 2009 - 11:55 AM
|
The buttons in the quick access toolbar never display text. Even if the text is assigned to the button, then the cloned copy of it inside the quick access toolbar have the force empty text.
|
|
tera tera
|
Oct 20, 2009 - 6:13 PM
|
I want to show a solution.
I am troubled.
|
|
Timo Stripf
|
Oct 17, 2009 - 7:39 AM
|
Hi, i have a SDI Application with DynamicControlBars on it. When i save and restore the state of it, then i get a non ordered tabpagecointer.
Example
Page 1 | Page 2 | Page 3
now i drag Page1 after Page3
Page 2 | Page 3 | Page 1
when i save this state and restart the application is the order the same as before. The same problem is, when i close a tab and restore it over the menu or with OnCmdMsgOnBar, then it is not on the same position.
Is this with intent or is a problem of the framework himself?
|
|
Technical Support
|
Oct 26, 2009 - 2:18 PM
|
If all the windows inside a tab page container of your SDI application are resizable bars, then Prof-UIS can identify the selected tab page and restore it on restart. But Prof-UIS assumes the tab page container may contain page windows which are not related to the dynamic resizable control bars switched into the tabbed document mode. The same problem exists in the MDI environment with the dynamic resizable control bars. That’s why we didn’t implemented the selection persistence in the tab page container. We can implement it, but only in the particular case when there are no tab pages which are not dynamic bars. The 100% working solution for all the types of tab pages is to save/restore the selected page index in scope of your project’s code.
|
|
Timo Stripf
|
Oct 25, 2009 - 1:26 PM
|
Thanks for the great fix, but the Problem is not fixed completly. The sort works perfekt now, but the selected tab is not the same, after restart. I think it is better to see the same overview after every restart. I can save it by myself, but i think, it is better if the framework support it by default. Is the same procedure like visual studio.
|
|
Technical Support
|
Oct 20, 2009 - 9:48 AM
|
Thank you for reporting us this issue. To fix it, please update the source code for the following method:
bool CExtDynamicBarSite::StateSerialize(
CArchive & ar,
bool bEnableThrowExceptions // = false
)
{
ASSERT( this != NULL );
DWORD dwGeneralFlags = 0;
DWORD dwReserved = 0L;
try
{
if( ar.IsStoring() )
{
ar << dwGeneralFlags;
ar << dwReserved;
ar << dwReserved;
ar << dwReserved;
ar << dwReserved;
DWORD dwCount = (DWORD)BarEnumGetCount();
ar << dwCount;
POSITION pos = BarEnumGetStartPosition();
for( ; pos != NULL; )
{
CExtDynamicControlBar * pBar =
BarEnumGetNext( pos );
ASSERT_VALID( pBar );
bool bVisibleState = false;
if( pBar->BarStateGet( &bVisibleState ) == CExtDynamicControlBar::__EDBS_DOCUMENT )
{
if( bVisibleState )
{
ASSERT( m_listBarsInDocMode.Find( pBar ) != NULL );
continue;
}
}
ASSERT( m_listBarsInDocMode.Find( pBar ) == NULL );
UINT nCmdID = (UINT)pBar->GetDlgCtrlID();
ar << DWORD(nCmdID);
bool bPersistentBar = pBar->IsPersistentBar();
DWORD dwSerializeFlags = 0;
if( bPersistentBar )
dwSerializeFlags |= 0x01;
ar << dwSerializeFlags;
if( ! bPersistentBar )
{
CRuntimeClass * pRTC = pBar->GetRuntimeClass();
ASSERT( pRTC != NULL );
ar.WriteClass( pRTC );
} // if( ! bPersistentBar )
ar << pBar->m_strCaptionText;
pBar->m_icon.Serialize( ar );
pBar->OnSerializeDynamicProps( ar );
} // for( ; pos != NULL; )
CTypedPtrList < CPtrList, CExtDynamicControlBar * > _listSerialize;
bool bUseDefaultOrder = true;
CExtDynamicBarSite::eDetectedUiType_t eDUIT = GetDetectedUiType();
eDUIT;
#if (!defined __EXT_MFC_NO_TABMDI_CTRL)
if( eDUIT == __EDUIT_MDI_WITH_TABS )
{ // detect MDI order using tabs
CExtTabWnd * pTabs = GetMdiTabs();
if( pTabs != NULL )
{
LONG nIndex, nCount = pTabs->ItemGetCount();
for( nIndex = 0L; nIndex < nCount; nIndex ++ )
{
HWND hWnd = (HWND)pTabs->ItemGet( nIndex )->LParamGet();
CWnd * pWndPremanent = CWnd::FromHandlePermanent( hWnd );
if( pWndPremanent == NULL )
continue;
CExtDynamicMDIChildWnd * pWndMdiChild = DYNAMIC_DOWNCAST( CExtDynamicMDIChildWnd, pWndPremanent );
if( pWndMdiChild == NULL )
continue;
if( pWndMdiChild->GetBarSite() != this )
continue;
CExtDynamicControlBar * pBar = pWndMdiChild->GetBar();
if( pBar == NULL )
continue;
if( m_listBarsInDocMode.Find( pBar ) == NULL )
continue;
_listSerialize.AddTail( pBar );
} // for( nIndex = 0L; nIndex < nCount; nIndex ++ )
if( _listSerialize.GetCount() == m_listBarsInDocMode.GetCount() )
bUseDefaultOrder = false;
else
_listSerialize.RemoveAll();
} // if( pTabs != NULL )
} // detect MDI order using tabs
#endif // (!defined __EXT_MFC_NO_TABMDI_CTRL)
#if (!defined __EXT_MFC_NO_TAB_PAGECONTAINER_CTRL)
if( eDUIT == __EDUIT_SDI_TAB_PAGE_CONTAINER )
{ // detect document mode order using SDI tab page container
CExtTabPageContainerWnd * pWndTabPageContainer = GetTabPageContainer();
if( pWndTabPageContainer->GetSafeHwnd() != NULL )
{
ASSERT_VALID( pWndTabPageContainer );
CTypedPtrList < CPtrList, CExtDynamicControlBar * > _listFound;
INT nIndex = 0, nCount = pWndTabPageContainer->PageGetCount();
for( nIndex = 0; nIndex < nCount; nIndex ++ )
{
HWND hWndPage = pWndTabPageContainer->PageHwndGetSafe( nIndex );
if( hWndPage == NULL )
continue;
CExtDynamicControlBar * pBar = BarFindByChildHWND( hWndPage );
if( pBar == NULL )
continue;
ASSERT_VALID( pBar );
#ifdef _DEBUG
bool bVisibleState = false;
ASSERT( pBar->BarStateGet( &bVisibleState ) == CExtDynamicControlBar::__EDBS_DOCUMENT );
ASSERT( bVisibleState );
#endif // _DEBUG
if( m_listBarsInDocMode.Find( pBar ) == NULL )
continue;
_listSerialize.AddTail( pBar );
}
if( _listSerialize.GetCount() == m_listBarsInDocMode.GetCount() )
bUseDefaultOrder = false;
else
_listSerialize.RemoveAll();
}
} // detect document mode order using SDI tab page container
#endif // (!defined __EXT_MFC_NO_TAB_PAGECONTAINER_CTRL)
if( bUseDefaultOrder )
_listSerialize.AddTail( &m_listBarsInDocMode );
//pos = m_listBarsInDocMode.GetTailPosition();
pos = _listSerialize.GetTailPosition();
for( ; pos != NULL; )
{
//CExtDynamicControlBar * pBar = m_listBarsInDocMode.GetPrev( pos );
CExtDynamicControlBar * pBar = _listSerialize.GetPrev( pos );
ASSERT_VALID( pBar );
ASSERT( pBar->BarStateGet() == CExtDynamicControlBar::__EDBS_DOCUMENT );
UINT nCmdID = (UINT)pBar->GetDlgCtrlID();
ar << DWORD(nCmdID);
bool bPersistentBar = pBar->IsPersistentBar();
DWORD dwSerializeFlags = 0;
if( bPersistentBar )
dwSerializeFlags |= 0x01;
ar << dwSerializeFlags;
if( ! bPersistentBar )
{
CRuntimeClass * pRTC = pBar->GetRuntimeClass();
ASSERT( pRTC != NULL );
ar.WriteClass( pRTC );
} // if( ! bPersistentBar )
ar << pBar->m_strCaptionText;
pBar->m_icon.Serialize( ar );
pBar->OnSerializeDynamicProps( ar );
} // for( ; pos != NULL; )
} // if( ar.IsStoring() )
else
{
ar >> dwGeneralFlags;
ar >> dwReserved;
ar >> dwReserved;
ar >> dwReserved;
ar >> dwReserved;
BarFreeAll( false, true );
m_listBarsInDocMode.RemoveAll();
ASSERT( BarEnumGetCount( false, true ) == 0 );
DWORD dwCount;
ar >> dwCount;
for( DWORD dwIndex = 0; dwIndex < dwCount; dwIndex++ )
{
UINT nCmdID;
DWORD dwTmp;
ar >> dwTmp;
nCmdID = UINT(dwTmp);
DWORD dwSerializeFlags;
ar >> dwSerializeFlags;
CExtDynamicControlBar * pBar = NULL;
if( (dwSerializeFlags & 0x01) != 0 )
{ // if serializing persistent bar
pBar = BarGetByCmdID( nCmdID );
if( pBar == NULL )
{
ASSERT( FALSE );
BarFreeAll( false, true );
#if _MFC_VER >= 0x0800
::AfxThrowArchiveException( CArchiveException::genericException );
#else
::AfxThrowArchiveException( CArchiveException::generic );
#endif
} // if( pBar == NULL )
ASSERT_VALID( pBar );
ar >> pBar->m_strCaptionText;
pBar->m_icon.Serialize( ar );
} // if serializing persistent bar
else
{ // if serializing dynamic bar
CRuntimeClass * pRTC = ar.ReadClass();
ASSERT( pRTC != NULL );
CExtSafeString strCaptionText;
ar >> strCaptionText;
CExtCmdIcon icon;
icon.Serialize( ar );
pBar =
BarAlloc(
strCaptionText,
icon,
nCmdID,
pRTC
);
if( pBar == NULL )
{
ASSERT( FALSE );
BarFreeAll( false, true );
#if _MFC_VER >= 0x0800
::AfxThrowArchiveException( CArchiveException::genericException );
#else
::AfxThrowArchiveException( CArchiveException::generic );
#endif
} // if( pBar == NULL )
} // if serializing dynamic bar
ASSERT_VALID( pBar );
pBar->OnSerializeDynamicProps( ar );
} // for( DWORD dwIndex = 0; dwIndex < dwCount; dwIndex++ )
ASSERT( ((DWORD)BarEnumGetCount()) == dwCount );
} // else from if( ar.IsStoring() )
return true;
} // try
catch( CException * pException )
{
if( bEnableThrowExceptions )
throw;
pException->Delete();
} // catch( CException * pException )
catch( ... )
{
if( bEnableThrowExceptions )
throw;
} // catch( ... )
dwGeneralFlags;
dwReserved;
return false;
}
|
|
Timo Stripf
|
Oct 25, 2009 - 1:27 PM
|
Thanks for the great fix, but the Problem is not fixed completly. The sort works perfekt now, but the selected tab is not the same, after restart. I think it is better to see the same overview after every restart. I can save it by myself, but i think, it is better if the framework support it by default. Is the same procedure like visual studio.
|
|
tera tera
|
Oct 17, 2009 - 1:45 AM
|
|
|
tera tera
|
Oct 21, 2009 - 2:23 AM
|
|
|
tera tera
|
Oct 19, 2009 - 6:40 PM
|
|
|
Technical Support
|
Oct 22, 2009 - 12:51 PM
|
Thank you very much for reporting us this issue. It’s fixed in the latest Prof-UIS 2.87. You can download it from the same location.
|
|
Technical Support
|
Oct 20, 2009 - 9:24 AM
|
Thank you for reporting us this issue. We fixed it. Please re-download the latest source code from the same location.
|
|
Eric Houvenaghel
|
Oct 16, 2009 - 9:47 AM
|
Typing Alt + 0233 in any edit field will input the character é. As we all know, there are many such codes. If one does this in the Report grid text filter nothing shows up. Any idea how to fix this?
|
|
Eric Houvenaghel
|
Oct 19, 2009 - 9:19 AM
|
All our projects are compiled in UNICODE and all other applications (at least on my machine and all machines that I’ve used in the past) are producing the é character when typing Alt 0233 in an edit control. This includes the edit control in which I am writing now. Two things I guess, one, the CExtEdit in the version that we are using does not produce the é character when typing Alt0233, and two the CExtPopupMenuWnd::CInPlaceEditWnd does not derive from CExtEdit but CEdit. Which also does not produce the character. So ... yes, could I have the source code update. Maybe just post it here in case someone else needs it? Thanks for your help.
|
|
Technical Support
|
Oct 19, 2009 - 11:22 AM
|
|
|
Technical Support
|
Oct 16, 2009 - 1:25 PM
|
The Alt+0233 key combination pressed in the typed é character in the CExtEdit control of Prof-UIS 2.87 when the Unicode character system is used. It can produce either é or e characters on other builds depending from the Windows locale setting. We implemented the explicit support for such key combinations in the CExtEdit class. You can drop us an e-mail to the support mail box at this web site and we will provide you with the source code update.
|
|