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 |
|
Offer Har
|
Jun 15, 2007 - 7:47 AM
|
Dear Support,
Consider this scenario: 1) In an MDI application, when using CExtTabMdiWnd , and placing it on the bottom: __ETWS_ORIENT_BOTTOM . 2) Using an 2007 theme, for example CExtPaintManagerOffice2007_Silver . 3) Have one control-bar docked on the left side.
There is a painting problem in the NC area of the line separating the control-bar from the view - for some reasons it thinks that the mdi tab is still docked on top, and draws a gray rectangle where it was to be if it was docked on top.
I can send you a capture, or even a project with this problem if you cannot reproduce it.
Thanks, Ron.
|
|
Technical Support
|
Jun 16, 2007 - 8:48 AM
|
Thank you for reporting the problem but it would very helpful convenient to take a look at a screenshot that demonstrates what’s wrong.
|
|
Offer Har
|
Jun 16, 2007 - 9:37 AM
|
Sure. It’s not a big deal, so I will generate you a working sample when I have time. Regards, Ron.
|
|
Brian Horn
|
Jun 15, 2007 - 7:36 AM
|
Hi,
We have created a ribbon bar application with 5 ribbon tabs inside it by using m_wndRibbonBar.SetButtons ( m_pRibbonNode );
Inside this Ribbon Node ( m_pRibbonNode ) there is object of CExtRibbonNodeTabPageCollection which contains 5 tab pages .
I want to hide some of the tab pages when application launches and then using Some click action I want to show remaining tabs which were hidden previously.
Could you suggest some method/way to achieve this?
We will appreciate your quick response as we are heading towards our release.
Thanks and Regards Himanshu/Ayub
|
|
Technical Support
|
Jun 15, 2007 - 9:44 AM
|
At the moment you can only show or hide tab pages by adding or deleting the corresponding ribbon nodes to/from the ribbon tree (which is represented by the top ribbon node m_pRibbonNode ) and then assigning it to the ribbon control: m_wndRibbonBar.SetButtons ( m_pRibbonNode );
In other words, you can create an initial tree with for example 3 pages, and later modify the ribbon tree. You can find an example of hiding and showing ribbon groups in the RibbonPage sample. You can show and hide ribbon tabs in a similar way.
|
|
Offer Har
|
Jun 15, 2007 - 7:18 AM
|
Dear Support, Are there any plans for skinning the Child frame NC area? Thanks, Ron.
|
|
Paul Cowan
|
Jun 15, 2007 - 5:30 AM
|
With a Report Grid that is not sorted or grouped, how do I add a new row at a specific location (ie row 10)?
When the grid is sorted, or grouped, how do I select a newly added item?
|
|
Paul Cowan
|
Jun 15, 2007 - 9:38 AM
|
So are you suggesting that the item be added the normal way, which would put it at the bottom of the grid, then use ItemCopyMove to move it to the row I want? I reason I wish to do this is when a item is being added it’s sorted location in the database is known, so by adding it to this known location in the grid the grid does not need to be resorted. The rows in the grid match the same order as the sorted order in the database.
How about my second question? When the grid is grouped, or sorted, the data is in a different order then the database and the location for the new item in the grid is not known, After adding the item to the grid and resorting the grid, how do I find and select the new item?
|
|
Technical Support
|
Jun 15, 2007 - 12:15 PM
|
We are sorry for the wrong reply. Normally you should never move report grid rows manually and there is no need for analyzing if sorting and/or grouping is applied. You should simply insert a new report row by invoking the CExtReportGridWnd::ReportItemRegister() method which returns a pointer to the CExtReportGridItem item. This pointer can be used as a handle to HTREEITEM row. It is persistent and allows you to identify the row uniquely regardless of any conditions (row location, sorting/grouping, expanded state of parent rows, etc.). The next step is to initialize grid cells in all the columns for the just added report grid row. Finally, you should invoke the CExtReportGridWnd::ReportSortOrderUpdate() method and the newly added row will be placed into its correct location according to the currently applied sorting/grouping rules. You can set the focus on using the following code: CExtReportGridWnd & wndReportGrid = . . .
CExtReportGridItem * pRGI = wndReportGrid.ReportItemRegister( . . . );
. . .
wndReportGrid.ItemFocusSet( (HTREEITEM)pRGI );
|
|
Technical Support
|
Jun 15, 2007 - 9:25 AM
|
Actually this task only makes sense when both grouping and sorting are disabled in the report grid. Only in this case you can use the CExtTreeGridWnd::ItemCopyMove() method to adjust the location of a row. virtual HTREEITEM ItemCopyMove(
HTREEITEM hTreeItemCopyMove,
HTREEITEM hTreeItemNewParent, // if NULL - root
ULONG nIdxInsertBefore = (ULONG(-1L)), // if (ULONG(-1L)) - insert to end
bool bMove = true,
bool bCloneCellObjects = true,
INT nExpandAction = TVE_TOGGLE, // TVE_TOGGLE in this case - keep expanded state
bool bEnableCopyingIntoInnerBranch = true,
bool bRedraw = true,
bool * p_bCopyingIntoInnerBranch = NULL
); The CExtReportGridItem* pointer in fact is a HTREEITEM handle, the bCloneCellObjects parameter should be false . The next parameters should have default values.
|
|
Offer Har
|
Jun 14, 2007 - 8:12 PM
|
Dear Support,
A while a go you said this feature is not yet implemented. Was it implemented in 2.70? If not when is it going to be implemented?
Thanks, Ron.
|
|
Technical Support
|
Jun 15, 2007 - 8:52 AM
|
The CExtTreeGridWnd class in v.2.70 supports sorting through its CExtTreeGridWnd::ItemSortChildren() method. The following test project demonstrates how to sort a tree grid.
|
|
Torsten Schucht
|
Jun 14, 2007 - 9:42 AM
|
Dear Support Team,
I am using CExtGridWnd. I am searching for a way to apply the painting of the active theme to the row and column header of the CExtGridWnd (like the headers in the CExtReportGrid). They are always painted old style grey.
Thanks.
|
|
Torsten Schucht
|
Jun 15, 2007 - 9:10 AM
|
Thanks, that works fine.
Now I have another question: how to get the scrollbar in the CExtGridWnd painted in the color scheme of the PaintManager (as it is done in the example SimpleGrids) ?
|
|
Technical Support
|
Jun 15, 2007 - 10:48 AM
|
By default, the grid control uses built-in window scroll bars which are implemented as part of the non-client area. You can use CScrollBar scroll bar common controls or CExtScrollBar Prof-UIS scroll bars in it instead. The latter scroll bars are what you are looking for. The easiest way to embed Prof-UIS scroll bars into the grid control is to use the following template class: template < class _BT >
class CExtNicerScrollBars : public _BT
{
public:
mutable CExtScrollBar m_wndScrollBarH, m_wndScrollBarV;
protected:
bool _EnsureScrollBarsCreated() const
{
if( m_wndScrollBarH.GetSafeHwnd() != NULL
&& m_wndScrollBarV.GetSafeHwnd() != NULL
)
return true;
m_wndScrollBarH.m_eSO = CExtScrollBar::__ESO_BOTTOM;
m_wndScrollBarV.m_eSO = CExtScrollBar::__ESO_RIGHT;
if( m_wndScrollBarV.GetSafeHwnd() == NULL )
{
if( ! m_wndScrollBarV.Create(
WS_CHILD|WS_VISIBLE|SBS_VERT|SBS_RIGHTALIGN,
CRect(0,0,0,0),
((CWnd*)this),
1
)
)
{
ASSERT( FALSE );
return false;
}
}
if( m_wndScrollBarH.GetSafeHwnd() == NULL )
{
if( ! m_wndScrollBarH.Create(
WS_CHILD|WS_VISIBLE|SBS_HORZ|SBS_BOTTOMALIGN,
CRect(0,0,0,0),
((CWnd*)this),
2
)
)
{
ASSERT( FALSE );
return false;
}
}
m_wndScrollBarH.SyncReservedSpace( &m_wndScrollBarV );
m_wndScrollBarV.SyncReservedSpace( &m_wndScrollBarH );
return true;
}
public:
virtual CScrollBar* GetScrollBarCtrl(int nBar) const
{
ASSERT_VALID( this );
switch( nBar )
{
case SB_HORZ:
case SB_VERT:
if( _EnsureScrollBarsCreated() )
{
CExtScrollBar * pScrollBar = ( nBar == SB_HORZ ) ? (&m_wndScrollBarH) : (&m_wndScrollBarV);
ASSERT_VALID( pScrollBar );
ASSERT( pScrollBar->GetSafeHwnd() != NULL );
return pScrollBar;
}
break;
}
return NULL;
}
}; You should simply use the CExtNicerScrollBars < CExtGridWnd > template based type instead of the CExtGridWnd class type. You can also use the CExtNicerScrollBars template class in the CExtTreeGridWnd tree grid.
|
|
Technical Support
|
Jun 14, 2007 - 12:23 PM
|
You should apply the __EGWS_EX_PM_COLORS grid style in this way: m_wndGrid.SiwModifyStyleEx( __EGWS_EX_PM_COLORS ); If it is applied, the grid window is painted using the Paint Manager’s color scheme, the default system colors otherwise.
|
|
HeeTae Lee
|
Jun 14, 2007 - 3:24 AM
|
I have a CExtTabPageContainerOneNoteWnd with some dialog page in it, but the dialogs are larger than the windows.
So I want to attach the vertical and horizontal scrollbar.
IaĖā¢ve been using the TabbedBars sample as the example code.
How do I attach the scroll at the CExtTabPageContainerOneNoteWnd?
|
|
Technical Support
|
Jun 14, 2007 - 7:17 AM
|
The following sample demonstrates how to implement a scrollable dialog container with skinned scrollbars and dialog anchoring mechanism. The scroll bars appear if the container window’s size is less than the initial dialog size. You can use this container window as a child of the tab page container.
|
|
Offer Har
|
Jun 15, 2007 - 8:04 AM
|
Dear Support,
You sample application hit the spot for me, but I have a problem using it.
This is my scenario: I have a tab container in a CView derived class, with a CExtResizableDialog derived class in each tab. I would like to have the scroll-bars (skinned of-course) available for each tab if needed.
My problem is that I need to add this functionality to each of my CExtResizableDialog derived classes, so I don’t know where to put this code to work...
Please advise.
Thanks, Ron.
|
|
Technical Support
|
Jun 16, 2007 - 9:07 AM
|
Your task could be interpreted as follows. One or more resizable dialogs (pages in your app) should be scrollable if controls on a dialog do not fit in the dialog.
Unfortunately, the resizable dialog does not support scrolling. If you need a scrollable dialog, you should use two windows: a scrollable container and a dialog inside it. The scrollable container should show the scroll bars if container’s size is less than the initial dialog size inside it. This means the following:
1) In scrollable mode the size and location of dialog controls do not change. You can only scroll the entire dialog to access its controls.
2) If scrolling is not needed, the dialog is resized to cover the entire area of scrollable container with hidden scroll bars. The anchoring mechanism of the resizable dialog will affect the dialog controls in this mode.
A ready-to-use scrollable dialog container is demonstrated in this small sample application.
You are currently using dialog windows as pages inside the tab page container. You should make your project using scrollable dialog containers as tab pages and each dialog widow create inside its scrollable container window.
Finally we should note the following: although window scrolling allows you to keep and access some larger content, you should avoid it anywhere if possible. That should improve the usability.
|
|
Aleksey Leshchuk
|
Jun 14, 2007 - 3:24 AM
|
I discovered the problem with CExtGridCellComboBox selection, in 2.54 selection ( SetCurSel or SelectString ) worked as expected, but in 2.70 the old code became somehow incorrect, and all combo selection are dropped. The one of symphtoms is changing state of combobox like there was default value changing ( the title became bold ). Need a hint :)
|
|
Aleksey Leshchuk
|
Jun 14, 2007 - 10:22 AM
|
|
|
Technical Support
|
Jun 14, 2007 - 7:09 AM
|
We have recently fixed a bug in the CExtGridCellComboBox class. Please update the following method and recompile the library. void CExtGridCellComboBox::Assign( const CExtGridCell & other )
{
ASSERT_VALID( this );
CExtGridCellString::Assign( other );
CExtGridCellComboBox * pCell =
DYNAMIC_DOWNCAST(
CExtGridCellComboBox,
( const_cast < CExtGridCell * > ( &other ) )
);
ResetContent();
if( pCell != NULL )
{
// copy cell items
ITEM_INFO * pItemCurSel = NULL;
LONG nItem = 0;
for( nItem = 0; nItem < pCell->m_arrItems.GetSize(); nItem++ )
{
ITEM_INFO * pOtherItem = pCell->m_arrItems[ nItem ];
ITEM_INFO * pNewItem = new ITEM_INFO( *pOtherItem );
m_arrItems.Add( pNewItem );
if( pCell->m_pCurSel == pOtherItem )
pItemCurSel = pNewItem;
}
m_bEnumMode = pCell->m_bEnumMode;
SetImageList( pCell->m_pImageList );
if( pItemCurSel != NULL )
{
nItem = _GetIndexOf( pItemCurSel );
SetCurSel( nItem );
}
} // if( pCell != NULL )
}
|
|
Ian McIntosh
|
Jun 13, 2007 - 4:48 PM
|
I am getting a crash on exit with call stack as below. The crash occurs maybe one time in 3.
I have an MDI app with a ribbon bar
any suggestions?
call stack: > ProfUIS264md.dll!CArray<CExtHookSink *,CExtHookSink *>::GetSize() Line 279 + 0x11 bytes C++ ProfUIS264md.dll!CExtHookSink::HookChains_t::HookChainsWindowProc(unsigned int nMessage=130, unsigned int & wParam=0, long & lParam=0) Line 239 + 0xb bytes C++ ProfUIS264md.dll!CExtHookSink::HookChains_t::g_HookWndProc(HWND__ * hWnd=0x00162138, unsigned int nMessage=130, unsigned int wParam=0, long lParam=0) Line 287 + 0x14 bytes C++ user32.dll!7e418734() [Frames below may be incorrect and/or missing, no symbols loaded for user32.dll] user32.dll!7e41d05b() user32.dll!7e41b4c0() user32.dll!7e41dabd() ntdll.dll!7c90eae3() user32.dll!7e41daf6() mfc80d.dll!CWnd::DestroyWindow() Line 993 + 0xd bytes C++ GuiMdi.exe!CMainFrame::DestroyWindow() Line 660 + 0x8 bytes C++
|
|
Ian McIntosh
|
Jun 17, 2007 - 9:18 AM
|
Adding the suggested line causes ASSERT failures elsewhere in the project (call stack listed below).
The project has quite a few dlls and does quite a bit of module state switching. Each dll has its own mfc dialogs and resource files. They all use prof-UIS based controls.
It may be helpful if you can give me more info on module state control within prof-UIS. for example, do I need to do anything in prof-UIS when I call AFX_MANAGE_STATE?
call stack on assert:
> ProfUIS270md.dll!CExtResDlg::Create(const char * lpszTemplateName=0x0000138b, CWnd * pParentWnd=0x037716b8) Line 5932 + 0x19 bytes C++ ProfUIS270md.dll!CExtResDlg::Create(unsigned int nIDTemplate=5003, CWnd * pParentWnd=0x037716b8) Line 5948 + 0x1b bytes C++ CobraUtils.dll!CCobraDialog::Create(unsigned int idd=5003, CWnd * pParent=0x037716b8) Line 17 + 0x19 bytes C++ Z2015.cbr!CGZ2015ControlDlg::Create(CWnd * pParent=0x037716b8) Line 69 + 0x14 bytes C++ Z2015.cbr!CGZ2015Plugin::CreateAllDialogs() Line 243 C++ CobraUtils.dll!CPlugin::InitPlugin(CWnd * pSystemWnd=0x03766e30, bool bIsGui=true, CMessageHub * pMessageHub=0x0377109c) Line 139 + 0x12 bytes C++ Z2015.cbr!CZ2015Plugin::InitPlugin(CWnd * pSystemWnd=0x03766e30, bool isGui=true, CMessageHub * pMessageHub=0x0377109c) Line 103 + 0x17 bytes C++ Z2015.cbr!CZ2015App::InitPlugin(CWnd * pSystemWnd=0x03766e30, bool bIsGui=true, CMessageHub * pMessageHub=0x0377109c) Line 74 + 0x2c bytes C++ Z2015.cbr!fnInitPlugin(CWnd * SystemWnd=0x03766e30, int isGUI=1, CMessageHub * pMessageHub=0x0377109c) Line 94 + 0x1a bytes C++ CobraDllManager.dll!CDllManager::Initialise(ATL::CStringT<char,StrTraitMFC_DLL<char,ATL::ChTraitsCRT<char> > > & PluginExtension="*.cbr", ATL::CStringT<char,StrTraitMFC_DLL<char,ATL::ChTraitsCRT<char> > > & PluginName="", int isGUI=1) Line 233 + 0x38 bytes C++ CobraDllManager.dll!CDllManager::CDllManager(HINSTANCE__ * hAppMod=0x00400000, CMessagingAPI * pMainWnd=0x03769898, CWnd * pParent=0x03766e30, ATL::CStringT<char,StrTraitMFC_DLL<char,ATL::ChTraitsCRT<char> > > & PluginExtension="*.cbr", ATL::CStringT<char,StrTraitMFC_DLL<char,ATL::ChTraitsCRT<char> > > & PluginName="", int isGUI=1) Line 88 C++ GuiMdi.exe!CSystemGui::Init(CWnd * pAppWnd=0x03766e30, boost::shared_ptr<IPopupMgt> & spPopupMgt={...}, boost::shared_ptr<IGui> & spIGui={...}) Line 159 + 0xda bytes C++ GuiMdi.exe!CGuiLogic::StartCore() Line 127 C++ GuiMdi.exe!CMainFrame::OnStartup(unsigned int __formal=0, unsigned int __formal=0) Line 761 C++ mfc80d.dll!CWnd::OnWndMsg(unsigned int message=32869, unsigned int wParam=0, long lParam=0, long * pResult=0x0012f9c0) Line 2004 + 0x11 bytes C++ GuiMdi.exe!CMainFrame::OnWndMsg(unsigned int message=32869, unsigned int wParam=0, long lParam=0, long * pResult=0x0012f9c0) Line 818 C++ mfc80d.dll!CWnd::WindowProc(unsigned int message=32869, unsigned int wParam=0, long lParam=0) Line 1741 + 0x20 bytes C++ GuiMdi.exe!CExtNCW<CMDIFrameWnd>::WindowProc(unsigned int message=32869, unsigned int wParam=0, long lParam=0) Line 535 + 0x14 bytes C++ mfc80d.dll!AfxCallWndProc(CWnd * pWnd=0x036dc010, HWND__ * hWnd=0x00021522, unsigned int nMsg=32869, unsigned int wParam=0, long lParam=0) Line 240 + 0x1c bytes C++ mfc80d.dll!AfxWndProc(HWND__ * hWnd=0x00021522, unsigned int nMsg=32869, unsigned int wParam=0, long lParam=0) Line 389 C++ mfc80d.dll!AfxWndProcBase(HWND__ * hWnd=0x00021522, unsigned int nMsg=32869, unsigned int wParam=0, long lParam=0) Line 411 + 0x15 bytes C++ user32.dll!7e418734() [Frames below may be incorrect and/or missing, no symbols loaded for user32.dll] user32.dll!7e418816() user32.dll!7e41c63f() user32.dll!7e41f65d() ProfUIS270md.dll!CExtHookSink::HookChains_t::HookChainsWindowProc(unsigned int nMessage=32869, unsigned int & wParam=0, long & lParam=0) Line 236 + 0x20 bytes C++ ProfUIS270md.dll!CExtHookSink::HookChains_t::g_HookWndProc(HWND__ * hWnd=0x00021522, unsigned int nMessage=32869, unsigned int wParam=0, long lParam=0) Line 300 + 0x14 bytes C++ user32.dll!7e418734() user32.dll!7e418816() user32.dll!7e4189cd() user32.dll!7e4196c7() mfc80d.dll!AfxInternalPumpMessage() Line 183 C++ mfc80d.dll!CWinThread::PumpMessage() Line 896 C++ mfc80d.dll!CWinThread::Run() Line 625 + 0xd bytes C++ mfc80d.dll!CWinApp::Run() Line 894 C++ mfc80d.dll!AfxWinMain(HINSTANCE__ * hInstance=0x00400000, HINSTANCE__ * hPrevInstance=0x00000000, char * lpCmdLine=0x00161f11, int nCmdShow=1) Line 47 + 0xd bytes C++ GuiMdi.exe!WinMain(HINSTANCE__ * hInstance=0x00400000, HINSTANCE__ * hPrevInstance=0x00000000, char * lpCmdLine=0x00161f11, int nCmdShow=1) Line 33 C++ GuiMdi.exe!__tmainCRTStartup() Line 589 + 0x35 bytes C GuiMdi.exe!WinMainCRTStartup() Line 414 C kernel32.dll!7c816fd7() GuiMdi.exe!AfxWinMain() + 0x1c35b bytes C++ GuiMdi.exe!AfxWinMain() + 0x1c31a bytes C++ ffeb5983()
|
|
Ian McIntosh
|
Jun 14, 2007 - 12:52 PM
|
problem seems to be in:
bool CExtTabPageContainerWnd::OnHookWndMsg( LRESULT & lResult, HWND hWndHooked, UINT nMessage, WPARAM & wParam, LPARAM & lParam ) { __PROF_UIS_MANAGE_STATE;
ASSERT_VALID( this );
... }
It is the ASSERT_VALID(this) that is failing. As a get-around, I can comment out that line, but would like to get a proper fix.
It may also be relevant that the app is a very large app that makes a lot of use of dlls.
It is difficult for me to debug as I can’t step through to the problem code. Is there anything you can suggest that may help me in stepping through or identifying which of my classes may have an issue?
the full call stack is:
ntdll.dll!7c901230() [Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll] > msvcr80d.dll!_CrtDbgBreak() Line 89 C msvcr80d.dll!_VCrtDbgReportA(int nRptType=2, const char * szFile=0x781d54e0, int nLine=892, const char * szModule=0x00000000, const char * szFormat=0x00000000, char * arglist=0x00127ed8) Line 290 C msvcr80d.dll!_CrtDbgReportV(int nRptType=2, const char * szFile=0x781d54e0, int nLine=892, const char * szModule=0x00000000, const char * szFormat=0x00000000, char * arglist=0x00127ed8) Line 300 + 0x1d bytes C msvcr80d.dll!_CrtDbgReport(int nRptType=2, const char * szFile=0x781d54e0, int nLine=892, const char * szModule=0x00000000, const char * szFormat=0x00000000, ...) Line 317 + 0x1d bytes C mfc80d.dll!AfxAssertFailedLine(const char * lpszFileName=0x781d54e0, int nLine=892) Line 25 + 0x14 bytes C++ mfc80d.dll!CWnd::AssertValid() Line 892 + 0x3f bytes C++ mfc80d.dll!AfxAssertValidObject(const CObject * pOb=0x037d1c20, const char * lpszFileName=0x018bbba4, int nLine=890) Line 107 C++ ProfUIS270md.dll!CExtTabPageContainerWnd::OnHookWndMsg(long & lResult=0, HWND__ * hWndHooked=0x00581432, unsigned int nMessage=10, unsigned int & wParam=1, long & lParam=0) Line 897 C++ ProfUIS270md.dll!CExtHookSink::HookChains_t::HookChainsWindowProc(unsigned int nMessage=10, unsigned int & wParam=1, long & lParam=0) Line 210 + 0x26 bytes C++ ProfUIS270md.dll!CExtHookSink::HookChains_t::g_HookWndProc(HWND__ * hWnd=0x00581432, unsigned int nMessage=10, unsigned int wParam=1, long lParam=0) Line 300 + 0x14 bytes C++ user32.dll!7e418734() user32.dll!7e418816() ntdll.dll!7c90eae3() user32.dll!7e4189cd() user32.dll!7e4185a4() user32.dll!7e42d950() user32.dll!7e418a10() user32.dll!7e42dbbf() user32.dll!7e42593f() user32.dll!7e43a91e() msvcr80d.dll!_output_s_l(_iobuf * stream=0x00401ee6, const char * format=0x00207ce8, localeinfo_struct * plocinfo=0x00202458, char * argptr=0x00012012) Line 1166 + 0x17 bytes C++ user32.dll!7e466278() user32.dll!7e450617() user32.dll!7e4505cf() msvcr80d.dll!__crtMessageBoxA(const char * lpText=0x00128980, const char * lpCaption=0x102d315c, unsigned int uType=73746) Line 168 + 0x13 bytes C msvcr80d.dll!__crtMessageWindowA(int nRptType=2, const char * szFile=0x781d54e0, const char * szLine=0x0012a9f4, const char * szModule=0x00000000, const char * szUserMessage=0x001299f4) Line 420 + 0x16 bytes C msvcr80d.dll!_VCrtDbgReportA(int nRptType=2, const char * szFile=0x781d54e0, int nLine=892, const char * szModule=0x00000000, const char * szFormat=0x00000000, char * arglist=0x0012ea88) Line 420 + 0x28 bytes C msvcr80d.dll!_CrtDbgReportV(int nRptType=2, const char * szFile=0x781d54e0, int nLine=892, const char * szModule=0x00000000, const char * szFormat=0x00000000, char * arglist=0x0012ea88) Line 300 + 0x1d bytes C msvcr80d.dll!_CrtDbgReport(int nRptType=2, const char * szFile=0x781d54e0, int nLine=892, const char * szModule=0x00000000, const char * szFormat=0x00000000, ...) Line 317 + 0x1d bytes C mfc80d.dll!AfxAssertFailedLine(const char * lpszFileName=0x781d54e0, int nLine=892) Line 25 + 0x14 bytes C++ mfc80d.dll!CWnd::AssertValid() Line 892 + 0x3f bytes C++ mfc80d.dll!AfxAssertValidObject(const CObject * pOb=0x037d1c20, const char * lpszFileName=0x018bbba4, int nLine=890) Line 107 C++ ProfUIS270md.dll!CExtTabPageContainerWnd::OnHookWndMsg(long & lResult=0, HWND__ * hWndHooked=0x0061144e, unsigned int nMessage=10, unsigned int & wParam=1, long & lParam=0) Line 897 C++ ProfUIS270md.dll!CExtHookSink::HookChains_t::HookChainsWindowProc(unsigned int nMessage=10, unsigned int & wParam=1, long & lParam=0) Line 210 + 0x26 bytes C++ ProfUIS270md.dll!CExtHookSink::HookChains_t::g_HookWndProc(HWND__ * hWnd=0x0061144e, unsigned int nMessage=10, unsigned int wParam=1, long lParam=0) Line 300 + 0x14 bytes C++ user32.dll!7e418734() user32.dll!7e418816() user32.dll!7e4189cd() user32.dll!7e4196c7() mfc80d.dll!AfxInternalPumpMessage() Line 183 C++ mfc80d.dll!CWinThread::PumpMessage() Line 896 C++ mfc80d.dll!AfxPumpMessage() Line 190 + 0xd bytes C++ mfc80d.dll!CWnd::RunModalLoop(unsigned long dwFlags=4) Line 4322 + 0x5 bytes C++ ProfUIS270md.dll!CExtResDlg::_DoModalImpl() Line 6059 + 0xc bytes C++ ProfUIS270md.dll!CExtResDlg::DoModal() Line 6003 + 0x12 bytes C++ CobraUtils.dll!CCobraPasswordManager::PromptUserForPassword(bool bTimeLimit=true) Line 113 + 0xe bytes C++ GuiMdi.exe!CSystemGui::Init(CWnd * pAppWnd=0x0376dac8, boost::shared_ptr<IPopupMgt> & spPopupMgt={...}, boost::shared_ptr<IGui> & spIGui={...}) Line 188 + 0x1b bytes C++ GuiMdi.exe!CGuiLogic::StartCore() Line 127 C++ GuiMdi.exe!CMainFrame::OnStartup(unsigned int __formal=0, unsigned int __formal=0) Line 759 C++ mfc80d.dll!CWnd::OnWndMsg(unsigned int message=32869, unsigned int wParam=0, long lParam=0, long * pResult=0x0012f9c0) Line 2004 + 0x11 bytes C++ GuiMdi.exe!CMainFrame::OnWndMsg(unsigned int message=32869, unsigned int wParam=0, long lParam=0, long * pResult=0x0012f9c0) Line 816 C++ mfc80d.dll!CWnd::WindowProc(unsigned int message=32869, unsigned int wParam=0, long lParam=0) Line 1741 + 0x20 bytes C++ GuiMdi.exe!CExtNCW<CMDIFrameWnd>::WindowProc(unsigned int message=32869, unsigned int wParam=0, long lParam=0) Line 535 + 0x14 bytes C++ mfc80d.dll!AfxCallWndProc(CWnd * pWnd=0x036dcfe8, HWND__ * hWnd=0x00290e9e, unsigned int nMsg=32869, unsigned int wParam=0, long lParam=0) Line 240 + 0x1c bytes C++ mfc80d.dll!AfxWndProc(HWND__ * hWnd=0x00290e9e, unsigned int nMsg=32869, unsigned int wParam=0, long lParam=0) Line 389 C++ mfc80d.dll!AfxWndProcBase(HWND__ * hWnd=0x00290e9e, unsigned int nMsg=32869, unsigned int wParam=0, long lParam=0) Line 411 + 0x15 bytes C++ user32.dll!7e418734() user32.dll!7e418816() user32.dll!7e41c63f() user32.dll!7e41f65d() ProfUIS270md.dll!CExtHookSink::HookChains_t::HookChainsWindowProc(unsigned int nMessage=32869, unsigned int & wParam=0, long & lParam=0) Line 236 + 0x20 bytes C++ ProfUIS270md.dll!CExtHookSink::HookChains_t::g_HookWndProc(HWND__ * hWnd=0x00290e9e, unsigned int nMessage=32869, unsigned int wParam=0, long lParam=0) Line 300 + 0x14 bytes C++ user32.dll!7e418734() user32.dll!7e418816() user32.dll!7e4189cd() user32.dll!7e4196c7() mfc80d.dll!AfxInternalPumpMessage() Line 183 C++ mfc80d.dll!CWinThread::PumpMessage() Line 896 C++ mfc80d.dll!CWinThread::Run() Line 625 + 0xd bytes C++ mfc80d.dll!CWinApp::Run() Line 894 C++ mfc80d.dll!AfxWinMain(HINSTANCE__ * hInstance=0x00400000, HINSTANCE__ * hPrevInstance=0x00000000, char * lpCmdLine=0x00161f11, int nCmdShow=1) Line 47 + 0xd bytes C++ GuiMdi.exe!WinMain(HINSTANCE__ * hInstance=0x00400000, HINSTANCE__ * hPrevInstance=0x00000000, char * lpCmdLine=0x00161f11, int nCmdShow=1) Line 33 C++ GuiMdi.exe!__tmainCRTStartup() Line 589 + 0x35 bytes C GuiMdi.exe!WinMainCRTStartup() Line 414 C kernel32.dll!7c816fd7()
|
|
Technical Support
|
Jun 15, 2007 - 8:57 AM
|
This assertion may occur only due to incorrect MFC state switching in some MFC regular DLL loaded into the running process of your application. If it’s true, the following call in the InitInstance() method of your application class should fix the problem: CExt_ProfUIS_ModuleState::InitExtension( AfxGetAppModuleState() ); Please provide us with more information about your project. We need to know which parts it includes and which modules/APIs/controls are used. We can also help you fix this problem remotely by connecting to your desktop remotely.
|
|
Ian McIntosh
|
Jun 14, 2007 - 10:20 AM
|
having updated to 2.70 I now get a crash on startup - still seems to be down to hook chains
call stack:
ntdll.dll!7c901230() [Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll] msvcr80d.dll!_CrtDbgBreak() Line 89 C msvcr80d.dll!_VCrtDbgReportA(int nRptType=2, const char * szFile=0x781d54e0, int nLine=892, const char * szModule=0x00000000, const char * szFormat=0x00000000, char * arglist=0x00127ed8) Line 290 C msvcr80d.dll!_CrtDbgReportV(int nRptType=2, const char * szFile=0x781d54e0, int nLine=892, const char * szModule=0x00000000, const char * szFormat=0x00000000, char * arglist=0x00127ed8) Line 300 + 0x1d bytes C msvcr80d.dll!_CrtDbgReport(int nRptType=2, const char * szFile=0x781d54e0, int nLine=892, const char * szModule=0x00000000, const char * szFormat=0x00000000, ...) Line 317 + 0x1d bytes C mfc80d.dll!AfxAssertFailedLine(const char * lpszFileName=0x781d54e0, int nLine=892) Line 25 + 0x14 bytes C++ mfc80d.dll!CWnd::AssertValid() Line 892 + 0x3f bytes C++ mfc80d.dll!AfxAssertValidObject(const CObject * pOb=0x037d1c50, const char * lpszFileName=0x018bbba4, int nLine=890) Line 107 C++ ProfUIS270md.dll!CExtTabPageContainerWnd::OnHookWndMsg(long & lResult=0, HWND__ * hWndHooked=0x00591512, unsigned int nMessage=10, unsigned int & wParam=1, long & lParam=0) Line 897 C++ ProfUIS270md.dll!CExtHookSink::HookChains_t::HookChainsWindowProc(unsigned int nMessage=10, unsigned int & wParam=1, long & lParam=0) Line 210 + 0x26 bytes C++ ProfUIS270md.dll!CExtHookSink::HookChains_t::g_HookWndProc(HWND__ * hWnd=0x00591512, unsigned int nMessage=10, unsigned int wParam=1, long lParam=0) Line 300 + 0x14 bytes C++ user32.dll!7e418734()
|
|
Technical Support
|
Jun 14, 2007 - 12:35 PM
|
Would you send us the full call stack or a test project that reproduces the problem?
|
|
Technical Support
|
Jun 14, 2007 - 4:07 AM
|
We fixed a problem in 2.70 that may have to do with the error you encountered, especially if you are using MDI tabs in your project.
This problem is caused by an incorrect sequence of method calls that are performed to terminate window hooks. The termination calls should follow in the order reversed to the order the hooks were initialized. This may occur if you are using some hook-based classes like the menu bar and MDI tabs. Please try the following code at the beginning of the CMainFrame::DestroyWindow() : m_wndMenuBar.RemoveAllWndHooks();
|
|
Paul Cowan
|
Jun 13, 2007 - 1:39 PM
|
I have a CExtTabPageContainerWnd with some dialog page in it, but the dialogs are not aligned with the top left of the control. It seems the dialogs page have an offset from the top left of the tab. I’ve been using the TabPages sample as the example code but do no see where an page location is set. How do I get the dialogs aligned with the top left of the tab?
|
|
Paul Cowan
|
Jun 14, 2007 - 2:31 PM
|
I figured it out - the dialogs within the tab had to have a Window style of Child, mine were Popup.
|
|
Technical Support
|
Jun 14, 2007 - 7:08 AM
|
Would you send us some screenshots so we can see what’s wrong exactly? A test project would also be helpful. Please note you can find an example of using a dialog as a page of a tab page container in the Prof-UIS_Controls (the Tab Containers page).
|
|
Rado Manzela
|
Jun 13, 2007 - 5:14 AM
|
Do you plan to implement some class for message box in near future? It looks strange when application is displaying old windows error message boxes on top of new GUI :( Thank you
|
|
Aleksey Leshchuk
|
Jun 19, 2007 - 3:01 PM
|
I add the sample project :)
|
|
Aleksey Leshchuk
|
Jun 14, 2007 - 9:02 AM
|
|
|
Technical Support
|
Jun 15, 2007 - 9:56 AM
|
We will carefully read the article. Thank you. At first glance, the only thing it is missing is that there is no sample project.
|
|
Aleksey Leshchuk
|
Jun 14, 2007 - 4:17 AM
|
if you interested I can give you my solution. It’s simply replaces not only MessageBox but all simple dialogs.
|
|
Technical Support
|
Jun 14, 2007 - 6:48 AM
|
Yes, it would be very interesting to look at your source code.Actually we also have some code but it is not fully tested yet.
|
|
Technical Support
|
Jun 13, 2007 - 11:20 AM
|
We completely agree with you. This feature is in our to-do list and we will add it in one of the next versions. By the way, it looks strange in Microsoft Office applications either.
|
|
Stephan Finkler
|
Jun 12, 2007 - 6:38 AM
|
Hi!
If I disable ( CExtButton::EnbableWindow(FALSE) a CExtButton in CExtPaintManagerOffice2007_RX theme it takes a while until the button is shown as disabled. Same behaviour in ProfUIS_Controls sample ( s.CPageButtons::OnCmdMsg ..case IDC_CHECK_BUTTON_ENABLE: )
I think it has to do with the AnimationClient_StatePaint( dc ) in CExtButton::_DrawImpl() Is there a redraw missing?
Regards Michael
|
|
Technical Support
|
Jun 12, 2007 - 12:18 PM
|
Thank you for reporting this issue. To fix it, please update the source code of the following method: void CExtButton::OnEnable(BOOL bEnable)
{
CButton::OnEnable(bEnable);
AnimationSite_ClientProgressStop( this );
CClientDC dc( this );
_DrawImpl( dc );
}
|
|
Tom Nunamaker
|
Jun 12, 2007 - 3:22 AM
|
Hi,
From the sample ADORecordSetView sample, i’d like to build a similar example, but filling a data grid inside a typicla resizable control bar, like the ones created with the Prof-UIS AppWizard.
How can i do that?
Thanks bv
|
|
Technical Support
|
Jun 12, 2007 - 7:24 AM
|
The resizable control bar is designed as a container for only one child window. So you can create a grid as the child of a control bar.
|
|
tera t
|
Jun 12, 2007 - 12:25 AM
|
Hello.
I incorporate GDIPLUS in one’s application. Using MetaFile in GDIPLUS and, I acquire made pixel size. A figure of print was made in a range.
Metafile *pmetafile5; pmetafile5 = new Metafile( L"\\test.emf" , hSc5, frameRect, MetafileFrameUnitPixel );
Thanks,
|
|
Technical Support
|
Jun 12, 2007 - 4:16 AM
|
We have just improved the coordinate system translation code for printing and print preview. Please download the updated samples.
|
|
tera t
|
Jun 12, 2007 - 8:18 PM
|
Hello
After all a sample does not work well. When there is malfunction in CreateEnhMetaFile, it is thought.
I cannot make metafile in an appointed pixel I have to appoint mm by this order. However, I cannot acquire an accurate pixel number
GdiPlus can seem to satisfy these businesses.
.NET ( GDIPLUS ) MetaFile
|
|
Technical Support
|
Jun 13, 2007 - 1:03 PM
|
The document content was correctly scaled after last improvements in the printing and print preview. Could you send us some screenshots demonstrating what you saw on your computer? Unfortunately we cannot use GDI plus because we provide compatibility with old Windows versions.
|
|
tera t
|
Jun 14, 2007 - 2:17 AM
|
Hi
>Could you send us some screenshots demonstrating what you saw on your computer?
ttp://profuis0.tripod.com/20070612/image01.jpg
First of all. I did problem solving.
Thanks,
|
|
Technical Support
|
Jun 14, 2007 - 4:09 AM
|
Unfortunately, the link is broken. But, if you say that the problem is solved, then there may be no need for this screenshot.
|
|
tera t
|
Jun 14, 2007 - 6:03 PM
|
I uploaded it again. ttp://profuis0.tripod.com/20070612/image01.jpg
|
|
Technical Support
|
Jun 15, 2007 - 7:38 AM
|
Please let us know which printer was used for the print preview demonstrated in this screenshot?
|
|
tera t
|
Jun 18, 2007 - 3:13 AM
|
Hi
It is not caused by printer driver. 250/350/400 FX DC ART4 E
You make a metafile in designated mm. The number of the pixels which you calculated in designated mm and program is different.
This is prime cause. This is regarded as malfunction of CreateEnhMetaFile.
|
|
Technical Support
|
Jun 20, 2007 - 10:24 AM
|
We have continued trying to re-compute coordinate mapping inside the printing and print preview subsystem. Here is the latest result:
ReportGrid-test2.zip
Please try it.
|
|
tera t
|
Jun 20, 2007 - 7:13 PM
|
Hi,
A sample does not work well. VE-304-M disappears.
ttp://profuis0.tripod.com/20070621/image01.jpg
|
|
Oliver Burkert
|
Jun 11, 2007 - 6:50 AM
|
Is there a way to enable/disable the tabs in my CExtRibbonBar by handling events of the tabs themselves? I created a CExtRibbonNodeTabPage and gave it a unique CmdID, then I added a handler for ON_UPDATE_COMMAND_UI(myCmdID, myHandlerFunc) and called pCmdUI->Enable(FALSE) in the handler function. However, I never get the event unless I click on the tab. Can’t I enable/disable ribbon tabs just as I do it with menus or buttons?
|
|
Oliver Burkert
|
Jun 11, 2007 - 8:04 AM
|
OK, but unfortunately, OnDeliverCmd doesn’t get called before I click on the tab. I’d like to disable it visually, so the user can se which tabs are active. In some other part of my code, I’m calling CExtRibbonButtonTabPage::ModifyStyle(TBBS_DISABLED), which does exactly what I want, but I’d like to do it in the update event of the tab.
|
|
Technical Support
|
Jun 11, 2007 - 9:45 AM
|
We think it’s not a good idea to make tab buttons controlled by the MFC’s command updating mechanism. Currently all the tabs are always enabled (like in Office 2007 applications) and the developer needs simply to construct the content of the ribbon tree. The developer doesn’t need to add command updating handlers for all the inserted tab items. Besides, we would need to create a skin for disabled tab items, which is outside the requirements of Office 2007 Ribbon UI license and not recommended by the Windows Vista UI guidelines (see msdn2.microsoft.com/en-us/library/aa511493.aspx).
|
|
Technical Support
|
Jun 11, 2007 - 7:20 AM
|
The tab buttons in the ribbon bar are not based on MFC’s command updating mechanism. If you want to disable tab switching , you should use a custom CExtRibbonBar -derived class which implements the bool CExtRibbonBar::OnDeliverCmd( CExtBarButton * pTBB ) virtual method. If the pTBB parameter is kind of the CExtRibbonButtonTabPage type and the method is invoked to switch the selected tab page. If you want to disable tab page switching, the method should not invoke the parent class method and simply return true .
|
|
Svetlozar Kostadinov
|
Jun 11, 2007 - 5:20 AM
|
Hello,
Please, may you look at the following thing... First open PropertyGrid sample. Select one random star and look at "Animation" property item. There’s no text, even that the item’s value is initialized in the constructor. But the text is gone also when you try to change the combo value by yourself and then deselect and select the star again. This refresh doesn’ help. In our project the behavior of CExtGridCellComboBox is the same, even worse. Programatically CExtGridCellComboBox::GetCurSel() returns -1 (unselected), even if I select a value manualy or programatically. That’s it. Could you investigate is this correct or I miss something? We are using 2.70 Unicode.
Best Regards, Sv.Asenov
|
|
Technical Support
|
Jun 11, 2007 - 6:49 AM
|
We have recently fixed a bug in the CExtGridCellComboBox class. Please update the following method and recompile the library. void CExtGridCellComboBox::Assign( const CExtGridCell & other )
{
ASSERT_VALID( this );
CExtGridCellString::Assign( other );
CExtGridCellComboBox * pCell =
DYNAMIC_DOWNCAST(
CExtGridCellComboBox,
( const_cast < CExtGridCell * > ( &other ) )
);
ResetContent();
if( pCell != NULL )
{
// copy cell items
ITEM_INFO * pItemCurSel = NULL;
LONG nItem = 0;
for( nItem = 0; nItem < pCell->m_arrItems.GetSize(); nItem++ )
{
ITEM_INFO * pOtherItem = pCell->m_arrItems[ nItem ];
ITEM_INFO * pNewItem = new ITEM_INFO( *pOtherItem );
m_arrItems.Add( pNewItem );
if( pCell->m_pCurSel == pOtherItem )
pItemCurSel = pNewItem;
}
m_bEnumMode = pCell->m_bEnumMode;
SetImageList( pCell->m_pImageList );
if( pItemCurSel != NULL )
{
nItem = _GetIndexOf( pItemCurSel );
SetCurSel( nItem );
}
} // if( pCell != NULL )
} If the problem persists, please let us know.
|
|
Svetlozar Kostadinov
|
Jun 12, 2007 - 8:08 AM
|
Thank you, guys! You’re so fast! I’ll try it and let you know how it works.
|
|
Svetlozar Kostadinov
|
Jun 18, 2007 - 4:56 AM
|
Ok, the initial values are correct, but I faced another problem which maybe isn’t a bug. When I change a value of combo cell, then deselect the object and select it again, the combo is cleared and empty somehow. Probably it is only my problem, cause in the property samples, there isn’t such a problem.
|
|
Pierre MEDART
|
Jun 11, 2007 - 3:42 AM
|
Hi,
we have a legacy application that uses MFC CMenu and contextual menus.
We need to replace them with CExtMenuControlBar and CExtPopupWnd.
The way it works now is that we have a treecontrol, depending on the type of the node we select we populate dynamicaly a pop-up menu that we insert in our mainframe menu.
Is there a way to do that with CExtPopupWnd and CExtMenuControlBar ?
To sum up we have something like :
SetMainFrameMenu(OurObj * pObj) { CMenu tmp; tmp.CreatePopupMenu();
pObj->FillPopupMenu(&tmp);
CMenu* pMenu = AfxGetApp()->GetMainWnd()->GetMenu();
pMenu->InsertMenu(nPos, MF_POPUP | MF_BYPOSITION, (UINT)tmp.Detach(), strMenuTitle); }
What can we do ?
|
|
Technical Support
|
Jun 11, 2007 - 6:58 AM
|
|
|
Pierre MEDART
|
Jun 11, 2007 - 9:01 AM
|
I’m trying to use the following code
CExtPopupMenuWnd * p_anExtPopupWnd = new CExtPopupMenuWnd;
p_anExtPopupWnd->CreatePopupMenu(GetSafeHwnd());
p_anExtPopupWnd->UpdateFromMenu(GetSafeHwnd(),&popupMenu, true, true, false);
p_anExtPopupWnd->TrackPopupMenu(0, point.x, point.y);
in this code the popupMenu is a CMenu that I populate dynamicaly.
The issue I’m facing is that the popup menu that get drawn has the size of an icon and its content is empty.
Therefore two questions:
1) can this code work ?
if no, can I populate a CExtPopupMenuWnd based on a CMenu ?
if yes, how can I display correctly the menu ?
|
|
Pierre MEDART
|
Jun 11, 2007 - 9:37 AM
|
some more info
the GetItemCount on the CMenu return 7 but the GetItemCound on the CExtPopupMenuWnd return 0
|
|
Pierre MEDART
|
Jun 11, 2007 - 10:37 AM
|
my fault in the
p_anExtPopupWnd->UpdateFromMenu(GetSafeHwnd(),&popupMenu, true, true, false);
I had to se the first true to false
|
|
Aleksey Leshchuk
|
Jun 10, 2007 - 4:44 PM
|
How can I disable smooth Check box changing? This behaviour appeared in the ProfUIS 2.70, in the version 2.54 there wasn’t such problem.
|
|
Oliver Burkert
|
Jun 11, 2007 - 9:06 AM
|
When our program runs on a terminal server, the animation is extremely slow. With your solution, I can switch off all animation, which is exactly what I needed. Thanks!
|
|
Oliver Burkert
|
Jun 11, 2007 - 7:23 AM
|
How can I do the same with a ribbon bar? I overrode CExtRibbonBar::AnimationClient_OnQueryAnimationParameters, but that function never gets called.
|
|
Technical Support
|
Jun 11, 2007 - 8:23 AM
|
If you do the same with the ribbon bar, this will not be similar to the ribbon bar in Office 2007 applications. The AnimationClient_OnQueryAnimationParameters() virtual method is defined in the CExtAnimationClient class, which is the base class for many Prof-UIS classes. It is also the base class for the CExtBarButton class which implements a button in the toolbar, menu bar, ribbon page and ribbon bar. This means each button in these controls has its own specific animation parameters. It is possible to substitute particular button classes, but it will require some work (to define a button class, to define a class factory for the ribbon node). It is easier to disable all the animations at all: CExtPaintManager::g_DefAnimationParametersNormal = CExtPaintManager::g_DefAnimationParametersEmpty;
CExtPaintManager::g_DefAnimationParametersSlow = CExtPaintManager::g_DefAnimationParametersEmpty;
CExtPaintManager::g_DefAnimationParametersVerySlow = CExtPaintManager::g_DefAnimationParametersEmpty; Please let us know if this fits your requirements.
|
|
Technical Support
|
Jun 11, 2007 - 3:33 AM
|
You should use the following check box class: class CPlainCheckBox : public CExtCheckBox
{
public:
virtual const CExtAnimationParameters * AnimationClient_OnQueryAnimationParameters( INT eAPT ) const
{
return (&CExtPaintManager:: g_DefAnimationParametersEmpty);
}
};
|
|
david klenowski
|
Jun 10, 2007 - 2:42 AM
|
Hi Support,
Is it possible to change the font and enable word wrap for a preview area (a preview area with a RUNTIME_CLASS of CExtGridCellStringDM).
For the word wrap, I tried some commented out code in your ReportGrid sample (ChildView.cpp) but it failed with an assertion error .. // pCell = pRGI->PreviewAreaGet( RUNTIME_CLASS(CExtGridCellStringDM) ); // ASSERT_VALID( pCell ); // pCell->ModifyStyle( __EGCS_TEXT_ELLIPSIS ); // //pCell->ModifyStyleEx( __EGCS_EX_WRAP_TEXT ); <-- THIS LINE CAUSES AN ASSERTION ERROR .. // pCell->TextSet( // _T("Preview area text goes here") // //_T("\r\n") // //_T("Preview area text goes here") // );
Similarly, is it possible to make the text within a preview area italic ? I have tried FontWeightSet(), FontIndexSet() but neither worked?
Thanks in advance .
dave
|
|
Technical Support
|
Jun 11, 2007 - 3:29 AM
|
We already fixed the issue with multiline text in the preview area so you can download the update from our ftp server (please contact us for details).
The CExtGridCellStringDM class does not support font effects. The font effects are provided by the CExtGCF template and the CExtGridCellEx class based on it. The CExtGridCellStringDM class is derived from the CExtGridCell class - not from the CExtGridCellEx class. The CExtGridCellStringDM class is designed for memory grids with large text cell number. This class uses an effective memory allocation mechanism based on the data provider inside the grid control. If you need font effects:
1) Use CExtGridCellString instead of CExtGridCellStringDM .
2) Create and use a custom grid cell derived from the CExtGCF < CExtGridCellStringDM > template based type.
|
|
Vrinda Savargaonkar
|
Jun 9, 2007 - 2:55 AM
|
Dear Sir,
I am using prof uis 2.70 Ribbonbar mdi application. I keep task bar in auto hide mode on my machin. When Ribbonbar mdi application is executed I drawn some wave form on view .Initially task bar is hidden when application is run.
Now when i move mouse pointer to up & down of window task bar gets visible & hide . & this will call OnDraw() function of my view class & due to this whatever drawing on view gets vanishes & it is not repainted again.
So either i am doing somthing wrong or is there any problem in prof uis classes.
Please suggest me a solution. Thanks
|
|
Technical Support
|
Jun 11, 2007 - 1:51 AM
|
Would you send us a screenshot that demonstrates the problem?
|
|