Subject |
Author |
Date |
|
Paul Cowan
|
Jan 14, 2008 - 1:33 PM
|
The grid tooltip window is using the cell text colour, so when a cell has white text (on a dark background) the tooltip text is not visable> It is shown as white on the standard toolitp cream background. How do I get the tooltip text to always be black?
|
|
Technical Support
|
Jan 21, 2008 - 3:03 AM
|
Thank you for reporting the bug. To fix it, please open the CExtGridCell::OnPaintExpandedContent() method and find the following line: COLORREF clrBk = wndGrid.OnSiwGetSysColor( COLOR_INFOBK ); Then replace it with the following code: COLORREF clrBk =
OnQueryBackColor(
wndGrid,
picd.m_dc,
htInfo.m_nVisibleColNo,
htInfo.m_nVisibleRowNo,
htInfo.m_nColNo,
htInfo.m_nRowNo,
htInfo.GetInnerOuterTypeOfColumn(),
htInfo.GetInnerOuterTypeOfRow(),
htInfo.m_dwAreaFlags,
0L //dwHelperPaintFlags
);
if( clrBk == COLORREF(-1L) )
clrBk = wndGrid.OnSiwGetSysColor( COLOR_INFOBK );
|
|
Pierre MEDART
|
Jan 14, 2008 - 2:49 AM
|
We are using a tabbedmdi with the 2.70 version.
The behaviour is :
Open file 1 Open file 2
Close file 2 Open file 3
the content of the drop-down on the tabbedmdi is file 1 , file 3
the content of the window menu is file 1, file 2.
Any clue?
|
|
Pierre MEDART
|
Jan 16, 2008 - 2:54 AM
|
There is certainly something wrong on our side.
Is there a way to get the list that the tabmdi keeps so that I can update the Window menu with it by treating the CExtPopupMenuWnd::g_nMsgPrepareMenu ?
|
|
Technical Support
|
Jan 14, 2008 - 11:52 AM
|
We tried to reproduce this problem with the DRAWCLI sample but failed. We created three different drawing documents on the disk. We opened/closed them as you suggested, through File | Open menu but both menus in the menu bar and MDI tab control finally displayed the correct document list with first and third file names. We also opened documents by using MRU menu items in the File menu and got the same correct result. We guess this problem is specific for your project only. Please compare the MDI document menu implementation in your project with the same in the DRAWCLI sample.
|
|
Neville Franks
|
Jan 14, 2008 - 12:40 AM
|
I’ve reported in the past that some of my users get a crash when my app closes. This is in CExtHookSink::HookChains_t::g_HookWndProc+0xa5.
I was told to add: m_wndMenuBar.RemoveAllWndHooks(); to CMainFrame::DestroyWindow() to fix this, but it didn’t help. I’m still using Prof-UIS V2.62.
I’ve just upgraded to Prof-UIS V2.82 and searched the forums again for issues like this and found two relevant posts. One says to add: CExtCustomizeSite::RemoveAllWndHooks(); to CMainFrame::DestroyWindow() if the CMainFrame class is derived from the CExtCustomizeSite class, which mine is. This is in addition to m_wndMenuBar.RemoveAllWndHooks();
And the other says:
"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() );"
My app does use both MFC and Regular DLL’s.
My questions are: 1) Do I need all three of these lines of code added to my app to resolve the crash problem? If not which ones. 2) Are these still required with Prof-UIS V2.82?
Thanks, Neville
|
|
Technical Support
|
Jan 14, 2008 - 11:44 AM
|
The problem was really in a de-initialization sequence of hook interfaces provided by the CExtHookSink class. Prof-UIS 2.82 is much less dependent on this type of hooks and future versions may be free of this hook component at all. You did manual de-initialization of a hook sink based object and, as a result, the de-initialization sequence became correct independently from any other conditions occurred during de-initialization of your application. We cannot provide you with 100% exact answers for your questions because we did not see the source code of your project. You can try to remove manual de-initialization invocations for hook sink objects in your project based on Prof-UIS 2.82. Or you can leave this part of code intact.
|
|
Suhai Gyorgy
|
Jan 11, 2008 - 4:02 AM
|
Dear Support,
We have a grid with a method for moving rows up/down. It is as follows: void CMyGridWnd::MoveSelRowByOne(bool bUp)
{
ASSERT_VALID(this);
LONG lCurSel = SelectionGetFirstRowInColumn(0L);
if ( lCurSel < 0 || ( bUp && lCurSel < 1) || ( !bUp && lCurSel >= RowCountGet() - 1) )
return;
CExtGridDataProvider & dp = OnGridQueryDataProvider();
ULONG nRowOffset = 0L; dp.CacheReservedCountsGet( NULL, &nRowOffset );
if ( dp.SwapDroppedSeries(false, lCurSel + nRowOffset, (bUp ? lCurSel-1 : lCurSel+2) + nRowOffset) ) {
lCurSel = (bUp ? lCurSel-1 : lCurSel+1);
FocusSet(CPoint(0, lCurSel));
}
}
It’s called as a response for a button clicked. This has worked before. In the meanwhile we have changed other aspects of the application and upgraded to the newest version of Prof-UIS (v2.82). Now we get an assertion in debug mode when this method is called. The problem is in the constructor of IDataProviderEventsMapped, because m_pOther is NULL. (ExtGridWnd.h, line 11654) Call Stack: - MyApp.exe!CExtMDP<CExtGridDataProviderMemory>::IDataProviderEventsMapped::IDataProviderEventsMapped(CExtMDP_MappingAPI * pMappingAPI=0x01f4ce7c, CExtGridDataProvider::IDataProviderEvents * pOther=0x00000000) Line 11654 + 0x1c - MyApp.exe!CExtMDP<CExtGridDataProviderMemory>::SwapDroppedSeries(bool bColumns=false, unsigned long nRowColNoSrc=0x00000002, unsigned long nRowColNoDropBefore=0x00000001, CExtGridDataProvider::IDataProviderEvents * pDPE=0x00000000) Line 12333 - MyApp.exe!CMyGridWnd::MoveSelRowByOne(bool bUp=true) Line 1429 + 0x47 I’ve tried setting the last parameter of SwapDroppedSeries from the default NULL to this , but it didn’t help. Have I messed up something or has your code changed around this area? If the information is not enough, let me know and I’ll make a sample application. Thank you!
|
|
Technical Support
|
Jan 17, 2008 - 4:06 AM
|
There is a typing error in the CMyGridWnd::MoveSelRowByOne() method in the project you sent us. Please take a closer look at the following line: if ( dp.SwapDroppedSeries(false, lCurSel + nRowOffset, (bUp ? lCurSel-1 : lCurSel+2) + nRowOffset), this ) It seems to look OK, but if we step into the SwapDroppedSeries() method using the debugger, we will see NULL instead of a valid this pointer. Here is exactly the same code but we split it into several lines: if( dp.SwapDroppedSeries(
false,
lCurSel + nRowOffset,
(bUp ? lCurSel-1 : lCurSel+2) + nRowOffset
), // ERROR
this // ERROR
) As you can see the if operator contains the comma operator. The comma operator contains a function invocation and this value. The latter is the same as true in this case. This code is absolutely correct, but the last parameter in the invocation of the SwapDroppedSeries() method is specified by the default NULL value. Here is the correct version: if( dp.SwapDroppedSeries(
false,
lCurSel + nRowOffset,
(bUp ? lCurSel-1 : lCurSel+2) + nRowOffset,
this // SWAPPED AND FIXED
) // SWAPPED AND FIXED
) And here is the entire method: void CMyGridWnd::MoveSelRowByOne(bool bUp)
{
ASSERT_VALID(this);
LONG lCurSel = SelectionGetFirstRowInColumn(0L);
if ( lCurSel < 0 || ( bUp && lCurSel < 1) || ( !bUp && lCurSel >= RowCountGet() - 1) )
return;
CExtGridDataProvider & dp = OnGridQueryDataProvider();
ULONG nRowOffset = 0L; dp.CacheReservedCountsGet( NULL, &nRowOffset );
if( dp.SwapDroppedSeries(
false,
lCurSel + nRowOffset,
(bUp ? lCurSel-1 : lCurSel+2) + nRowOffset,
this // SWAPPED AND FIXED
) // SWAPPED AND FIXED
)
{
//lCurSel = (bUp ? lCurSel-1 : lCurSel+1);
//FocusSet(CPoint(0, lCurSel));
OnSwInvalidate( true );
}
}
|
|
Suhai Gyorgy
|
Jan 17, 2008 - 6:04 AM
|
Now, this caused some expletives to myself, which I better not share with you! :-)
Thank you very much, you are great!
|
|
Technical Support
|
Jan 15, 2008 - 4:31 AM
|
We believe the assertion failure does not depend on whether the grid is instantiated statically or dynamically. To reproduce the problem, could you modify the ProfUIS_Controls sample and send it to us?
|
|
Suhai Gyorgy
|
Jan 15, 2008 - 5:08 AM
|
Modified ProfUIS_Controls sample sent.
|
|
Technical Support
|
Jan 14, 2008 - 12:28 PM
|
Here is the current version of the CExtGridWnd::OnGridQueryDataProvider() virtual method which instantiates and returns the memory-based data provider for grid cells. This data provider is used by default. CExtGridDataProvider & CExtGridWnd::OnGridQueryDataProvider()
{
ASSERT_VALID( this );
if( m_pDataProvider != NULL )
{
ASSERT_VALID( m_pDataProvider );
return (*m_pDataProvider);
}
m_pDataProvider = new CExtMDP < CExtGridDataProviderMemory >;
ASSERT_VALID( m_pDataProvider );
return (*m_pDataProvider);
} In the previous version of this method, a non decorated instance of the CExtGridDataProviderMemory class was used: m_pDataProvider = new CExtGridDataProviderMemory; The new CExtMDP template decorator class provides a memory data provider and a grid control with the ability to hide/show rows and or columns. This feature is essential for other new grid filtering feature. That is why the SwapDroppedSeries method of the data provider component now requires a non NULL pointer to the event receiver interface that is implemented in the CExtGridWnd class. We used your code in the updated version of the CDemoGrid::OnCmdMsg() method in the SimpleGrids sample application. Here is the updated part of this method: if( nID == ID_USE_PAINT_MANAGER_COLORS )
{
DWORD dwSiwGetStyleEx = SiwGetStyleEx();
BOOL bUsedPmColors =
( (dwSiwGetStyleEx&__EGWS_EX_PM_COLORS) != 0 )
? TRUE : FALSE;
if( nCode == CN_COMMAND )
{
// if( pHandlerInfo != NULL )
// return TRUE;
// SiwModifyStyleEx(
// bUsedPmColors ? 0 : __EGWS_EX_PM_COLORS,
// bUsedPmColors ? __EGWS_EX_PM_COLORS : 0,
// true
// );
bool bUp = CExtPopupMenuWnd::IsKeyPressed( VK_CONTROL ) ? true : false;
LONG lCurSel = SelectionGetFirstRowInColumn(0L);
if( lCurSel < 0 || ( bUp && lCurSel < 1) || ( !bUp && lCurSel >= RowCountGet() - 1) )
return TRUE;
CExtGridDataProvider & dp = OnGridQueryDataProvider();
ULONG nRowOffset = 0L; dp.CacheReservedCountsGet( NULL, &nRowOffset );
if ( dp.SwapDroppedSeries(false, lCurSel + nRowOffset, (bUp ? lCurSel-1 : lCurSel+2) + nRowOffset, this ) )
{
// lCurSel = (bUp ? lCurSel-1 : lCurSel+1);
// FocusSet(CPoint(0, lCurSel));
OnSwInvalidate( true );
}
return TRUE;
} // if( nCode == CN_COMMAND )
else if( nCode == CN_UPDATE_COMMAND_UI )
{
CCmdUI * pCmdUI = (CCmdUI *)pExtra;
ASSERT( pCmdUI != NULL );
pCmdUI->Enable( TRUE );
pCmdUI->SetRadio( bUsedPmColors );
} // else if( nCode == CN_UPDATE_COMMAND_UI )
return TRUE;
} // if( nID == ID_USE_PAINT_MANAGER_COLORS ) Now you can click the Use Paint Manager Colors button in the toolbar with or without the Ctrl key pressed and you will see the correctly swapped rows in the currently selected grid control. We used the Order Details grid with the full row selection model in our tests. Any other grid can also be used if you set the focus/selection to the first column for allowing the LONG lCurSel = SelectionGetFirstRowInColumn(0L); to detect selection. Please note, when the CExtGridWnd control receives events from the data provider component via virtual methods of the IDataProviderEvents interface, then the grid automatically manages focus and selection ranges. So, you don’t need to re-assign grid focus/selection. Alternatively, you can simply instantiate the CExtGridDataProviderMemory class "AS IS" instead of its CExtMDP < CExtGridDataProviderMemory > decorated version used by default.
|
|
Suhai Gyorgy
|
Jan 15, 2008 - 3:04 AM
|
I’ve put the code snippet to the SimpleGrid sample, as you wrote, and yes, it worked there. But I also put it in your ProfUIS_Controls sample, and I also made another, very small sample application, and both of these applications threw an ASSERT on the mentioned line. The problem is that the actual last parameter of SwapDroppedSeries is set to be a CExtGridWnd pointer in both cases, but in one of the cases it can be interpreted as an IDataProviderEvents interface just fine, and in the other case it cannot, causing the parameter to be NULL inside SwapDroppedSeries. The reason might be that one time the grid is created dynamically, other time it is subclassed from a custom control. I’m sending you the small sample application for testing purposes.
The alternative solution ( using the data provider without CExtMDP template ) worked just fine, of course, but we might want to use the filtering features in the future.
|
|
Thomas Maurer
|
Jan 11, 2008 - 2:45 AM
|
Hello
IMPORTANT: I am still using V2.54
I have a toolbar created with Prof-UIS. The toolbar contains an edit field. Now the button just left of this edit field has a strange behaviour: If you press the mouse in the right part of the button the button behaves like pressed (= the visual effect of pressing is there) but does not send an event. If you press the mouse in the left part of the button everything is normal.
I have created a screenshot:
http://download.ierax.ch/buttonpressed.jpg
Here you can see that the button and the edit field slightly overlap.
The code to create the toolbar and the button:
// toolbar if (!m_wndToolBar.Create(_T("ToolbarWndClass"),this,AFX_IDW_TOOLBAR, WS_CHILD|WS_VISIBLE|WS_CLIPCHILDREN|WS_CLIPSIBLINGS| CBRS_TOP|CBRS_TOOLTIPS|CBRS_FLYBY| CBRS_SIZE_DYNAMIC|CBRS_HIDE_INPLACE) || !m_wndToolBar.LoadToolBar(IDR_MAINFRAME)) { TRACE0("Failed to create toolbar\n"); return -1; // fail to create }
// create page selection text box if (!this->textBoxPageSelection.Create(WS_CHILD|WS_VISIBLE|ES_CENTER|ES_NUMBER,CRect(0,0,100,17), &this->m_wndToolBar,ID_PAGE_PAGESELECTION)) { TRACE0("Failed to create page selection text box\n"); return -1; // fail to create } this->textBoxPageSelection.SetFont(CFont::FromHandle((HFONT)::GetStockObject(DEFAULT_GUI_FONT)));
// hook up with toolbar m_wndToolBar.SetButtonCtrl(m_wndToolBar.CommandToIndex(ID_PAGE_PAGESELECTION),&this->textBoxPageSelection);
Thank you in advance
Thomas
|
|
Thomas Maurer
|
Jan 15, 2008 - 10:02 AM
|
You helped me indirectly. The sample application worked and so I compared the behaviour. As it turned out I called SetSeparatedDropDown for the wrong button.
Thank you. Case closed.
|
|
Technical Support
|
Jan 14, 2008 - 12:45 PM
|
The code lines in your message are related for split toolbar buttons which worked OK in any Prof-UIS versions. It would be helpful if you provide us with a modified version of any of our sample application which demonstrates the problem.
|
|
Thomas Maurer
|
Jan 14, 2008 - 4:54 AM
|
Thanks for the information. I debugged as you asked and I came to the following result:
In method CExtBarButton::OnClick there is a statement
CRect rcBtnDropDownArea = RectDropDown();
This rcBtnDropDownArea has a value of 1/23/198/209 (t/b/l/r) .
The button has a value of 1/23/186/209 (t/b/l/r) and so depending on the click position bDropDownHT will be set to true or false which will determine if the message is sent to my handler or not.
I could not understand how RectDropDown is calculated (too complex) nor what it is for. I speculate though that it has something to do with the IMHO incorrectly positioned edit field right next to the button. As I mentioned in my first post I think that the button and the edit field are overlapping slightly (maybe the 12 pixels that make the width of rcBtnDropDownArea???).
Maybe this information is sufficient for you to give me further clues.
Thank you in advance
Thomas
|
|
Technical Support
|
Jan 11, 2008 - 11:13 AM
|
Unfortunately what you described does not allows us to find out what may be wrong. Could you put these buttons into SDI sample application’s toolbar and re-produce the problem. It should not be difficult to debug the mouse click event in a CExtToolControlBar window and find out where and why the click event is canceled. We also suspect there must be something timer based what changes the currently captured window on the desktop or broadcasts the WM_CANCELMODE message what can really abandon currently tracked toolbar buttons or popup menus.
|
|
tera t
|
Jan 10, 2008 - 11:58 PM
|
Hello.
I want to make the following buttons in a ribbon bar. http://www.yukai.jp/~ifreeta/20080111/image01.jpg
I programed it. ------------------------------------------------------------------------- CExtRibbonNode * pNodeUndo = new CExtRibbonNode( ID_FB_EDIT_UNDO , 0, NULL, 0, _T("Undo") ); //new CExtRibbonNode( ID_FB_EDIT_UNDO ); //new CExtRibbonNodeGallery ( ID_FB_EDIT_UNDO ); pNodeUndo->RibbonILE_RuleRemoveLargeILV(); pNodeUndo->CmdKeyTipSet( new CExtCustomizeCmdKeyTip( _T("UD") ), false ); pNodeUndo->ModifyFlags( __ECTN_TBB_SEPARATED_DROPDOWN | __ECTN_TBB_UNDO_REDO ); -------------------------------------------------------------------------
However, an image was not displayed. http://www.yukai.jp/~ifreeta/20080111/image02.jpg
|
|
Offer Har
|
Jan 10, 2008 - 2:59 PM
|
I have a main-frame defined as follows:
class CMainFrame : public CExtNCW<CMDIFrameWnd> In the OnClose I add a check if my document was saved, if not I call AfxMessageBox to display a message to the user.
When the message-box is displayed, if the main-frame is maximized, the main-frame expands by few pixels.
I was able to reproduce it easily by adding OnClose to the CMainFrame in MDIDOCVIEW:
Add this to the MainFrm.cpp:
in the message map:
ON_WM_CLOSE()
And the function (add declaration of-course...)
void CMainFrame::OnClose()
{
AfxMessageBox("RON");
CExtNCW<CMDIFrameWnd>::OnClose();
} Note: I use two monitors in dual display mode.
|
|
Offer Har
|
Jan 23, 2008 - 8:19 AM
|
Dear support,
Can you please verify that this problem will be fixed? I am waiting for response for almost two weeks.
Ron.
|
|
Technical Support
|
Jan 11, 2008 - 8:35 AM
|
Thank you for reporting this problem. You can fix it by updating the following part of the CExtNcFrameImpl::NcFrameImpl_PreWindowProc() method: case WM_ACTIVATE:
m_bNcFrameImpl_IsActive = ( LOWORD(wParam) == WA_INACTIVE ) ? false : true;
if( pWndFrameImpl->IsWindowEnabled()
&& ( (! NcFrameImpl_IsForceEmpty() )
|| (! NcFrameImpl_IsForceEmptyNcBorderEmpty() )
)
)
{
NcFrameImpl_DelayRgnAdjustment();
NcFrameImpl_SetupRgn();
pWndFrameImpl->SendMessage( WM_NCPAINT );
}
else
{
if( NcFrameImpl_IsDwmCaptionReplacement() )
{
if( m_pNcFrameImplBridge != NULL )
{
HWND hWnd = m_pNcFrameImplBridge->NcFrameImplBridge_GetSafeHwnd();
if( hWnd != NULL && ::IsWindow( hWnd ) )
::RedrawWindow(
hWnd,
NULL,
NULL,
RDW_INVALIDATE|RDW_UPDATENOW|RDW_ERASE|RDW_ERASENOW|RDW_ALLCHILDREN
);
}
HWND hWndOwn = NcFrameImpl_OnQueryHWND();
ASSERT( hWndOwn != NULL && ::IsWindow(hWndOwn) );
::SendMessage( hWndOwn, WM_NCPAINT, 0L, 0L );
break;
} // if( NcFrameImpl_IsDwmCaptionReplacement() )
}
break;
|
|
Offer Har
|
Jan 11, 2008 - 8:57 AM
|
Dear Support,
This solve only part of the problem - when the message-box is displayed then all is fine. However, if the user selects to cancel the closing (My message-box allows for this, and in in the code - I don’t call OnOclose of the base) this stretch remains. You can implement this by removing this line in OnClose:
CExtNCW<CMDIFrameWnd>::OnClose();
|
|
Chris Anderson
|
Jan 10, 2008 - 2:19 PM
|
hi,
We recently migrated our app from v271 to v282, and saw a problem related to ribbon bar : the main window displays an additional blank title bar at the top, which didn’t happen in v271.
I looked at the ribbon bar sample with spy++, the ribbon bar in v282 is 30 pixels taller than its v271 counterpart, and it’s pushed beyond the frame window ( i.e., if you maximize the ribbon bar sample, the left-top corner of ribbon bar is (0, -26) ). Obviously the reason that an additional title bar shows up in our main window is that ribbon bar is not positioned correctly.
Our frame window class is derived from CExtNCW<CFrameWnd>, but it subclassed an existing window, and we did msg filering. Could you provide any clue , like msg , property that need attention? Thanks
|
|
Technical Support
|
Jan 11, 2008 - 8:26 AM
|
The ribbon bar’s integration with the window non-client area was completely re-coded in Prof-UIS 2.71 and the integrated caption became part of the ribbon bar window. This was essential for integration with Windows Vista’s window captions based on DWM. The only one thing we would like to ask you to check first of all: please compare the CMainFrame::ActivateFrame() method in our RibbonBar sample project with the same method in your project. Your method should be similar to ours.
|
|
Chris Anderson
|
Jan 10, 2008 - 6:57 PM
|
This additional title bar only happens with office 2007 theme. other theme work fine
|
|
Denis Konovalov
|
Jan 10, 2008 - 5:16 AM
|
Hello.
I have dialogs with many anchored controls, and while resizing i have flickering. In version 2.53 i implement CExtResizableDialog derived class, with WindowProc() from CExtWFF<> template. It’s works very fine. In version 2.81 and 2.82 i have a problem with gripper: background of upper left triangle of gripper rectangle doesn’t erased properly.
What should i do to fix this?
Thanks
|
|
Technical Support
|
Jan 11, 2008 - 8:29 AM
|
You should not use CExtWFF and CExtResizableDialog for this. To avoid flickering, just set the Clip Children and Clip Siblings dialog properties to true.
|
|
Christan HIRIGOYEN
|
Jan 10, 2008 - 4:49 AM
|
The timer __EXT_MFC_ID_TOOLBAR_HOVER_PROTECTION_TIMER (#9950) causes the WinAPP ::OnIdle to loop permanently even if you don’t move the mouse. It is not normal, it consumes unneeded CPU time.
You can reproduce this problem with the MDI sample. Just override the WinAPP::OnIdle with those lines. BOOL CMDIApp::OnIdle(LONG lCount) { static int foo=0; TRACE("%d OnIdle(%d)\n", foo++, lCount); return CWinApp::OnIdle(lCount); } Launch program. The trace is done only if you move the mouse in the drawing area. If you go over the toolbar, the trace becomes permanent, without any mouse move.
Is it a bug? Or is it a wanted implementation?
In my case I do some Application Task in the OnIde, lCount is never increased and each 100 milliseconds an UpdateDialogControls (..) appears. (This can take a while if you have a lot of visible toolbar, controlbar…)
Is it a bug?
|
|
Technical Support
|
Jan 10, 2008 - 9:11 AM
|
Thank you for reporting this issue. We noticed the timer is not killed in in several particular situations. Please update the source code for the following method: void CExtToolControlBar::OnTimer(__EXT_MFC_UINT_PTR nIDEvent)
{
switch( nIDEvent )
{
case __EXT_MFC_ID_TOOLBAR_HOVER_PROTECTION_TIMER:
{
bool bStateClear = false;
INT nIndex, nCount = GetButtonsCount();
for( nIndex = 0; nIndex < nCount; nIndex ++ )
{
CExtBarButton * pTBB = GetButton( nIndex );
ASSERT_VALID( pTBB );
if( ( ! pTBB->IsVisible() )
|| ( pTBB->GetStyle() & TBBS_HIDDEN ) != 0
)
continue;
bool bHover = pTBB->IsHover();
if( bHover && m_nBtnIdxHover != nIndex )
{
pTBB->SetHover( false );
_InvalidateButton( nIndex );
bStateClear = true;
break;
}
}
if( bStateClear )
{
KillTimer( __EXT_MFC_ID_TOOLBAR_HOVER_PROTECTION_TIMER );
return;
}
bool bActiveHover =
( ( m_nBtnIdxHover >= 0 )
|| CExtPopupMenuWnd::TestHoverEnabledFromActiveHWND( m_hWnd )
) ? true : false;
if( bActiveHover )
{
CPoint point;
if( ::GetCursorPos( &point ) )
{
if( ::WindowFromPoint( point ) != m_hWnd )
bActiveHover = false;
}
else
bActiveHover = false;
}
if( bActiveHover
&& m_pDockSite->GetSafeHwnd() != NULL
&& ( ! m_pDockSite->IsWindowEnabled() )
)
bActiveHover = false;
if( ! bActiveHover )
{
_UpdateHoverButton( CPoint(32767,32767), false );
KillTimer( __EXT_MFC_ID_TOOLBAR_HOVER_PROTECTION_TIMER );
CExtPopupMenuTipWnd * pATTW =
OnAdvancedPopupMenuTipWndGet();
if( pATTW != NULL )
pATTW->Hide();
CWnd::CancelToolTips();
}
else
{
if( m_nBtnIdxHover >= 0 )
{
CPoint pt;
if( ::GetCursorPos( &pt ) )
{
ScreenToClient( &pt );
INT nHT = HitTest( pt );
if( nHT != m_nBtnIdxHover )
{
KillTimer( __EXT_MFC_ID_TOOLBAR_HOVER_PROTECTION_TIMER );
if( ! CExtPopupMenuWnd::IsMenuTracking() )
_UpdateHoverButton( pt, false );
}
}
}
}
}
return; // case __EXT_MFC_ID_TOOLBAR_HOVER_PROTECTION_TIMER
} // switch( nIDEvent )
CExtControlBar::OnTimer(nIDEvent);
}
|
|
jb lee
|
Jan 9, 2008 - 2:51 PM
|
I add a button in your sample app. and select the top-left button in the combo-box.
How do I update the treeview in the program? Part sample is like this. And, it only update button1’s text color.
void CMainDlg::OnBnClickedButton1() { static COLORREF rgbs[3] = {RGB(255,0,0), RGB(0,255,0), RGB(0,0,255) }; static int idx = 0; m_Btn1.TextColorSet(rgbs[idx]); ... // update propertygrid control here!!! ... idx = ( idx + 1 ) % 3; }
|
|
Technical Support
|
Jan 14, 2008 - 11:56 AM
|
The CExtPropertyGridCtrl::PropertyStoreSynchronize() method updates the entire content of a property grid control and you should invoke this method only one time after several property values were changed.
|
|
Technical Support
|
Jan 11, 2008 - 8:32 AM
|
It is not completely clear what you mean by "update the treeview". If you want to change the value of a property grid’s cell, you should have a pointer to the cell object.
|
|
jb lee
|
Jan 12, 2008 - 9:11 AM
|
Sorry, I mean refresh. In the code, I modify the text color. But, This time, the old color value is in the property grid.
|
|
Bangjun Lei
|
Jan 9, 2008 - 2:23 PM
|
Dear Sir./Madam.,
I’m using CExtResizableDialog as the base class of one of my dialog. Actually I want this dialog to always pop up as the size of the designed in VS. However, because I use PaintManagerStateLoad at the beginning and PaintManagerStateSave at the end of my system. This dialog is always automatically resized to the size of last designed. How can I inidcated that a dialog’s size is fixed (as design time) but not influenced by PaintManagerStateLoad?
Thanks!
|
|
Technical Support
|
Jan 10, 2008 - 2:47 AM
|
The PaintManagerStateLoad() method has nothing to do with restoring the dialog’s size. You should remove the CExtResizableDialog::EnableSaveRestore() method’s call so that the dialog’s size and position will not be saved and restored.
|
|
Offer Har
|
Jan 9, 2008 - 1:04 PM
|
Dear Support,
I have a CView derived class and a bar with a grid next to it. When the user moves the mouse in the view, I redraw the view and update the grid. The way I redraw the view is by calling InvalidateRect(NULL, FALSE) , which trigger the OnDraw which does the actual drawing. The way I update the grid is by calling OnSwDoRedraw after updating all cells’ value that were changed.
The problem is that if I call OnSwDoRedraw OnDraw is not reached (If i do not call OnSwDoRedraw the OnDraw is reached).
Is there a lighter way to refresh the grid? I know that I only change the content of one or two cells. Is there a bug in the OnSwDoRedraw ? Is there a way to bypass this problem?
Thanks, Ron.
|
|
Offer Har
|
Jan 23, 2008 - 8:20 AM
|
Dear Support,
Still waiting for some support on this matter - the problem is clearly related to the grid occupying the CPU too much, not letting the view draw itself.
Ron.
|
|
Technical Support
|
Jan 11, 2008 - 7:55 AM
|
The OnSwDoRedraw() simply invokes CWnd::Invalidate() and CWnd::UpdateWindow() . This method cannot affect re-painting of any other windows outside the grid window. So, the problem hides somewhere else.
|
|
Offer Har
|
Jan 11, 2008 - 8:25 AM
|
Dear Support,
As I mentioned before - the problem is that even though this is a grid with 2-20 rows and 7 columns, the redraw of it consumes the CPU in such way that the OnDraw of my view is not getting called.
This was not the case in the old grid we had, in which we could ask to redraw only a certain cell, as we know exactly what cell is changed, and that way the CPU was not occupied all the time with repainting the grid.
I am asking if there is any way to redraw only a portion of the grid, so that it will not block the whole CPU in each cell update.
|
|
Technical Support
|
Jan 10, 2008 - 11:50 AM
|
The CExtGridWnd window does not affect repainting of windows outside it. There is only one case possible when the grid window does not allow repainting of the view window: if the grid window completely covers the client area of the view window, i.e. the view window is not visible on the screen. Please also note that the CWnd::InvalidateRect() performs delayed repainting when the OnSwDoRedraw() method does repainting with immediate feedback on the screen (same as CWnd::UpdateWindow() invoking immediately after CWnd::InvalidateRect() ). We suppose there must be something heavy and based on timers in your application what makes view window repainting delayed for too much time.
|
|
Offer Har
|
Jan 10, 2008 - 1:17 PM
|
My problem is that if I remove the call to OnSwDoRedraw everything works fine... so, I am left with one conclusion - that the call to OnSwDoRedraw prevents the OnDraw from being called.
My grid does not cover the whole view, but it is on top of the view when the bar is floating.
Is there anyway to make sure that the grid draws a certain cell without blocking the whole UI for such a long time that the OnDraw is not called? In other grids we use there is a way to instruct the grid to draw only one cell, that way it does not block the UI from doing its other tasks.
|
|
Denis Konovalov
|
Jan 9, 2008 - 4:25 AM
|
Hello. I want to use full color icons for toolbar with XP style. For previous post (Oct, 29) you reply about CExtPaintManager::AdjustIcon() virtual method in new versions of library. Now I switch library from version 2.53 to 2.81. But this method doesn’t exists. Do you plan to add it in new release, or i should modify my copy of library to realize it?
|
|
Technical Support
|
Jan 9, 2008 - 5:57 AM
|
You should use v.2.82 in which the CExtPaintManager::AdjustIcon() virtual method is implemented.
|
|
Denis Konovalov
|
Jan 9, 2008 - 4:27 AM
|
This is a copy of you reply:
This is the default appearance of Microsoft Office XP. So in Prof-UIS this is implemented in the same way. Note we have just added a CExtPaintManager::AdjustIcon() virtual method which is invoked for adjusting icons for the currently applied paint manager. With these changes, you can override the new method in your CExtPaintManagerXP-derived class and change the default behavior. If you have a valid subscription please contact tech support to get the instructions on how to download the latest source code.
|
|
Roongrit Charoensupkul
|
Jan 9, 2008 - 12:04 AM
|
I’m running the sample application, RibbonBarMDI. When I click Print Preview menu, the alert dialog pop up. Here is the detail:
"unhandled exception at 0x7833d6eb in RibbonBarMDI-ud.exe:0xC0000005: Access violation reading location 0x024e41d4."
When I click break button, it stop in CExtPopupMenuWnd::OnTimer(...) function, in ID_TIMER_FADE_OUT_ANIMATION case. Please let me know how to solve this issue.
Thanks
|
|
Technical Support
|
Jan 9, 2008 - 9:52 AM
|
Thank you for reporting this issue. To fix it please, update the following part of the CExtPopupMenuWnd::OnTimer() method: case ID_TIMER_FADE_OUT_ANIMATION:
{
if( m_nFadeOutAnimationStepIndex < m_nFadeOutAnimationStepCount )
{
CExtPopupMenuWnd * pPopup;
for( pPopup = this; pPopup != NULL; pPopup = pPopup->m_pWndParentMenu )
{
if( pPopup->GetSafeHwnd() == NULL )
continue;
ASSERT( g_PaintManager.m_pfnSetLayeredWindowAttributes != NULL );
if( (pPopup->GetStyle()&WS_VISIBLE) == 0 )
continue;
if( m_nFadeOutAnimationStepIndex == 0 )
{
pPopup->m_bHelperAnimationControllerDetected = true;
if( (pPopup->GetExStyle()&(__EXT_MFC_WS_EX_LAYERED|WS_EX_TRANSPARENT)) !=
(__EXT_MFC_WS_EX_LAYERED|WS_EX_TRANSPARENT)
)
pPopup->ModifyStyleEx( 0, (__EXT_MFC_WS_EX_LAYERED|WS_EX_TRANSPARENT) );
pPopup->EnableWindow( FALSE );
}
BYTE nAlpha = (BYTE)
::MulDiv(
m_nFadeOutAnimationStepCount - m_nFadeOutAnimationStepIndex - 1,
255,
m_nFadeOutAnimationStepCount
);
g_PaintManager.m_pfnSetLayeredWindowAttributes( pPopup->m_hWnd, 0, nAlpha, __EXT_MFC_LWA_ALPHA );
if( pPopup->m_ctrlShadow.GetSafeHwnd() != NULL
&& (pPopup->m_ctrlShadow.GetStyle()&WS_VISIBLE)
)
pPopup->m_ctrlShadow.UpdateWindowLayer( nAlpha );
CExtPaintManager::stat_PassPaintMessages();
}
m_nFadeOutAnimationStepIndex ++;
}
else
{
KillTimer( nIDEvent );
if( m_ctrlShadow.GetSafeHwnd() != NULL )
m_ctrlShadow.DestroyWindow();
CExtPopupMenuWnd * pPopup = this;
for( ; pPopup != NULL; )
{
VERIFY( pPopup->_BuildItems( NULL, true ) );
if( pPopup->m_ctrlShadow.GetSafeHwnd() != NULL
&& (pPopup->m_ctrlShadow.GetStyle()&WS_VISIBLE)
)
pPopup->m_ctrlShadow.DestroyWindow();
HWND hWnd = pPopup->m_hWnd;
pPopup = pPopup->m_pWndParentMenu;
::DestroyWindow( hWnd );
}
}
}
return;
|
|
Roongrit Charoensupkul
|
Jan 8, 2008 - 11:53 PM
|
I’m trying to add new document type for my application. My first step is to create a new file using CMainFrame::CreateNewChild(...) instead. Follow on your RibbonBarMDI application, this sample application create a new tab using this function already. So, to begin using Doc/View classes, I add these code in RibbonBarMDI::InitInstance()
CMultiDocTemplate* pDocTemplate = new CMultiDocTemplate(IDR_RIBBON_BAR_MDI_TYPE, RUNTIME_CLASS( CChildDoc ), RUNTIME_CLASS( CChildFrame ), RUNTIME_CLASS( CTestView ), if (!pDocTemplate) return FALSE; AddDocTemplate( pDocTemplate );
CMainFrame* pFrame = new CMainFrame; ...
But when I choose "File>New" command, the sample application create new tab only. There is no View attach to that tab. I tried using this way with other normal application (not using RibbonBar) and it works.
Please let me know what’s the steps in order to make these codes work. So I can add a new document type.
Thanks
|
|
Technical Support
|
Jan 9, 2008 - 9:58 AM
|
Could you reproduce this in our sample application and send it to us?
|
|
Suhai Gyorgy
|
Jan 8, 2008 - 8:47 AM
|
Dear Support,
Would it be possible to add a new cell style which would modify the class variable CExtGridInplaceEdit::m_bForceDisableInitSelText to have the value true instead of the default false ?
Thank you!
|
|
Technical Support
|
Jan 9, 2008 - 11:02 AM
|
We have added one new extended grid cell style in the ../Prof-UIS/Include/ExtGridWnd.h file: // do not select entire text in the in-place cell editor
#define __EGCS_EX_NO_INPLACE_CONTROL_SELECTION 0x00004000L And changed the body of the following constructor in the ../Prof-UIS/Src/ExtGridWnd.cpp file: CExtGridInplaceEdit::CExtGridInplaceEdit(
CExtGridWnd & wndGrid,
CExtGridCell & cell,
LONG nVisibleColNo,
LONG nVisibleRowNo,
LONG nColNo,
LONG nRowNo,
INT nColType,
INT nRowType,
const RECT & rcCellExtra,
const RECT & rcCell,
const RECT & rcInplaceControl,
LONG nLastEditedColNo,
LONG nLastEditedRowNo
)
: CExtGIE < CExtEditBase > (
wndGrid,
cell,
nVisibleColNo,
nVisibleRowNo,
nColNo,
nRowNo,
nColType,
nRowType,
rcCellExtra,
rcCell,
rcInplaceControl,
nLastEditedColNo,
nLastEditedRowNo
)
, m_bInValidation( false )
, m_bForceDisableInitSelText( false )
, m_strTextPrevious( _T("") )
, m_strTextInitial( _T("") )
{
if( ( cell.GetStyleEx() & __EGCS_EX_NO_INPLACE_CONTROL_SELECTION ) != 0 )
m_bForceDisableInitSelText = true;
}
|
|
Pawel Kalinowski
|
Jan 8, 2008 - 6:40 AM
|
Hello,
I am writing this post from user’s point of view, so please excuse lack of proper technical details and rather lengthy post.
We have the following problem with our Mozilla based application that uses Prof-UIS:
The application is basically a web browser with some special features. The application "hangs" when user with a single-core processor (like Intel Celeron) navigates to a web page containing Flash movies. This happens only when a more sophisticated theme (e.g. Silver, Blue or Black) is selected.
It does NOT happen when “Simple” theme is selected.
We were not suspecting Prof-UIS at all, were rather looking for ways to control Flash plugin. Only recently we added to our application different themes and noticed, that switching to “Simple” theme solves the problem.
My question is – what is the difference between “Simple” theme and the others that may cause such a behaviour? We would like to have the application working nicely with other themes as well, because it would be a shame to deliver the application with all of the Prof-UIS eye candy disabled. Possibly we will have to switch to “Simple” theme in the default settings of the application if no other solution is found.
How to reproduce the problem:
Use a single core processor without HyperThreading (e.g. Celeron). Download the application (compiled with 2.82): http://heatmap.gemius.pl/download/gHM_Setup_ver5.0.20080107-beta.exe To run it use login: demo password: demo
Adobe Flash Player plugin is required (you will be asked for installing it if not present in the system).
In “Settings” tab uncheck “Disable Flash Animations and Pop-ups” (to enable Flash) and in “Home” tab navigate to e.g. http://www.gemius.com
When there is “Simple” theme selected (“Settings” tab, “Application look” option), the application works OK.
When a different theme is selected (i.e. Silver, Blue or Black), the application UI ceases to react, i.e. clicking on tabs does not change ribbon contents. In fact the application IS reacting, only very slow (like 30-60 seconds after a click). To me it looks like a kind of race condition or something similar, as processor load of a test PC with ~2Ghz Celeron is far from 100% when application is “stalled”.
As I wrote, we were looking everywhere BUT Prof-UIS (to no avail), but why does changing a theme dramatically changes behaviour of the application?
I would appreciate any ideas as this issue is one of our major headaches since switching from IE to Mozilla :).
Best regards,
Pawel Kalinowski www.gemius.com
|
|
Technical Support
|
Jan 11, 2008 - 11:19 AM
|
Windows XP Professional English with Service Pack 2 and all the latest updates from the Windows Update site. Visual Studio 6.0 with Service Pack 6, Visual Studio 2005 with Service Pack 1 and .NET 1.1, 2.0, 3.0 and 3.5 frameworks are also installed on it. All the Windows updates were made after both Visual Studio versions had been installed.
|
|
Pawel Kalinowski
|
Jan 11, 2008 - 6:55 AM
|
Thank you very much for trying to run our app! It looks like we have a bigger headache than we thought :)
Could you please let me know OS version (e.g. XP Professional / Vista Ultimate) you tried it?
Best regards,
pawel kalinowski
|
|
Technical Support
|
Jan 10, 2008 - 12:30 PM
|
We failed to run your application and we cannot look at it because it crashes after a 1-2 seconds delay when clicking the OK button on the dialog with the user name and password. The main window does not appear at all. Mozilla Firefox 2.0.0.11 with Flash plugin was used.
Loaded modules before access violation: ’gemiusHeatMap.exe’: Loaded ’C:\Program Files\gemiusHeatMap\gemiusHeatMap.exe’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\ntdll.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\kernel32.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\user32.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\gdi32.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\comdlg32.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\shlwapi.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\msvcrt.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\advapi32.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\rpcrt4.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\comctl32.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\shell32.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\winspool.drv’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\oledlg.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\ole32.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\oleaut32.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\ws2_32.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\ws2help.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\wininet.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\crypt32.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\msasn1.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\winmm.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\imm32.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\lpk.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\usp10.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.2180_x-ww_a84f1ff9\comctl32.dll’
’gemiusHeatMap.exe’: Loaded ’C:\Program Files\gemiusHeatMap\gecko\mozctlx.dll’, Binary was not built with debug information.
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\WinSxS\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.1433_x-ww_5cf844d2\msvcr80.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\uxtheme.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\msimg32.dll’
’gemiusHeatMap.exe’: Loaded ’C:\Program Files\Stardock\Object Desktop\EnhancedDialog\enhdlginit.dll’, Binary was not built with debug information.
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\atl.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\MSCTF.dll’
’gemiusHeatMap.exe’: Loaded ’C:\Program Files\Stardock\Object Desktop\WindowFX\wfx.dll’
’gemiusHeatMap.exe’: Loaded ’C:\Program Files\Logitech\SetPoint\gamehook.dll’
’gemiusHeatMap.exe’: Loaded ’C:\Program Files\Logitech\SetPoint\lgscroll.dll’, Binary was not built with debug information.
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\WinSxS\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.1433_x-ww_5cf844d2\msvcp80.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\ntmarta.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\wldap32.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\samlib.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\riched32.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\riched20.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\MSCTFIME.IME’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\secur32.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\clbcatq.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\comres.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\version.dll’
’gemiusHeatMap.exe’: Loaded ’C:\Program Files\LG Software\Battery Miser\McIdle.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\urlmon.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\wsock32.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\mswsock.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\hnetcfg.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\userenv.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\wshtcpip.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\netapi32.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\wintrust.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\imagehlp.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\schannel.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\rasapi32.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\rasman.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\tapi32.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\rtutils.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\msv1_0.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\iphlpapi.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\sensapi.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\rsaenh.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\rasadhlp.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\wshbth.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\setupapi.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\dnsapi.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\winrnr.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\jsproxy.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\jscript.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\xpsp2res.dll’, Binary was not built with debug information.
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\dssenh.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\cryptnet.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\winhttp.dll’
’gemiusHeatMap.exe’: Loaded ’C:\Program Files\gemiusHeatMap\gecko\mozctl.dll’, Binary was not built with debug information.
’gemiusHeatMap.exe’: Loaded ’C:\Program Files\gemiusHeatMap\gecko\gkgfx.dll’, Binary was not built with debug information.
’gemiusHeatMap.exe’: Loaded ’C:\Program Files\gemiusHeatMap\gecko\xpcom_core.dll’, Binary was not built with debug information.
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\nspr4.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\msvcr71.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\plc4.dll’
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\plds4.dll’
’gemiusHeatMap.exe’: Loaded ’C:\Program Files\gemiusHeatMap\gecko\xpcom.dll’, Binary was not built with debug information.
’gemiusHeatMap.exe’: Loaded ’C:\WINDOWS\system32\apphelp.dll’
Unhandled exception at 0x01a40e9c in gemiusHeatMap.exe: 0xC0000005: Access violation reading location 0x00000024. Call stack is: > mozctl.dll!01a40e9c()
[Frames below may be incorrect and/or missing, no symbols loaded for mozctl.dll]
ntdll.dll!7c90efe3()
ntdll.dll!7c92bbe5()
ntdll.dll!7c915707()
ntdll.dll!7c911538()
ntdll.dll!7c911538()
ntdll.dll!7c9119e6()
ntdll.dll!7c911538()
ntdll.dll!7c9106eb()
ntdll.dll!7c91056d()
kernel32.dll!7c809988()
kernel32.dll!7c80999b()
kernel32.dll!7c80999b()
gdi32.dll!77f1b230()
gdi32.dll!77f1adfc()
gdi32.dll!77f16966()
gdi32.dll!77f1b7d7()
user32.dll!77d62fb0()
gemiusHeatMap.exe!0047ed10()
gemiusHeatMap.exe!0047efec()
gemiusHeatMap.exe!00492d0f()
gemiusHeatMap.exe!00471b7b()
gemiusHeatMap.exe!00471bbc()
gemiusHeatMap.exe!00471bea()
gemiusHeatMap.exe!004732fb()
gemiusHeatMap.exe!0040e413()
gemiusHeatMap.exe!00497282()
gemiusHeatMap.exe!004972a6()
gemiusHeatMap.exe!0047bc3c()
MSCTFIME.IME!755c44f5()
gemiusHeatMap.exe!004961b1()
gemiusHeatMap.exe!00496726()
gemiusHeatMap.exe!004777fe()
gemiusHeatMap.exe!004088bc()
gemiusHeatMap.exe!0047a063()
gemiusHeatMap.exe!0047a0f0()
user32.dll!77d48709()
user32.dll!77d4d297()
user32.dll!77d70494()
user32.dll!77d5215c()
user32.dll!77d51b08()
gemiusHeatMap.exe!00477ee8()
gemiusHeatMap.exe!0047b958()
gemiusHeatMap.exe!00473b86()
gemiusHeatMap.exe!00473a3e()
gemiusHeatMap.exe!004092fe()
gemiusHeatMap.exe!0049e17f()
gemiusHeatMap.exe!0041c0c8()
gemiusHeatMap.exe!0041c3c5()
gemiusHeatMap.exe!0047cba7()
gemiusHeatMap.exe!0047cdb4()
gemiusHeatMap.exe!0048fa21()
gemiusHeatMap.exe!0041ebe0()
gemiusHeatMap.exe!006eeecf()
gemiusHeatMap.exe!004a1693()
kernel32.dll!7c816d4f()
kernel32.dll!7c8399f3()
gemiusHeatMap.exe!006e0061()
gemiusHeatMap.exe!006e0061()
gemiusHeatMap.exe!006e0061()
gemiusHeatMap.exe!006e0061()
|
|
Hans Bergmeister
|
Jan 8, 2008 - 6:29 AM
|
Hello,
a while ago you announced the introduction of CExtLocalResourceHelper::g_bUseResourceHandle.
We just installed Version 2.82 here and were happy to find this feature implemented.
But how to use it? The member is declared as private and cannot be changed programmatically.
Best regards, Juergen
|
|
Technical Support
|
Jan 12, 2008 - 1:00 PM
|
We have made it public. Thank you.
|
|
Technical Support
|
Jan 11, 2008 - 11:15 AM
|
The DLL based localization uses one simple detail of the Win32 resource loading algorithm: to load resources of an appropriate preferred language, you should not let it have any chances to load resources of the default Windows locale based language. The cursors are language independent in most cases. At least all Prof-UIS cursors are absolutely language independent and we are using CWinApp::LoadCursor() MFC’s API for loading them. The resource manager loads dialog templates, strings, bitmaps and custom type resources. But it does not create HCURSOR handles from cursor binary data in resources. That is why we still keep the CExtLocalResourceHelper class. We hope it will not be needed at all in future.
|
|
Hans Bergmeister
|
Jan 11, 2008 - 1:24 PM
|
Be that as it may, it would be helpful, if you could make g_bUseResourceHandle a public member. In the current form this addition is useless.
|
|
Technical Support
|
Jan 10, 2008 - 12:32 PM
|
We confirm the declaration of the CExtLocalResourceHelper class should start with class __PROF_UIS_API CExtLocalResourceHelper
{
protected:
HINSTANCE m_hInstPrevResource;
bool m_bFree:1;
public:
static bool g_bUseResourceHandle;
protected:
void Init(
HINSTANCE hInstResourceModule
)
. . . But we don’t recommend you use this class at all because it can be removed in future versions. Prof-UIS loads all the resources through CExtResourceManager (a global g_ResourceManager smart pointer variable) which allows you to implement localized resources in your application without any DLLs. The resource manager contains resource loading algorithms written from scratch which can access resources of any preferred language. Please provide us with more details about your task.
|
|
Hans Bergmeister
|
Jan 11, 2008 - 2:55 AM
|
Hello,
>> Prof-UIS loads all the resources through CExtResourceManager (a global g_ResourceManager smart pointer variable) which allows you to implement localized resources in your application without any DLLs. << But exactly THIS is the problem. We have several applications with language dependent resources stored in separate DLLs. We can’t and we don’t want to change this. We simply want to load EACH resource by AfxGetResourceHandle(), regardless, which language the resource has. Prof-UIS does not very well support porting of such applications to Prof-UIS. Anyway, we managed to find a workaround by calling
g_ResourceManager->RscInst_Insert(new CExtResourceManager::RscInstEntry(AfxGetResourceHandle(), FALSE));
This works fine for almost all ProfUIS classes we used so far, with one exception: the CExtReportGridWnd throws assertions when loading certain resources (among others here:
m_hCursorResizingH = pApp->LoadCursor( MAKEINTRESOURCE( IDC_EXT_RESIZE_H1 ) );
).
>> But we don’t recommend you use this class at all because it can be removed in future versions. << We actually DON’T WANT to use this class. In deed the assertions thrown by Prof-UIS forced us to bother with this class. In version 2.70 of Prof-UIS we "patched the class away" by simply adding
#define CExtLocalResourceHelper CWnd
to the header file. This worked fine.
Thus the sooner you remove that stuff the better. At least for us this class only causes trouble for us but no benefit at all!
|
|
Offer Har
|
Jan 7, 2008 - 4:12 PM
|
Dead Support,
I have a an accelerator key which works well, only when the focus is set to an CExtTabPageContainerWnd control the accelerator key event handler is not called. It seems that control ’eats’ the accelerator - please advise as to how to solve this problem.
Thanks, Ron.
|
|
Technical Support
|
Jan 8, 2008 - 12:42 PM
|
The CExtTabPageContainerWnd control eats and processes Ctrl+PgUp and Ctrl+PgDown keys. All the other keys probably become eaten and/or handled by the page window inside the tab page container control. CDialog windows (including CExtResizableDialog ) perform specific keyboard pre-translation which eats all the accelerators. If you are using the dialog window as a tab page, then your dialog class should pre-translate keyboard messages in the following way: virtual BOOL PreTranslateMessage( MSG * pMsg )
{
if( WM_KEYFIRST <= pMsg->message && pMsg->message <= WM_KEYLAST )
return FALSE;
return __base_class__::PreTranslateMessage( pMsg );
}
|