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 |
|
Sergio Buonanno
|
Sep 29, 2010 - 4:37 AM
|
I have put the following code fragment inside CMainFrame::OnCreate:
if (!m_wndMdiTabs.Create(this, CRect( 0, 0, 0, 0 ), 157, WS_HSCROLL | WS_VSCROLL | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS, __ETWS_DEFAULT | __ETWS_SHOW_BTN_TAB_LIST | __ETWS_SHOW_BTN_CLOSE)) { ASSERT( FALSE ); return -1; } m_wndMdiTabs.ModifyStyleEx(0, __ETWS_EX_CLOSE_ON_SELECTED_ONLY | __ETWS_EX_CLOSE_ON_TABS);
But the close button is still shown on the right side of the MDI tab control and not directly on the TAB. I tried top play little with standard and extended styles but I couldn’t find a way to show the close button directly on the TAB like in Visual Studio 2010.
My MDI TAB control is derived from CExtTabOneNoteWnd.
|
|
Technical Support
|
Sep 29, 2010 - 11:53 AM
|
Please remove the __ETWS_SHOW_BTN_CLOSE basic style from the Create() method invocation.
|
|
Alastair Watts
|
Sep 29, 2010 - 4:31 AM
|
CExtGridCellHeaderFilter works great in CExtTreeGridWnd, but in CExtGridWnd the Value Filters list only offers the values from visible rows. Any ideas?
|
|
Technical Support
|
Oct 1, 2010 - 3:00 AM
|
If the m_bDynamicValueFilters flag is set to true , the CExtGridWnd::OnGridFilterCalcPlainUniqueValuesForColumn() / CExtGridWnd::OnGridFilterCalcPlainUniqueValuesForRow() methods are used to compute all the filter values dynamically. You can override these methods if you application have some cache of all the values and it allows you to avoid entire grid column/row scanning and improve performance. By default, these methods invoke the CExtGridCellHeaderFilter::stat_CalcPlainUniqueValuesForColumn() / CExtGridCellHeaderFilter::stat_CalcPlainUniqueValuesForRow() methods which scan entire grid column/row and generate array of unique string objects. We cannot confirm these methods perform only visible range scanning. They scan entire range of columns/rows.
|
|
Alastair Watts
|
Sep 30, 2010 - 3:19 AM
|
So there’s a bug when m_bDynamicValueFilters = true in CExtGridWnd?
|
|
Technical Support
|
Sep 30, 2010 - 12:36 AM
|
We checked this issue in the FilteredGrids sample application. The value filters show values for all the rows in case of static filters. Please build static value lists.
|
|
Adrian M
|
Sep 28, 2010 - 2:27 PM
|
|
|
Technical Support
|
Sep 30, 2010 - 7:25 AM
|
Thank you for reporting the issue. Here is the exact description of all dynamic DLL loading cases inside Prof-UIS library.
1) UxTheme.dll module is loaded in the CExtUxTheme class constructor. It’s loaded only once during the g_PaintManager global smart pointer variable construction. It’s safe.
2) dwmapi.dll module is loaded in the CExtDWM class constructor. It’s loaded only once during the g_PaintManager global smart pointer variable construction. It’s safe.
3) msimg32.dll module is also loaded only once during the g_PaintManager global smart pointer variable construction. It’s safe.
4) CExtResourceManager::RscInstEntry::RscInstEntry() method loads resource DLLs for resource custom non-MFC searching algorithm implemented inside Prof-UIS resource manager. Prof-UIS does not load any additional resource DLLs. This API is for using in Prof-UIS based applications. The caller of this method should care about full DLL path specification to avoid DLL hijacking.
5) A debug version of CExtResPP::PreProcessPageTemplate() method loads COMCTL32.DLL. This is not a safe case. This is old diagnostic code presented in a debug build only. We removed it. So, this is FIXED.
6) The CExtPaintManager::stat_DllGetVersion() static method computes a version of a DLL file and uses LoadLibrary() Win32 API. This method is invoked in several places (mostly for computing the version of COMCTL32.DLL) and it’s not safe. We removed its invocations in all unsafe places. Now it’s invoked only once during global object initialization and it caches the version of COMCTL32.DLL module. So, this is FIXED.
7) SHLWAPI.DLL module is loaded in the CExtShellBase::stat_SHAutoComplete() static method during auto path completing. This is used inside the editor control of Prof-UIS file dialog. This case is not safe. We fixed it. The SHLWAPI.DLL module is now loaded during global object construction. So, this is FIXED.
Please drop us an e-mail to the support mail box at this web site so we can provide you with the source code update download information.
|
|
Adrian M
|
Sep 28, 2010 - 2:28 PM
|
Replying just to get notified when there is a response.
|
|
Anna Kraus
|
Sep 28, 2010 - 11:12 AM
|
I have a toolbar of type CExtToolControlBar that contains buttons of type CExtBarButton. I would like to display a popup menu when the user right clicks on a button. How do I capture the right click so that I can create and display the popup menu?
|
|
Anna Kraus
|
Sep 28, 2010 - 1:16 PM
|
Thanks for your help. I was incorrect in my original post. My toolbar is of type CExtTabbedToolControlBarFlat. I have made the changes that you suggested but OnRButtonDown does not seem to get called. What am I missing? Here is what I have added: BEGIN_MESSAGE_MAP(CanXTabTBMain, CExtTabbedToolControlBarFlat)
ON_WM_RBUTTONDOWN ()
END_MESSAGE_MAP()
void
CanXTabTBMain::OnRButtonDown (UINT nFlags, CPoint point)
{
// display popup menu
CExtTabbedToolControlBarFlat::OnRButtonDown (nFlags, point);
} Thanks for your help.
|
|
Technical Support
|
Sep 29, 2010 - 9:03 AM
|
The solution is the same. But please create CExtTabbedToolControlBar::LocalNoReflectedToolBar -derived toolbar class instead of CExtToolControlBar -derived. You will also need to override CExtTabbedToolControlBar::OnBarCreateObject() virtual method and return instantiated version of your toolbar class.
|
|
Anna Kraus
|
Sep 30, 2010 - 11:56 AM
|
Thanks, your help solved my problem.
|
|
Anna Kraus
|
Sep 30, 2010 - 2:56 PM
|
I am now capturing the mouse right click but I am having trouble with the HitTest function. My code looks like: void
CanXTabTBMain::MyLocalNoReflectedToolBar::OnRButtonDown (UINT nFlags, CPoint point)
{
CExtToolControlBar * pToolBar = (CExtToolControlBar*)this;
int iHit = pToolBar->HitTest (point);
} My problem is that even when I right click while over a button the function HitTest is always returning -1. I am having trouble figuring out which button is selected. Thanks again for your help.
|
|
Anna Kraus
|
Sep 30, 2010 - 3:13 PM
|
My code is working now. I am getting the HitTest result by doing the following: int iHit = CExtToolControlBar::HitTest (point);
|
|
Technical Support
|
Sep 28, 2010 - 11:47 AM
|
Please create the CExtToolControlBar -derived class and handle the standard WM_RBUTTONDOWN message in it. The CExtToolControlBar::HitTest() method accepts mouse pointer coordinates in the client coordinate system of the CExtToolControlBar window and returns an zero-based index of the toolbar button or negative number if the mouse pointer is not over any toolbar button. The CExtToolControlBar::GetButton() returns the CExtBarButton toolbar button object by its index. The CExtBarButton::Rect() method returns the rectangular area of the toolbar button in the client coordinate system of the toolbar window. Here is example how to display context menu: <pre>CExtToolControlBar * pBar = . . . CExtBarButton * pTBB = . . . UINT nMenuResourceID = . . . bool bPopupMenuResource = . . . CRect rcBtn = pTBB->Rect(); pBar->ClientToScreen( &rcBtn ); pBar->ClientToScreen( &point ); DWORD dwTrackFlags = TPMX_OWNERDRAW_FIXED|TPMX_COMBINE_NONE|TPMX_NO_HIDE_RARELY; CExtPopupMenuWnd * pPopup = CExtPopupMenuWnd::InstantiatePopupMenu( pBar->GetSafeHwnd(), RUNTIME_CLASS(CExtPopupMenuWnd), pBar ); if( ! pPopup->LoadMenu( GetSafeHwnd(), nMenuResourceID, bPopupMenuResource, true ) ) return . . . if( ! pPopup->TrackPopupMenu( dwTrackFlags, point.x, point.y ) ) return . . . </code>
|
|
Anna Kraus
|
Nov 25, 2010 - 12:29 PM
|
I am able to capture the right clicks on menu buttons that are in the CExtToolControlBar and display the appropriate popup menu. Thank you for all of your help. I have some toolbars that have more buttons that can be displayed on the screen if the user’s screen is not very wide. For this case there is a bar that is displayed at the right end of the toolbar with a down arrow. If the user clicks on this arrow another window is displayed with the missing menu icons. How can I capture the right clicks when the user clicks on one of these?
|
|
Technical Support
|
Nov 26, 2010 - 6:29 AM
|
The CExtPopupBaseWnd::g_nMsgTranslateMouseClickEvent registered message allows you to intercept menu clicks. The pointer to the CExtPopupBaseWnd::TranslateMouseClickEventData_t data structure is used as a WPARAM message parameter. The m_nFlags property of this data structure contains the WM_MOUSE*** message number.
|
|
Anna Kraus
|
Nov 29, 2010 - 3:09 PM
|
I have added the following to my message_map: ON_REGISTERED_MESSAGE (CExtPopupBaseWnd::g_nMsgTranslateMouseClickEvent, OnMsgTranslateMouseClickEvent) but I am still not able to capture the right clicks. What am I doing wrong and/or missing?
|
|
Technical Support
|
Dec 1, 2010 - 12:16 PM
|
Here is the test code which demonstrates how to catch mouse button clicks over menu items:
LRESULT CMainFrame::OnMsgTranslateMouseClickEvent(WPARAM wParam, LPARAM lParam)
{
ASSERT_VALID( this ); wParam; lParam;
#ifdef _DEBUG
CExtPopupBaseWnd::TranslateMouseClickEventData_t * pData = (CExtPopupBaseWnd::TranslateMouseClickEventData_t*)wParam;
ASSERT( pData != NULL );
if( pData->m_nFlags == WM_LBUTTONDOWN )
afxDump << "WM_LBUTTONDOWN\r\n";
else
if( pData->m_nFlags == WM_MBUTTONDOWN )
afxDump << "WM_MBUTTONDOWN\r\n";
else
if( pData->m_nFlags == WM_RBUTTONDOWN )
afxDump << "WM_RBUTTONDOWN\r\n";
#endif // _DEBUG
return 0L;
}
|
|
Anna Kraus
|
Nov 25, 2010 - 1:19 PM
|
Also, how do I test when the user right clicks in the right end of the toolbar with the down arrow? I have noticed that the call to HitTest in this area always returns the value 28 and the CmdID is 4294967230
|
|
Technical Support
|
Nov 26, 2010 - 7:04 AM
|
The CExtToolControlBar::HitTest() method returns a toolbar button index. The CExtToolControlBar::GetButton() method returns a pointer to a toolbar button object by its index. If itās the CExtBarContentExpandButton type of object, you hit-tested the toolbarās chevron button.
|
|
Anna Kraus
|
Nov 22, 2010 - 5:10 PM
|
I have implemented the above code and my popup menu displays. My problem is that the items in the popup are all disabled. How do I enable the menu items in the popup menu?
|
|
Technical Support
|
Nov 23, 2010 - 4:30 AM
|
Menu items are controlled by the MFCās command handling/updating mechanism. If you add a command handler for your menu item, it will be enabled automatically.
|
|
Rado Manzela
|
Sep 28, 2010 - 6:37 AM
|
Is it possible to expand number of rows in destination grid to fit all rows in clipboard when I copy more rows from one grid and paste at the end of another? I’m using default acceleration commands (m_dwSupportedAccelCommands = __EGSA_COPY|__EGSA_CUT|__EGSA_PASTE|__EGSA_SELECT_ALL;)
Thank you.
|
|
Technical Support
|
Sep 28, 2010 - 11:32 AM
|
The CExtGridWnd control provides Excel style of clipboard operations. An abstract cell region of any complexity can be selected, copied and paste without inserting new rows and columns. You can override the CExtGridWnd::OnGbwAccelCommand() virtual method and detect when the dwEGSA parameter is set to __EGSA_PASTE and the pCmdUI parameter is set to NULL . This is the case when the method performs the grid cell pasting. Your method should insert required count of rows, set focus to the top/left cell of the new inserted row range of cells and invoke the parent method. Please take a look at the source code of the CExtGridWnd::OnGbwAccelCommand() method. The CExtGR2D _rangeSel object describes the region of cells to paste and the CExtGR2D::GetRangeBounds() method allows you to detect the number of rows to insert.
|
|
Tommaso Chiarelli
|
Sep 27, 2010 - 11:42 AM
|
Hi,
I use ItemFindPosForCmdID to find a separator (TYPE/ID_SEPARATOR = 0) in a popup menu. The menu is structured as the following:
- TYPE_POPUP -> (leads to two CmdIDs) - CMD_ID_1 - TYPE_SEPARATOR - CMD_ID_2 - CMD_ID_3
The problem is that ItemFindPosForCmdID retrieves 0 as position of the separator, instead of 2. Reading a suggestion you gave in an other topic, I used the following code to check it out:
TRACE( "\r\n\r\nTRACING MENU COMMANDS (BEGIN) ====================\r\n" );
for( INT nIndex = 0; nIndex < pPopup->ItemGetCount(); nIndex ++ )
{
const CExtPopupMenuWnd::MENUITEMDATA & mi = pPopup->ItemGetInfo( nIndex );
UINT nCmdID = mi.GetCmdID();
TRACE3( "index = %d, ID = %d, equal to ID_TO_FIND = %s\r\n", nIndex, nCmdID, nCmdID == CExtPopupMenuWnd::TYPE_POPUP ? "YES" : "NO" );
}
TRACE( "TRACING MENU COMMANDS (END) ====================\r\n\r\n\r\n" );
I discovered that ItemFindPosForCmdID retrieves 0 (position) because GetCmdID returns 0 (id) instead of 0xFFFFFFFF (TYPE_POPUP). The problem seems to occur in the first GetCmdNode call in GetCmdID:
UINT CExtPopupMenuWnd::MENUITEMDATA::GetCmdID() const
{
// if( IsSeparator()
// || IsInplaceEdit()
// )
// return ( (UINT) (IDC_STATIC) );
if( IsPopup() )
{
#if (!defined __EXT_MFC_NO_CUSTOMIZE)
CExtCustomizeCmdTreeNode * pNode =
( const_cast < MENUITEMDATA * > ( this ) )
=> -> GetCmdNode();
if( pNode == NULL )
return 0;
ASSERT_VALID( pNode );
if( ( pNode->GetFlags() & __ECTN_TBB_COLOR ) != 0 )
return 0;
// if( ( pNode->GetFlags() & __ECTN_TBB_UNDO_REDO ) != 0 )
// return pNode->GetCmdID();
// if( ( pNode->GetFlags() & __ECTN_TBB_SEPARATED_DROPDOWN ) == 0 )
// return 0;
// CExtCmdItem * pCmdItem =
// g_CmdManager->CmdGetPtr(
// g_CmdManager->ProfileNameFromWnd( GetCmdReceiver() ),
// pNode->GetCmdID()
// );
// if( pCmdItem != NULL )
// return pCmdItem->m_nCmdID;
if( ( pNode->GetFlags() & (__ECTN_TBB_UNDO_REDO|__ECTN_TBB_SEPARATED_DROPDOWN) ) != 0 )
return pNode->GetCmdID();
#endif // (!defined __EXT_MFC_NO_CUSTOMIZE)
return ( (UINT) (IDC_STATIC) );
} // if( IsPopup() )
return m_nCmdID;
}
That call (the one with the right-pointed arrow on the left) return a null pNode, forcing the method to return 0 (and consequentely causing the misinterpretation of a TYPE_POPUP as a TYPE_SEPARATOR). Additional information: this problem does not occur with Prof-UIS 2.90 Freeware. With the freeware library version GetCmdID returns correctly -1 in corrispondence of the TYPE_POPUP. What do you think the problem depends on? Thanks, Tom
|
|
Technical Support
|
Sep 28, 2010 - 11:17 AM
|
Thank you for reporting this issue. To fix it, please update the source code for the CExtPopupMenuWnd::MENUITEMDATA::GetCmdID() method:
UINT CExtPopupMenuWnd::MENUITEMDATA::GetCmdID() const
{
if( IsPopup() )
{
#if (!defined __EXT_MFC_NO_CUSTOMIZE)
CExtCustomizeCmdTreeNode * pNode =
( const_cast < MENUITEMDATA * > ( this ) )
-> GetCmdNode();
if( pNode != NULL )
{
ASSERT_VALID( pNode );
if( ( pNode->GetFlags() & __ECTN_TBB_COLOR ) != 0 )
return 0;
if( ( pNode->GetFlags() & (__ECTN_TBB_UNDO_REDO|__ECTN_TBB_SEPARATED_DROPDOWN) ) != 0 )
return pNode->GetCmdID();
} // if( pNode != NULL )
#endif // (!defined __EXT_MFC_NO_CUSTOMIZE)
return ( (UINT) (IDC_STATIC) );
} // if( IsPopup() )
return m_nCmdID;
}
|
|
Tommaso Chiarelli
|
Sep 29, 2010 - 10:24 AM
|
Problem solved.
Thank you very much, Tom
|
|
RICHARD ALTON
|
Sep 27, 2010 - 9:08 AM
|
Please could you tell me how to initially hide a button on a customizable toolbar? I want to simulate in code what happen when the user clicks on the add/remove buttons drop-down menu on the toolbar, i.e. I want to populate the toolbar with lots of buttons but then by default hide some of these. All my attempts at this just result in the button not being added at all to the toolbar, i.e. they do not appear in the menu to be re-added if so desired. Any help would be appreciated, thanks.
|
|
Technical Support
|
Sep 27, 2010 - 12:11 PM
|
You should apply the __ECTN_TBB_HIDDEN style to the command tree node of the toolbar button both in the initial and current command trees of toolbar: CExtCustomizeSite * pSite = . . .
CExtToolControlBar * pBar = . . .
UINT nButtonID = . . .
CExtCustomizeCmdTreeNode * pNodeC = NULL, * pNodeI = NULL;
VERIFY( pSite->GetToolbarCustomizeInfo( pBar, &pNodeC, &pNodeI );
ASSERT( pNodeI != NULL && pNodeC != NULL );
pNodeI->GetNode( true )->SearchNodeElement( nButtonID, -1, false, true )->ModifyFlags( __ECTN_TBB_HIDDEN );
pNodeC->GetNode( true )->SearchNodeElement( nButtonID, -1, false, true )->ModifyFlags( __ECTN_TBB_HIDDEN );
|
|
Bill Olson
|
Sep 25, 2010 - 3:33 AM
|
I need to dock a control bar inside an MDI child window. I created a dialog to go on the new control bar and docked it to the frame. Initially the control bar is visible, but the dialog is not (the control bar is blank). If I click on the push pin, the bar becomes collapsible and the dialog becomes visible. The dialog is visible from then on, even if the bar is made fixed again by clicking the push pin again.
I started with the MDI_DynamicInnerOuterBar sample. I generated the docked bar the same way it was done in the sample except I called CreateInsideBar which is pretty much the same as the function defined in the Skinable sample.
bool CSwRight::CreateInsideBar(CExtControlBar * pBar)
{
ASSERT_VALID( this );
ASSERT_VALID( pBar );
ASSERT( GetSafeHwnd() == NULL );
ASSERT( pBar->GetSafeHwnd() != NULL );
if( ! CExtResizableDialog::Create( IDD, pBar ) )
return false;
return true;
}
How do I make the dialog show initially when in the regular docked state? I figure I must be missing something simple.
Bill
|
|
Technical Support
|
Sep 25, 2010 - 8:06 AM
|
Please check the following: the dialog template resource should be marked as the child type and visible. If the CSwRight::CreateInsideBar() can be invoked dynamically at run time, then please invoke the fillowing line of code before returning the true flag: pBar->OnRepositionSingleChild();
|
|
Bill Olson
|
Sep 28, 2010 - 1:50 AM
|
That did it. For some reason the dialog template was set to invisible. Thanks, Bill
|
|
Dominik Braendlin
|
Sep 24, 2010 - 6:01 AM
|
Dear Tech Support, Depending on the context I need to add or remove groups in the ribbon bar. I have tried to use the ModifyFlag(__ECTN_TBB_HIDDEN) method on the group node but unless I switch to a different ribbon page and back the group does not disappear. What am I doing wrong? See source code below.
if (m_pRibbonNode != NULL) { CExtCustomizeCmdTreeNode* pNodeScan = m_pRibbonNode->SearchNodeElement(ID_RIBBON_PAGE_HOME_SCAN, -1, false, true); CExtCustomizeCmdTreeNode* pNodeSpec = m_pRibbonNode->SearchNodeElement(ID_RIBBON_PAGE_HOME_SPEC, -1, false, true); CExtCustomizeCmdTreeNode* pNodeLitho = m_pRibbonNode->SearchNodeElement(ID_RIBBON_PAGE_HOME_LITHO, -1, false, true); if (pNodeScan != NULL) { if (nID != ID_RIBBON_PAGE_HOME_SCAN) { pNodeScan->ModifyFlags(__ECTN_TBB_HIDDEN); } else { pNodeScan->ModifyFlags(0, __ECTN_TBB_HIDDEN); } } if (pNodeSpec != NULL) { if (nID != ID_RIBBON_PAGE_HOME_SPEC) { pNodeSpec->ModifyFlags(__ECTN_TBB_HIDDEN); } else { pNodeSpec->ModifyFlags(0, __ECTN_TBB_HIDDEN); } } if (pNodeLitho != NULL) { if (nID != ID_RIBBON_PAGE_HOME_LITHO) { pNodeLitho->ModifyFlags(__ECTN_TBB_HIDDEN); } else { pNodeLitho->ModifyFlags(0, __ECTN_TBB_HIDDEN); } } m_wndRibbonBar.UpdateAllCommandItems(); m_wndRibbonBar.Ribbon_UpdateLayout(); m_wndRibbonBar.Invalidate(); }
Unfortunately there is very little info in your examples concerning dynamic ribbon. Do you have an example that is not included in the lib concerning dynamic ribbon? Which approach would you suggest? 1. To add or remove groups 2. To hide or show groups Thanks Adrian
|
|
Technical Support
|
Sep 24, 2010 - 10:23 AM
|
You should recreate a tree of command tree nodes (m_pRibbonNode ), assign it to the ribbon bar and refresh ribbon layout:
m_wndRibbonBar.SetButtons( NULL );
m_wndRibbonBar.SetButtons( m_pRibbonNode );
m_wndRibbonBar.Ribbon_UpdateLayout();
|
|
Tommaso Chiarelli
|
Sep 23, 2010 - 12:30 PM
|
Hi,
As the post title says, the problem is about a kind of an unpredictable crash. Usually it happens while I’m using the application I work upon (it uses ProfUIS and ProfSkin dlls, in MBCS mode, dinamically). The crash is quite indeterministic, there’s nothing in particular that I do to cause it (at least, that I can notice), but it seems rather to occur after a while (6-8 minutes) I’m workin on the app. Now I’m able to make it happen simply re-doing the same things/operations continually for that amount of time, minute more minute less.
Additional Info: the crash occurs indipendently that I’m using my application in Debug or Release mode.
Analyzing the call stack, it seems the problem si related to ProfUIS, but it’s not always the same every time (call stacks differ).
In order to show you the problem, I’ve taken down two crash occurences. The error message (for both the occurrences) is the following:
Eccezione non gestita di tipo ’System.Runtime.InteropServices.SEHException’ in DentalVox.exe
Informazioni aggiuntive: Eccezione lanciata da un componente esterno.
That in english should be something like:
Unhandled exception of type ’System.Runtime.InteropServices.SEHException’ in DentalVox.exe
Additional information: Exception thrown by an external component.
The following reports, instead, are the call stack and the code strips involved by the calls respectively for the first and the second occurence. NB: I prepared the "involved code strips reports" starting from the first relevant call (down) towards the last one (up), linking the steps with vertical up-pointed arrows, and highlighting the involved rows with horizontal right-pointd arrows. I’ve also added some notes about variables values where I thought it was important. First occurence call stack:
kernel32.dll!7c812afb()
[I frame indicati di seguito possono essere errati e/o mancanti, non sono stati caricati simboli per kernel32.dll]
kernel32.dll!7c812afb()
ntdll.dll!7c9257c1()
ntdll.dll!7c925239()
mfc80d.dll!CThreadSlotData::GetThreadValue(int nSlot=-529697949) Riga 265 C++
msvcr80d.dll!_CxxThrowException(void * pExceptionObject=0x0012c5a0, const _s__ThrowInfo * pThrowInfo=0x783c6588) Riga 166 C++
mfc80d.dll!AfxThrowResourceException() Riga 1392 C++
mfc80d.dll!CWindowDC::CWindowDC(CWnd * pWnd=0x00000000) Riga 1059 C++
> ProfUIS290md.dll!CExtPaintManager::stat_GetBPP() Riga 5895 C++
ProfUIS290md.dll!CExtPopupBaseWnd::_InitAnimation() Riga 5181 C++
ProfUIS290md.dll!CExtPopupBaseWnd::CExtPopupBaseWnd() Riga 5064 C++
ProfUIS290md.dll!CExtPopupMenuTipWnd::CExtPopupMenuTipWnd() Riga 6575 C++
ProfUIS290md.dll!CExtNcFrameImpl::CExtNcFrameImpl() Riga 495 C++
ProfUIS290md.dll!CExtNCW<CExtResizableDialog>::CExtNCW<CExtResizableDialog>() Riga 564 C++
ProfUIS290md.dll!CExtMsgBox::CExtMsgBox(HWND__ * hWndParent=0x000f07d6, const char * strMessageText=0x0012d844, const char * strCaption=0x0059332c, unsigned int nMsgBoxStyle=16, unsigned int nHelpID=0, const char * strUniqueID=0x00000000, unsigned int nMsgBoxStyleEx=0) Riga 8806 C++
ProfUIS290md.dll!CExtMsgBox::DoMsgBox(HWND__ * hWndParent=0x000f07d6, const char * strMessageText=0x0012d844, const char * strCaption=0x0059332c, unsigned int nMsgBoxStyle=16, unsigned int nHelpID=0, const char * strUniqueID=0x00000000, unsigned int nMsgBoxStyleEx=0, unsigned int nTimeoutSeconds=0, bool bIsDisabledTimeout=false, CExtBitmap * pBmpIcon=0x00000000) Riga 9899 C++
ProfUIS290md.dll!ProfUISMsgBox(HWND__ * hWndParent=0x000f07d6, const char * strMessageText=0x0012d844, const char * strCaption=0x0059332c, unsigned int nMsgBoxStyle=16, unsigned int nHelpID=0, const char * strUniqueID=0x00000000, unsigned int nMsgBoxStyleEx=0, unsigned int nTimeoutSeconds=0, bool bIsDisabledTimeout=false, CExtBitmap * pBmpIcon=0x00000000) Riga 9955 C++
[Codice esterno]
DentalVox.exe!CDentalVoxApp::DoMessageBox(char* lpszPrompt = 0x0012D844, unsigned int nType = 16, unsigned int nIDPrompt = 0) Riga 38 C++
[Codice esterno]
mfc80d.dll!AfxMessageBox(const char * lpszText=0x0012d844, unsigned int nType=16, unsigned int nIDHelp=0) Riga 148 C++
mfc80d.dll!CException::ReportError(unsigned int nType=16, unsigned int nError=61704) Riga 113 C++
mfc80d.dll!CWinApp::ProcessWndProcException(CException * e=0x783eb2a8, const tagMSG * pMsg=0x0015cda4) Riga 977 C++
mfc80d.dll!AfxProcessWndProcException(CException * e=0x783eb2a8, const tagMSG * pMsg=0x0015cda4) Riga 214 C++
mfc80d.dll!AfxCallWndProc(CWnd * pWnd=0x06cf6e28, HWND__ * hWnd=0x00170776, unsigned int nMsg=513, unsigned int wParam=1, long lParam=16974059) Riga 248 C++
mfc80d.dll!AfxWndProc(HWND__ * hWnd=0x00170776, unsigned int nMsg=513, unsigned int wParam=1, long lParam=16974059) Riga 389 C++
mfc80d.dll!AfxWndProcBase(HWND__ * hWnd=0x00170776, unsigned int nMsg=513, unsigned int wParam=1, long lParam=16974059) Riga 407 C++
user32.dll!7e398734()
user32.dll!7e398816()
user32.dll!7e3aa013()
user32.dll!7e3aa039()
opengl32.dll!5f16699b()
mfc80d.dll!CThreadLocalObject::GetData(CNoTrackObject * (void)* pfnCreateObject=0x5f166780) Riga 419 C++
user32.dll!7e398816()
user32.dll!7e3989cd()
user32.dll!7e3996c7()
mfc80d.dll!AfxInternalPumpMessage() Riga 183 C++
mfc80d.dll!CWinThread::PumpMessage() Riga 896 C++
mfc80d.dll!CWinThread::Run() Riga 625 C++
mfc80d.dll!CWinApp::Run() Riga 889 C++
mfc80d.dll!AfxWinMain(HINSTANCE__ * hInstance=0x00400000, HINSTANCE__ * hPrevInstance=0x00000000, char * lpCmdLine=0x00151f26, int nCmdShow=5) Riga 47 C++
DentalVox.exe!WinMain(HINSTANCE__ * hInstance=0x00400000, HINSTANCE__ * hPrevInstance=0x00000000, char * lpCmdLine=0x00151f26, int nCmdShow=5) Riga 29 C++
DentalVox.exe!__tmainCRTStartup() Riga 578 C
DentalVox.exe!WinMainCRTStartup() Riga 403 C
mfc80d.dll!AfxMessageBox(const char * lpszText=0x0012d844, unsigned int nType=16, unsigned int nIDHelp=0) Riga 148 C++
mfc80d.dll!CException::ReportError(unsigned int nType=16, unsigned int nError=61704) Riga 113 C++
mfc80d.dll!CWinApp::ProcessWndProcException(CException * e=0x783eb2a8, const tagMSG * pMsg=0x0015cda4) Riga 977 C++
mfc80d.dll!AfxProcessWndProcException(CException * e=0x783eb2a8, const tagMSG * pMsg=0x0015cda4) Riga 214 C++
mfc80d.dll!AfxCallWndProc(CWnd * pWnd=0x06cf6e28, HWND__ * hWnd=0x00170776, unsigned int nMsg=513, unsigned int wParam=1, long lParam=16974059) Riga 248 C++
mfc80d.dll!AfxWndProc(HWND__ * hWnd=0x00170776, unsigned int nMsg=513, unsigned int wParam=1, long lParam=16974059) Riga 389 C++
mfc80d.dll!AfxWndProcBase(HWND__ * hWnd=0x00170776, unsigned int nMsg=513, unsigned int wParam=1, long lParam=16974059) Riga 407 C++
user32.dll!7e398734()
user32.dll!7e398816()
user32.dll!7e3aa013()
user32.dll!7e3aa039()
opengl32.dll!5f16699b()
mfc80d.dll!CThreadLocalObject::GetData(CNoTrackObject * (void)* pfnCreateObject=0x5f166780) Riga 419 C++
user32.dll!7e398816()
user32.dll!7e3989cd()
user32.dll!7e3996c7()
mfc80d.dll!AfxInternalPumpMessage() Riga 183 C++
mfc80d.dll!CWinThread::PumpMessage() Riga 896 C++
mfc80d.dll!CWinThread::Run() Riga 625 C++
mfc80d.dll!CWinApp::Run() Riga 889 C++
mfc80d.dll!AfxWinMain(HINSTANCE__ * hInstance=0x00400000, HINSTANCE__ * hPrevInstance=0x00000000, char * lpCmdLine=0x00151f26, int nCmdShow=5) Riga 47 C++
DentalVox.exe!WinMain(HINSTANCE__ * hInstance=0x00400000, HINSTANCE__ * hPrevInstance=0x00000000, char * lpCmdLine=0x00151f26, int nCmdShow=5) Riga 29 C++
DentalVox.exe!__tmainCRTStartup() Riga 578 C
DentalVox.exe!WinMainCRTStartup() Riga 403 C
ntdll.dll!7c937784()
ntdll.dll!7c937573()
ntdll.dll!7c92005d()
ntdll.dll!7c91dc1a()
ntdll.dll!7c92005d()
ntdll.dll!7c92005d()
ntdll.dll!7c937784()
ntdll.dll!7c937573()
ntdll.dll!7c927ef3()
ntdll.dll!7c920385()
ntdll.dll!7c927dba()
ntdll.dll!7c927e5f()
ntdll.dll!7c927e09()
ntdll.dll!7c927e09()
ntdll.dll!7c927ec0()
ntdll.dll!7c946f38()
mscoree.dll!7900b77b()
ntdll.dll!7c9201db()
mscoree.dll!7900b73d()
mscoree.dll!79004de3()
ntdll.dll!7c9201db()
kernel32.dll!7c817077()
ntdll.dll!7c946f38()
ntdll.dll!7c9201db()
First occurence involved code strips:
afxtls.cpp
inline void* CThreadSlotData::GetThreadValue(int nSlot)
{
EnterCriticalSection(&m_sect);
ASSERT(nSlot != 0 && nSlot < m_nMax);
ASSERT(m_pSlotData != NULL);
ASSERT(m_pSlotData[nSlot].dwFlags & SLOT_USED);
ASSERT(m_tlsIndex != (DWORD)-1);
if( nSlot <= 0 || nSlot >= m_nMax ) // check for retail builds.
{
LeaveCriticalSection(&m_sect);
return NULL;
}
CThreadData* pData = (CThreadData*)TlsGetValue(m_tlsIndex);
if (pData == NULL || nSlot >= pData->nCount)
{
LeaveCriticalSection(&m_sect);
return NULL;
}
void* pRetVal = pData->pData[nSlot];
LeaveCriticalSection(&m_sect);
=> return pRetVal;
}
ˆ
|
wingdi.cpp
CWindowDC::CWindowDC(CWnd* pWnd)
{
ASSERT(pWnd == NULL || ::IsWindow(pWnd->m_hWnd));
if (!Attach(::GetWindowDC(m_hWnd = pWnd->GetSafeHwnd())))
AfxThrowResourceException();
=>}
ˆ
|
extpaintmanager2.cpp
int CExtPaintManager::stat_GetBPP()
{
CWindowDC dc_desktop( NULL );
=> int nBitsPerPixel = ::GetDeviceCaps( dc_desktop.m_hDC, BITSPIXEL );
return nBitsPerPixel;
}
ˆ
|
extpopupmenuwnd.cpp
void CExtPopupBaseWnd::_InitAnimation()
{
ASSERT_VALID( this );
m_nAnimPercent = m_nAnimPercentOld = 0;
_AdjustAnimation( m_AnimationType );
if( ( m_AnimationType < 0
|| m_AnimationType > __AT_MAX_VALID_VALUE
)
&& m_AnimationType != __AT_CONTENT_DISPLAY
&& m_AnimationType != __AT_CONTENT_EXPAND
)
m_AnimationType = __AT_NONE;
if( m_AnimationType == __AT_RANDOM )
{
int nRand = rand() % (__AT_MAX_VALID_VALUE+1);
ASSERT( nRand >= 0 && nRand <= __AT_MAX_VALID_VALUE );
if( nRand == __AT_NONE || nRand == __AT_RANDOM )
nRand = __AT_FADE; // most cool of all effects
m_AnimationType = (e_animation_type_t)nRand;
}
=> int nBitsPerPixel = CExtPaintManager::stat_GetBPP();
if( nBitsPerPixel <= 8
&& m_AnimationType != __AT_CONTENT_EXPAND
&& m_AnimationType != __AT_CONTENT_DISPLAY
)
{
m_AnimationType = __AT_NONE;
m_bAnimFinished = true;
}
else
{
m_bAnimFinished =
(m_AnimationType == __AT_NONE) ? true : false;
}
// ASSERT(
// m_bmpScreenDst.GetSafeHandle() == NULL
// && m_bmpScreenSrc.GetSafeHandle() == NULL
// && m_bmpScreenTmp.GetSafeHandle() == NULL
// && m_clrFadeBitsSrc == NULL
// && m_clrFadeBitsDst == NULL
// && m_clrFadeBitsTmp == NULL
// );
if( m_bmpScreenDst.GetSafeHandle() != NULL )
m_bmpScreenDst.DeleteObject();
if( m_bmpScreenSrc.GetSafeHandle() != NULL )
m_bmpScreenSrc.DeleteObject();
// if( m_bmpScreenSrcAlt.GetSafeHandle() != NULL )
// m_bmpScreenSrcAlt.DeleteObject();
if( m_bmpScreenTmp.GetSafeHandle() != NULL )
m_bmpScreenTmp.DeleteObject();
m_clrFadeBitsSrc = NULL;
m_clrFadeBitsDst = NULL;
m_clrFadeBitsTmp = NULL;
}
ˆ
|
extpopupmenuwnd.cpp
CExtPopupBaseWnd::CExtPopupBaseWnd()
: m_bPrintState( false )
, m_eCombineAlign( __CMBA_NONE )
, m_hFont( NULL )
{
m_clrFadeBitsSrc
= m_clrFadeBitsDst
= m_clrFadeBitsTmp
= NULL;
m_AnimationType = g_DefAnimationType;
_InitAnimation();
m_ePlaySoundOnAnimationFinished =
=> CExtSoundPlayer::__NO_SOUND;
m_sizeFullItems.cx = m_sizeFullItems.cy = 1;
m_bExcludeAreaSpec
= m_bCombineWithEA
= false;
m_rcExcludeArea.SetRectEmpty();
m_ptTrack.x = m_ptTrack.y
= m_ptTrackOriginal.x = m_ptTrackOriginal.y
= m_ptTrackInvoked.x = m_ptTrackInvoked.y
= m_ptTrackWatched.x = m_ptTrackWatched.y
= 0;
PmBridge_Install();
}
ˆ
|
extpopupmenuwnd.cpp
CExtPopupMenuTipWnd::CExtPopupMenuTipWnd()
: m_bFlipHorz( false )
, m_bFlipVert( false )
, m_sizeClassicMargins( 3, 2 )
, m_sizeRounders( 12, 10 )
, m_sizeLeader( 25, 25 )
, m_nIconMarginDX( 5 )
, m_nBalloonDistance( 12 )
, m_nClassicDistance( 13 )
, m_eTS( CExtPopupMenuTipWnd::__ETS_BALLOON )
, m_nSizeShadow( -1 )
, m_ttLA( 0 )
, m_bPassiveMode( false )
, m_bDelayedLayeredBehavior( false )
, m_ptGuideLines( -32767, -32767 )
, m_nTransparencyKey( BYTE(0x0FF) )
, m_rcAlignment( 0, 0, 0, 0 )
, m_nPeriodDelayShowQuick( ID_PERIOD_DELAY_SHOW_QUICK )
, m_nPeriodDelayShowNormal( ID_PERIOD_DELAY_SHOW_NORMAL )
, m_hWndLastParent( NULL )
, m_bNoHideDetection( false )
=>{
m_AnimationType = __AT_NONE;
m_bAnimFinished = true;
ˆ
|
extncframe.cpp
CExtNcFrameImpl::CExtNcFrameImpl()
: m_bNcFrameImpl_PivotPmSyncMode( false )
, m_bNcFrameImpl_IsActive( false )
, m_bNcFrameImpl_RgnSet( false )
, m_bNcFrameImpl_RestoreBorder( false )
, m_bNcFrameImpl_DelatayedFrameRecalc( false )
, m_bNcFrameImpl_IsEnabled( true )
, m_bNcFrameImpl_IsDwmBased( true )
, m_bNcFrameImpl_Resizing( true )
, m_bNcFrameImpl_Moving( true )
, m_bNcFrameImpl_ResizingLoopTracking( false )
, m_bNcFrameImpl_MovingLoopTracking( false )
, m_bNcFrameImpl_QuickWindowPlacement( false )
, m_rcNcFrameImpl_ScClose( 0, 0, 0, 0 )
, m_rcNcFrameImpl_ScMaximize( 0, 0, 0, 0 )
, m_rcNcFrameImpl_ScMinimize( 0, 0, 0, 0 )
, m_rcNcFrameImpl_ScHelp( 0, 0, 0, 0 )
, m_rcNcFrameImpl_Text( 0, 0, 0, 0 )
, m_rcNcFrameImpl_Icon( 0, 0, 0, 0 )
, m_nNcFrameImpl_ScTrackedButtonHover( 0 )
, m_nNcFrameImpl_ScTrackedButtonPressed( 0 )
, m_strNcFrameImpl_TipMinimize( _T("") )
, m_strNcFrameImpl_TipMaximize( _T("") )
, m_strNcFrameImpl_TipRestore( _T("") )
, m_strNcFrameImpl_TipClose( _T("") )
, m_strNcFrameImpl_TipHelp( _T("") )
, m_dwNcFrameImpl_StyleInitial( 0 )
, m_dwNcFrameImpl_StyleExInitial( 0 )
, m_nNcFrameImpl_Lock( 0 )
, m_nNcFrameImpl_LastCheckCursorHT( HTNOWHERE )
, m_ptNcFrameImpl_LastCheckCursor( -32767, -32767 )
, m_pNcFrameImplBridge( NULL )
, m_bNcFrameImpl_HelperInsideNcHitTest( false )
, m_bNcFrameImpl_RestoreEnabledState( false )
, m_nNcFrameImpl_LastShowCmd( SW_HIDE )
, m_bNcFrameImpl_NcInitPassed( false )
, m_nNcFrameImpl_LastExternalNcHT( UINT(-1) )
, m_rcNcFrameImpl_LastExternalNcHT( -1, -1, -1, -1 )
, m_bNcFrameImpl_DwmSurfaceInitializationComplete( false )
, m_bNcFrameImpl_CreatePassed( false )
, m_bNcFrameImpl_AssigningRGN( false )
, m_bNcFrameImpl_InAdjustAdjustThemeSettings( false )
=>{
::memset( &m_NcFrameImpl_MinMaxInfo_Cache, 0, sizeof(MINMAXINFO) );
m_BridgeNC.NcFrameImpl_Set( this );
m_wndNcFrameImpl_Tip.SetTipStyle( CExtPopupMenuTipWnd::__ETS_RECTANGLE_NO_ICON );
m_wndNcFrameImpl_Tip.SetShadowSize( 0 );
}
ˆ
|
extncframe.h
template < >
class CExtNCW < CExtResizableDialog >
: public CExtResizableDialog
, public CExtNcFrameImpl
{
public:
=> CExtNCW()
{
}
ˆ
|
extcontrolscommon.cpp
CExtMsgBox::CExtMsgBox(
HWND hWndParent,
__EXT_MFC_SAFE_LPCTSTR strMessageText,
__EXT_MFC_SAFE_LPCTSTR strCaption, // = NULL
UINT nMsgBoxStyle, // = __EXT_MB_DEFAULT_STYLES
UINT nHelpID, // = 0
__EXT_MFC_SAFE_LPCTSTR strUniqueID, // = NULL // for __EXT_MB_DO_NOT_DISPLAY_AGAIN and __EXT_MB_DO_NOT_ASK_AGAIN
UINT nMsgBoxStyleEx // = __EXT_MB_EX_DEFAULT_STYLES
)
: m_wndEditMsgBoxMessageText( true )
, m_hWndParentFromCTOR( hWndParent )
, m_strMessageText( ( strMessageText == NULL ) ? _T("") : LPCTSTR(strMessageText) )
, m_strCaption( ( strCaption == NULL || _tcslen(strCaption) == 0 ) ? LPCTSTR( ::AfxGetAppName() ) : LPCTSTR(strCaption) )
, m_nMsgBoxStyle( nMsgBoxStyle )
, m_nMsgBoxStyleEx( nMsgBoxStyleEx )
, m_nHelpID( nHelpID )
, m_nTimeoutSeconds( 0 )
, m_bIsDisabledTimeout( false )
, m_nTimeoutTimer( 0 )
, m_nDefaultButtonDlgCtrlID( UINT(IDC_STATIC) )
, m_nEscapeButtonDlgCtrlID( UINT(IDC_STATIC) )
, m_sizeMessageText( 0, 0 )
, m_sizeCheckBox( 0, 0 )
, m_sizeButton( 0, 0 )
, m_strUniqueID( LPCTSTR(strUniqueID) != NULL ? LPCTSTR(strUniqueID) : _T("") ) // for __EXT_MB_DO_NOT_DISPLAY_AGAIN and __EXT_MB_DO_NOT_ASK_AGAIN
, m_sizeBorder( __EXT_MSG_BOX_DEFAULT_WINDOW_BORDER_WIDTH, __EXT_MSG_BOX_DEFAULT_WINDOW_BORDER_HEIGHT )
, m_sizeStdButton( __EXT_MSG_BOX_DEFAULT_BUTTON_WIDTH, __EXT_MSG_BOX_DEFAULT_BUTTON_HEIGHT )
, m_sizeStdButtonBorder( __EXT_MSG_BOX_DEFAULT_BUTTON_BORDER_WIDTH, __EXT_MSG_BOX_DEFAULT_BUTTON_BORDER_HEIGHT )
, m_nCheckBoxGap( __EXT_MSG_BOX_CHECK_BOX_ADDITIONAL_SPACE )
, m_nButtonSpace( __EXT_MSG_BOX_BTN_SPACE )
, m_nMinEditCtrlHeight( __EXT_MSG_BOX_DEFAULT_EDITOR_MIN_HEIGHT_PX )
, m_nMaxEditCtrlHeight( __EXT_MSG_BOX_DEFAULT_EDITOR_MAX_HEIGHT_PX )
, m_bDynamicIcon( false )
, m_clrEditorText( __EXT_MSG_BOX_DEFAULT_EDITOR_COLOR_TEXT )
, m_clrEditorBkgnd( __EXT_MSG_BOX_DEFAULT_EDITOR_COLOR_BKGND )
=>{
_AddDefaultIconStyle();
SetAutoSubclassChildControls();
}
ˆ
|
extcontrolscommon.cpp
int CExtMsgBox::DoMsgBox(
HWND hWndParent,
__EXT_MFC_SAFE_LPCTSTR strMessageText,
__EXT_MFC_SAFE_LPCTSTR strCaption, // = NULL
UINT nMsgBoxStyle, // = __EXT_MB_DEFAULT_STYLES
UINT nHelpID, // = 0
__EXT_MFC_SAFE_LPCTSTR strUniqueID, // = NULL // for __EXT_MB_DO_NOT_DISPLAY_AGAIN and __EXT_MB_DO_NOT_ASK_AGAIN
UINT nMsgBoxStyleEx, // = __EXT_MB_EX_DEFAULT_STYLES
UINT nTimeoutSeconds, // = 0
bool bIsDisabledTimeout, // = false
CExtBitmap * pBmpIcon // = NULL
)
{
__PROF_UIS_MANAGE_STATE;
if( ::GetCapture() != NULL )
::ReleaseCapture(); // force release mouse capture
=> CExtMsgBox dlg( hWndParent, strMessageText, strCaption, nMsgBoxStyle, nHelpID, strUniqueID, nMsgBoxStyleEx );
if( nTimeoutSeconds > 0 )
dlg.TimeoutSet( nTimeoutSeconds, bIsDisabledTimeout );
if( pBmpIcon != NULL && ( ! pBmpIcon->IsEmpty() ) )
dlg.m_bmpIcon = (*pBmpIcon);
//HWND hWndFocusRestore = ::GetFocus();
int nRetVal = int( dlg.DoModal() );
// if( hWndFocusRestore != NULL
// && ::IsWindow( hWndFocusRestore )
// && ::IsWindowEnabled( hWndFocusRestore )
// && ( ( ::__EXT_MFC_GetWindowLong( hWndFocusRestore, GWL_STYLE ) ) & WS_VISIBLE ) != 0
// && ::GetFocus() != hWndFocusRestore
// )
// {
// CExtPopupMenuWnd::PassMsgLoop( false );
// if( ::IsWindow( hWndFocusRestore )
// && ::IsWindowEnabled( hWndFocusRestore )
// && ( ( ::__EXT_MFC_GetWindowLong( hWndFocusRestore, GWL_STYLE ) ) & WS_VISIBLE ) != 0
// && ::GetFocus() != hWndFocusRestore
// )
// ::SetFocus( hWndFocusRestore );
// }
return nRetVal;
}
ˆ
|
extcontrolscommon.cpp
int ProfUISMsgBox(
HWND hWndParent,
__EXT_MFC_SAFE_LPCTSTR strMessageText,
__EXT_MFC_SAFE_LPCTSTR strCaption, // = NULL
UINT nMsgBoxStyle, // = __EXT_MB_DEFAULT_STYLES
UINT nHelpID, // = 0
__EXT_MFC_SAFE_LPCTSTR strUniqueID, // = NULL // for __EXT_MB_DO_NOT_DISPLAY_AGAIN and __EXT_MB_DO_NOT_ASK_AGAIN
UINT nMsgBoxStyleEx, // = __EXT_MB_EX_DEFAULT_STYLES
UINT nTimeoutSeconds, // = 0
bool bIsDisabledTimeout, // = false
CExtBitmap * pBmpIcon // = NULL
)
{
__PROF_UIS_MANAGE_STATE;
=> return CExtMsgBox::DoMsgBox( hWndParent, strMessageText, strCaption, nMsgBoxStyle, nHelpID, strUniqueID, nMsgBoxStyleEx, nTimeoutSeconds, bIsDisabledTimeout, pBmpIcon );
}
ˆ
|
DentalVox.h
class CDentalVoxApp : public CWinApp
{
public:
=> IMPLEMENT_CWinAPP_DoMessageBox;
CDentalVoxApp();
~CDentalVoxApp();
Second occurrence call stack:
ntdll.dll!7c91120e()
[I frame indicati di seguito possono essere errati e/o mancanti, non sono stati caricati simboli per ntdll.dll]
msvcr80d.dll!_CrtDbgBreak() Riga 89 C
msvcr80d.dll!_VCrtDbgReportA(int nRptType=2, const char * szFile=0x01a4bcf0, int nLine=4859, const char * szModule=0x00000000, const char * szFormat=0x00000000, char * arglist=0x001238b4) Riga 295 C
msvcr80d.dll!_CrtDbgReportV(int nRptType=2, const char * szFile=0x01a4bcf0, int nLine=4859, const char * szModule=0x00000000, const char * szFormat=0x00000000, char * arglist=0x001238b4) Riga 300 C
msvcr80d.dll!_CrtDbgReport(int nRptType=2, const char * szFile=0x01a4bcf0, int nLine=4859, const char * szModule=0x00000000, const char * szFormat=0x00000000, ...) Riga 317 C
mfc80d.dll!AfxAssertFailedLine(const char * lpszFileName=0x01a4bcf0, int nLine=4859) Riga 25 C++
> ProfUIS290md.dll!CExtBitmap::DrawSkinParts(HDC__ * hDC=0x00000000, const tagRECT & rcDstDraw={...}, const tagRECT & rcPadding={...}, CExtBitmap::e_DrawMethod_t eDM=__EDM_STRETCH, bool bDrawMiddlePart=true, bool bSmootherAsPossible=false, unsigned long dwRop=13369376) Riga 4859 C++
ProfUIS290md.dll!CExtPaintManagerOffice2007_Impl::StatusBar_EraseBackground(CDC & dc={...}, const tagRECT & rcClient={...}, const CExtStatusControlBar * pStatusBar=0x0725e470, long lParam=0) Riga 28383 C++
ProfUIS290md.dll!CExtStatusControlBar::OnPaintEntireBackground(CDC & dc={...}, const CRect & rcBk={...}) Riga 413 C++
ProfUIS290md.dll!CExtStatusControlBar::DoPaint(CDC * pDC=0x00123bc0) Riga 195 C++
ProfUIS290md.dll!CExtStatusControlBar::OnPaint() Riga 166 C++
mfc80d.dll!CWnd::OnWndMsg(unsigned int message=15, unsigned int wParam=0, long lParam=0, long * pResult=0x00123d78) Riga 2028 C++
mfc80d.dll!CWnd::WindowProc(unsigned int message=15, unsigned int wParam=0, long lParam=0) Riga 1741 C++
mfc80d.dll!CControlBar::WindowProc(unsigned int nMsg=15, unsigned int wParam=0, long lParam=0) Riga 504 C++
ProfUIS290md.dll!CExtStatusControlBar::WindowProc(unsigned int message=15, unsigned int wParam=0, long lParam=0) Riga 1984 C++
mfc80d.dll!AfxCallWndProc(CWnd * pWnd=0x0725e470, HWND__ * hWnd=0x000106ca, unsigned int nMsg=15, unsigned int wParam=0, long lParam=0) Riga 240 C++
mfc80d.dll!AfxWndProc(HWND__ * hWnd=0x000106ca, unsigned int nMsg=15, unsigned int wParam=0, long lParam=0) Riga 389 C++
mfc80d.dll!AfxWndProcBase(HWND__ * hWnd=0x000106ca, unsigned int nMsg=15, unsigned int wParam=0, long lParam=0) Riga 407 C++
user32.dll!7e398734()
user32.dll!7e398816()
user32.dll!7e3a8ea0()
user32.dll!7e3a8eec()
ntdll.dll!7c91e473()
user32.dll!7e3994d2()
user32.dll!7e3a8f10()
user32.dll!7e3a74b2()
user32.dll!7e398a10()
user32.dll!7e3a7721()
user32.dll!7e3a49c4()
user32.dll!7e3ba956()
msvcr80d.dll!_output_s_l(_iobuf * stream=0x000106b2, const char * format=0x001ee828, localeinfo_struct * plocinfo=0x001eb200, char * argptr=0x00012012) Riga 1164 C++
user32.dll!7e3e64a2()
user32.dll!7e3d0877()
user32.dll!7e3d082f()
msvcr80d.dll!__crtMessageBoxA(const char * lpText=0x001247a0, const char * lpCaption=0x00891174, unsigned int uType=73746) Riga 145 C
msvcr80d.dll!__crtMessageWindowA(int nRptType=2, const char * szFile=0x01a567d8, const char * szLine=0x00126814, const char * szModule=0x00000000, const char * szUserMessage=0x00125814) Riga 420 C
msvcr80d.dll!_VCrtDbgReportA(int nRptType=2, const char * szFile=0x01a567d8, int nLine=28946, const char * szModule=0x00000000, const char * szFormat=0x00000000, char * arglist=0x0012a8a8) Riga 417 C
msvcr80d.dll!_CrtDbgReportV(int nRptType=2, const char * szFile=0x01a567d8, int nLine=28946, const char * szModule=0x00000000, const char * szFormat=0x00000000, char * arglist=0x0012a8a8) Riga 300 C
msvcr80d.dll!_CrtDbgReport(int nRptType=2, const char * szFile=0x01a567d8, int nLine=28946, const char * szModule=0x00000000, const char * szFormat=0x00000000, ...) Riga 317 C
mfc80d.dll!AfxAssertFailedLine(const char * lpszFileName=0x01a567d8, int nLine=28946) Riga 25 C++
ProfUIS290md.dll!CExtPaintManagerOffice2007_Impl::NcFrame_Paint(CDC & dc={...}, const CExtCmdIcon * pIcon=0x0012ab64, const char * strCaption=0x094c0648, unsigned int nDrawTextAlignFlags=36, const tagRECT & rcFrame={...}, const tagRECT & rcClient={...}, const tagRECT & rcIcon={...}, const tagRECT & rcText={...}, const tagRECT & rcHelp={...}, const tagRECT & rcMinimize={...}, const tagRECT & rcMaximizeRestore={...}, const tagRECT & rcClose={...}, bool bFrameActive=false, bool bFrameEnabled=false, bool bFrameMaximized=true, CExtPaintManager::e_nc_button_state_t eStateButtonHelp=__ENCBS_DISABLED, CExtPaintManager::e_nc_button_state_t eStateButtonMinimize=__ENCBS_NORMAL, CExtPaintManager::e_nc_button_state_t eStateButtonMaximizeRestore=__ENCBS_NORMAL, CExtPaintManager::e_nc_button_state_t eStateButtonClose=__ENCBS_NORMAL, const CWnd * pWnd=0x0725dad0, long lParam=0) Riga 28946 C++
ProfUIS290md.dll!CExtNcFrameImpl::NcFrameImpl_OnNcPaint(CDC & dcPaint={...}, bool bOuterEmulationMode=false) Riga 1992 C++
ProfUIS290md.dll!CExtNcFrameImpl::NcFrameImpl_PreWindowProc(long & lResult=0, unsigned int message=133, unsigned int wParam=0, long lParam=0) Riga 2874 C++
[Codice esterno]
DentalVox.exe!CExtNCW<CFrameWnd>::WindowProc(unsigned int message = 133, unsigned int wParam = 0, int lParam = 0) Riga 376 C++
[Codice esterno]
mfc80d.dll!AfxCallWndProc(CWnd * pWnd=0x0725dad0, HWND__ * hWnd=0x000106b2, unsigned int nMsg=133, unsigned int wParam=0, long lParam=0) Riga 240 C++
mfc80d.dll!AfxWndProc(HWND__ * hWnd=0x000106b2, unsigned int nMsg=133, unsigned int wParam=0, long lParam=0) Riga 389 C++
mfc80d.dll!AfxWndProcBase(HWND__ * hWnd=0x000106b2, unsigned int nMsg=133, unsigned int wParam=0, long lParam=0) Riga 407 C++
user32.dll!7e398734()
user32.dll!7e398816()
user32.dll!7e3aa013()
user32.dll!7e3aa998()
ProfUIS290md.dll!CExtHookSink::HookChains_t::HookChainsWindowProc(unsigned int nMessage=133, unsigned int & wParam=0, long & lParam=0) Riga 227 C++
ProfUIS290md.dll!CExtHookSink::HookChains_t::g_HookWndProc(HWND__ * hWnd=0x000106b2, unsigned int nMessage=133, unsigned int wParam=0, long lParam=0) Riga 291 C++
user32.dll!7e398734()
user32.dll!7e3abdf1()
user32.dll!7e3a8ea0()
user32.dll!7e3a8eec()
ntdll.dll!7c91e473()
user32.dll!7e3994be()
user32.dll!7e3ac174()
user32.dll!7e3af40b()
mfc80d.dll!CWnd::SendMessageA(unsigned int message=133, unsigned int wParam=0, long lParam=0) Riga 42 C++
ProfUIS290md.dll!CExtNcFrameImpl::NcFrameImpl_PostWindowProc(long & lResult=0, unsigned int message=10, unsigned int wParam=0, long lParam=0) Riga 4088 C++
DentalVox.exe!CExtNCW<CFrameWnd>::WindowProc(unsigned int message = 10, unsigned int wParam = 0, int lParam = 0) Riga 384 C++
[Codice esterno]
mfc80d.dll!AfxCallWndProc(CWnd * pWnd=0x0725dad0, HWND__ * hWnd=0x000106b2, unsigned int nMsg=10, unsigned int wParam=0, long lParam=0) Riga 240 C++
mfc80d.dll!AfxWndProc(HWND__ * hWnd=0x000106b2, unsigned int nMsg=10, unsigned int wParam=0, long lParam=0) Riga 389 C++
mfc80d.dll!AfxWndProcBase(HWND__ * hWnd=0x000106b2, unsigned int nMsg=10, unsigned int wParam=0, long lParam=0) Riga 407 C++
user32.dll!7e398734()
user32.dll!7e398816()
user32.dll!7e3aa013()
user32.dll!7e3aa998()
ProfUIS290md.dll!CExtHookSink::HookChains_t::HookChainsWindowProc(unsigned int nMessage=10, unsigned int & wParam=0, long & lParam=0) Riga 227 C++
ProfUIS290md.dll!CExtHookSink::HookChains_t::g_HookWndProc(HWND__ * hWnd=0x000106b2, unsigned int nMessage=10, unsigned int wParam=0, long lParam=0) Riga 291 C++
user32.dll!7e398734()
user32.dll!7e398816()
user32.dll!7e3a8ea0()
user32.dll!7e3a8eec()
ntdll.dll!7c91e473()
user32.dll!7e3a9841()
user32.dll!7e3a985b()
mfc80d.dll!CDialog::DoModal() Riga 517 C++
ProfUIS290md.dll!CExtMsgBox::DoModal() Riga 9099 C++
ProfUIS290md.dll!CExtMsgBox::DoMsgBox(HWND__ * hWndParent=0x000106b2, const char * strMessageText=0x0012d844, const char * strCaption=0x004c7378, unsigned int nMsgBoxStyle=16, unsigned int nHelpID=0, const char * strUniqueID=0x00000000, unsigned int nMsgBoxStyleEx=0, unsigned int nTimeoutSeconds=0, bool bIsDisabledTimeout=false, CExtBitmap * pBmpIcon=0x00000000) Riga 9905 C++
ProfUIS290md.dll!ProfUISMsgBox(HWND__ * hWndParent=0x000106b2, const char * strMessageText=0x0012d844, const char * strCaption=0x004c7378, unsigned int nMsgBoxStyle=16, unsigned int nHelpID=0, const char * strUniqueID=0x00000000, unsigned int nMsgBoxStyleEx=0, unsigned int nTimeoutSeconds=0, bool bIsDisabledTimeout=false, CExtBitmap * pBmpIcon=0x00000000) Riga 9955 C++
DentalVox.exe!CDentalVoxApp::DoMessageBox(char* lpszPrompt = 0x0012D844, unsigned int nType = 16, unsigned int nIDPrompt = 0) Riga 38 C++
[Codice esterno]
mfc80d.dll!AfxMessageBox(const char * lpszText=0x0012d844, unsigned int nType=16, unsigned int nIDHelp=0) Riga 148 C++
mfc80d.dll!CException::ReportError(unsigned int nType=16, unsigned int nError=61704) Riga 113 C++
mfc80d.dll!CWinApp::ProcessWndProcException(CException * e=0x783eb2a8, const tagMSG * pMsg=0x0015cda4) Riga 977 C++
mfc80d.dll!AfxProcessWndProcException(CException * e=0x783eb2a8, const tagMSG * pMsg=0x0015cda4) Riga 214 C++
mfc80d.dll!AfxCallWndProc(CWnd * pWnd=0x072a0608, HWND__ * hWnd=0x000106b8, unsigned int nMsg=513, unsigned int wParam=1, long lParam=16974058) Riga 248 C++
mfc80d.dll!AfxWndProc(HWND__ * hWnd=0x000106b8, unsigned int nMsg=513, unsigned int wParam=1, long lParam=16974058) Riga 389 C++
mfc80d.dll!AfxWndProcBase(HWND__ * hWnd=0x000106b8, unsigned int nMsg=513, unsigned int wParam=1, long lParam=16974058) Riga 407 C++
user32.dll!7e398734()
user32.dll!7e398816()
user32.dll!7e3aa013()
user32.dll!7e3aa039()
opengl32.dll!5f16699b()
mfc80d.dll!CThreadLocalObject::GetData(CNoTrackObject * (void)* pfnCreateObject=0x5f166780) Riga 419 C++
user32.dll!7e398816()
user32.dll!7e3989cd()
user32.dll!7e3996c7()
mfc80d.dll!AfxInternalPumpMessage() Riga 183 C++
mfc80d.dll!CWinThread::PumpMessage() Riga 896 C++
mfc80d.dll!CWinThread::Run() Riga 625 C++
mfc80d.dll!CWinApp::Run() Riga 889 C++
mfc80d.dll!AfxWinMain(HINSTANCE__ * hInstance=0x00400000, HINSTANCE__ * hPrevInstance=0x00000000, char * lpCmdLine=0x00151f26, int nCmdShow=5) Riga 47 C++
DentalVox.exe!WinMain(HINSTANCE__ * hInstance=0x00400000, HINSTANCE__ * hPrevInstance=0x00000000, char * lpCmdLine=0x00151f26, int nCmdShow=5) Riga 29 C++
DentalVox.exe!__tmainCRTStartup() Riga 578 C
DentalVox.exe!WinMainCRTStartup() Riga 403 C
mfc80d.dll!AfxMessageBox(const char * lpszText=0x0012d844, unsigned int nType=16, unsigned int nIDHelp=0) Riga 148 C++
mfc80d.dll!CException::ReportError(unsigned int nType=16, unsigned int nError=61704) Riga 113 C++
mfc80d.dll!CWinApp::ProcessWndProcException(CException * e=0x783eb2a8, const tagMSG * pMsg=0x0015cda4) Riga 977 C++
mfc80d.dll!AfxProcessWndProcException(CException * e=0x783eb2a8, const tagMSG * pMsg=0x0015cda4) Riga 214 C++
mfc80d.dll!AfxCallWndProc(CWnd * pWnd=0x072a0608, HWND__ * hWnd=0x000106b8, unsigned int nMsg=513, unsigned int wParam=1, long lParam=16974058) Riga 248 C++
mfc80d.dll!AfxWndProc(HWND__ * hWnd=0x000106b8, unsigned int nMsg=513, unsigned int wParam=1, long lParam=16974058) Riga 389 C++
mfc80d.dll!AfxWndProcBase(HWND__ * hWnd=0x000106b8, unsigned int nMsg=513, unsigned int wParam=1, long lParam=16974058) Riga 407 C++
user32.dll!7e398734()
user32.dll!7e398816()
user32.dll!7e3aa013()
user32.dll!7e3aa039()
opengl32.dll!5f16699b()
mfc80d.dll!CThreadLocalObject::GetData(CNoTrackObject * (void)* pfnCreateObject=0x5f166780) Riga 419 C++
user32.dll!7e398816()
user32.dll!7e3989cd()
user32.dll!7e3996c7()
mfc80d.dll!AfxInternalPumpMessage() Riga 183 C++
mfc80d.dll!CWinThread::PumpMessage() Riga 896 C++
mfc80d.dll!CWinThread::Run() Riga 625 C++
mfc80d.dll!CWinApp::Run() Riga 889 C++
mfc80d.dll!AfxWinMain(HINSTANCE__ * hInstance=0x00400000, HINSTANCE__ * hPrevInstance=0x00000000, char * lpCmdLine=0x00151f26, int nCmdShow=5) Riga 47 C++
DentalVox.exe!WinMain(HINSTANCE__ * hInstance=0x00400000, HINSTANCE__ * hPrevInstance=0x00000000, char * lpCmdLine=0x00151f26, int nCmdShow=5) Riga 29 C++
DentalVox.exe!__tmainCRTStartup() Riga 578 C
DentalVox.exe!WinMainCRTStartup() Riga 403 C
ntdll.dll!7c937784()
ntdll.dll!7c937573()
ntdll.dll!7c92005d()
ntdll.dll!7c91dc1a()
ntdll.dll!7c92005d()
ntdll.dll!7c92005d()
ntdll.dll!7c937784()
ntdll.dll!7c937573()
ntdll.dll!7c92005d()
kernel32.dll!7c80262a()
kernel32.dll!7c802600()
ntdll.dll!7c9201db()
ntdll.dll!7c946f38()
mscoree.dll!7900b77b()
ntdll.dll!7c9201db()
mscoree.dll!7900b73d()
mscoree.dll!79004de3()
ntdll.dll!7c9201db()
kernel32.dll!7c817077()
ntdll.dll!7c946f38()
ntdll.dll!7c9201db()
Second occurrence involved code strips:
dbgrptt.c
_CRTIMP void _cdecl _CrtDbgBreak(
void
)
{
DebugBreak();
=>}
ˆ
|
dbgrptt.c
// nRptType = 2
// szFile = 0x01a4bcf0 "..\Src\ExtCmdIcon.cpp"
// nLine = 4859
// szModule = 0x00000000 <Ptr>
// szFormat = 0x00000000 <Ptr>
_CRTIMP int __cdecl _VCrtDbgReportA
(
int nRptType,
const char * szFile,
int nLine,
const char * szModule,
const char * szFormat,
va_list arglist
)
{
int retval=0;
int handled=FALSE;
char szLineMessage[DBGRPT_MAX_MSG] = {0};
char szOutMessage[DBGRPT_MAX_MSG] = {0};
wchar_t szOutMessage2[DBGRPT_MAX_MSG] = {0};
char szUserMessage[DBGRPT_MAX_MSG] = {0};
if (nRptType < 0 || nRptType >= _CRT_ERRCNT)
return -1;
/*
* handle the (hopefully rare) case of
*
* 1) ASSERT while already dealing with an ASSERT
* If it’s a recursive assert, the mlock(_DEBUG_LOCK) will not
* block(because we are in the same thread) & _crtAssertBusy value will
* cause DebugBreak to be called.
* or
* 2) two threads asserting at the same time - here
* mlock(_DEBUG_LOCK) will cause the asserts to be serialized
*/
_mlock(_DEBUG_LOCK);
__try
{
if (_CRT_ASSERT == nRptType && _CrtInterlockedIncrement(&_crtAssertBusy) > 0)
{
/* use only ’safe’ functions -- must not assert in here! */
_ERRCHECK(_itoa_s(nLine, szLineMessage, DBGRPT_MAX_MSG, 10));
OutputDebugStringA("Second Chance Assertion Failed: File ");
OutputDebugStringA(szFile ? szFile : "<file unknown>");
OutputDebugStringA(", Line ");
OutputDebugStringA(szLineMessage);
OutputDebugStringA("\n");
_CrtDbgBreak();
=> retval=-1;
}
ˆ
|
dbgrpt.c
// __inline int __cdecl _CrtDbgReportTV(...)
// Row 300
#endif /* _UNICODE */
=> return _VCrtDbgReportT(nRptType,szFile,nLine,szModule,szFormat,arglist);
}
ˆ
|
dbgrpt.c
_CRTIMP int __cdecl _CrtDbgReportT(
int nRptType,
const TCHAR * szFile,
int nLine,
const TCHAR * szModule,
const TCHAR * szFormat,
...
)
{
int retval;
va_list arglist;
va_start(arglist,szFormat);
=> retval = _CrtDbgReportTV(nRptType, szFile, nLine, szModule, szFormat, arglist);
va_end(arglist);
return retval;
}
ˆ
|
afxasert.cpp
BOOL AFXAPI AfxAssertFailedLine(LPCSTR lpszFileName, int nLine)
{
#ifndef _AFX_NO_DEBUG_CRT
// we remove WM_QUIT because if it is in the queue then the message box
// won’t display
MSG msg;
BOOL bQuit = PeekMessage(&msg, NULL, WM_QUIT, WM_QUIT, PM_REMOVE);
=> BOOL bResult = _CrtDbgReport(_CRT_ASSERT, lpszFileName, nLine, NULL, NULL);
if (bQuit)
PostQuitMessage((int)msg.wParam);
return bResult;
#else
// Not supported.
#error _AFX_NO_DEBUG_CRT is not supported.
#endif // _AFX_NO_DEBUG_CRT
}
ˆ
|
extcmdicon.cpp
// hDC = 0x00000000 {unused=??? }
// rcDstDraw = {top=0 bottom=18 left=0 right=1280}
// rcPadding = {top=1 bottom=1 left=0 right=0}
// eDM = __EDM_STRETCH
// bDrawMiddlePart = true
// bSmootherAsPossible = false
// dwRop = 13369376
bool CExtBitmap::DrawSkinParts(
HDC hDC,
const RECT & rcDstDraw,
const RECT & rcPadding,
e_DrawMethod_t eDM,
bool bDrawMiddlePart, // = true
bool bSmootherAsPossible, // = false
DWORD dwRop // = SRCCOPY
) const
{
=> ASSERT( hDC != NULL );
ASSERT( rcPadding.left >= 0 );
ASSERT( rcPadding.right >= 0 );
ASSERT( rcPadding.top >= 0 );
ASSERT( rcPadding.bottom >= 0 );
ˆ
|
extpaintmanager.cpp
// bool CExtPaintManagerOffice2007_Impl::StatusBar_EraseBackground(...)
// Row 28383
// dc.m_hDC = 0x00000000 {unused=??? }
// rcClient = {top=0 bottom=18 left=0 right=1280}
// m_rcStatusBkPadding = {top=1 bottom=1 left=0 right=0}
// CExtBitmap::__EDM_STRETCH = 2
if( bLastIsDark )
m_bmpStatusBkDark.DrawSkinParts(
dc.m_hDC,
rcClient,
m_rcStatusBkPadding,
CExtBitmap::__EDM_STRETCH
);
else
m_bmpStatusBkLight.DrawSkinParts(
dc.m_hDC,
rcClient,
m_rcStatusBkPadding,
CExtBitmap::__EDM_STRETCH
);
=> for( nPaneIdx = 0; nPaneIdx < nPaneCount; nPaneIdx++ )
{
CExtStatusControlBar::e_StatusPaneBackgroundAccent_t eSPBA =
pStatusBar->OnQueryPaneBackgroundAccent( nPaneIdx );
ˆ
|
extstatuscontrolbar.cpp
void CExtStatusControlBar::OnPaintEntireBackground(
CDC & dc,
const CRect & rcBk
)
{
ASSERT_VALID( this );
if( m_bCompleteRepaint
&& PmBridge_GetPM()->StatusBar_EraseBackground(
dc,
rcBk,
this
)
=> )
ˆ
|
extstatuscontrolbar.cpp
void CExtStatusControlBar::DoPaint( CDC * pDC )
{
ASSERT_VALID( this );
ASSERT_VALID( pDC );
// XP painting & last pane size fixed by Dmitry Yakovlev
_SyncStatusBarColors();
CRect rcClient;
GetClientRect( &rcClient );
CExtPaintManager::stat_ExcludeChildAreas(
*pDC,
GetSafeHwnd(),
CExtPaintManager::stat_DefExcludeChildAreaCallback
);
CExtMemoryDC dc(
pDC,
&rcClient
);
UpdateAllPanes( FALSE, TRUE );
// erase client area with the current color/gradient
CRect rcFill( rcClient );
rcFill.left = rcFill.top = 0;
rcFill.right -= rcClient.left;
rcFill.bottom -= rcClient.top;
=> OnPaintEntireBackground( dc, rcFill );
ˆ
|
extstatuscontrolbar.cpp
void CExtStatusControlBar::OnPaint()
{
ASSERT_VALID( this );
if( m_bLockPainting )
return;
if( !m_bCompleteRepaint )
{
Default();
return;
}
CPaintDC dcPaint( this );
=> DoPaint( &dcPaint );
}
ˆ
|
wincore.cpp
// BOOL CWnd::OnWndMsg(...)
// Row 2028
case AfxSig_v_v_v:
(this->*mmf.pfn_v_v)();
=> break;
ˆ
|
wincore.cpp
LRESULT CWnd::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
// OnWndMsg does most of the work, except for DefWindowProc call
LRESULT lResult = 0;
=> if (!OnWndMsg(message, wParam, lParam, &lResult))
lResult = DefWindowProc(message, wParam, lParam);
return lResult;
}
ˆ
|
barcore.cpp
// LRESULT CControlBar::WindowProc(...)
// Row 504
// otherwise, just handle in default way
=> lResult = CWnd::WindowProc(nMsg, wParam, lParam);
return lResult;
}
ˆ
|
extstatuscontrolbar.cpp
// LRESULT CExtStatusControlBar::WindowProc(...)
// Row 1984
if( (lParam&PRF_CHILDREN) != 0 )
CExtPaintManager::stat_PrintChildren(
m_hWnd,
message,
pDC->GetSafeHdc(),
lParam,
false
);
return (!0);
}
return CStatusBar::WindowProc(message, wParam, lParam);
=>}
ˆ
|
wincore.cpp
LRESULT AFXAPI AfxCallWndProc(CWnd* pWnd, HWND hWnd, UINT nMsg,
WPARAM wParam = 0, LPARAM lParam = 0)
{
_AFX_THREAD_STATE* pThreadState = _afxThreadState.GetData();
MSG oldState = pThreadState->m_lastSentMsg; // save for nesting
pThreadState->m_lastSentMsg.hwnd = hWnd;
pThreadState->m_lastSentMsg.message = nMsg;
pThreadState->m_lastSentMsg.wParam = wParam;
pThreadState->m_lastSentMsg.lParam = lParam;
#ifdef _DEBUG
_AfxTraceMsg(_T("WndProc"), &pThreadState->m_lastSentMsg);
#endif
// Catch exceptions thrown outside the scope of a callback
// in debug builds and warn the user.
LRESULT lResult;
TRY
{
#ifndef _AFX_NO_OCC_SUPPORT
// special case for WM_DESTROY
if ((nMsg == WM_DESTROY) && (pWnd->m_pCtrlCont != NULL))
pWnd->m_pCtrlCont->OnUIActivate(NULL);
#endif
// special case for WM_INITDIALOG
CRect rectOld;
DWORD dwStyle = 0;
if (nMsg == WM_INITDIALOG)
_AfxPreInitDialog(pWnd, &rectOld, &dwStyle);
// delegate to object’s WindowProc
=> lResult = pWnd->WindowProc(nMsg, wParam, lParam);
ˆ
|
wincore.cpp
LRESULT CALLBACK
AfxWndProc(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam)
{
// special message which identifies the window as using AfxWndProc
if (nMsg == WM_QUERYAFXWNDPROC)
return 1;
// all other messages route through message map
CWnd* pWnd = CWnd::FromHandlePermanent(hWnd);
ASSERT(pWnd != NULL);
ASSERT(pWnd==NULL || pWnd->m_hWnd == hWnd);
if (pWnd == NULL || pWnd->m_hWnd != hWnd)
return ::DefWindowProc(hWnd, nMsg, wParam, lParam);
return AfxCallWndProc(pWnd, hWnd, nMsg, wParam, lParam);
=>}
ˆ
|
afxstate.cpp
LRESULT CALLBACK
AfxWndProcBase(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam)
{
AFX_MANAGE_STATE(_afxBaseModuleState.GetData());
=> return AfxWndProc(hWnd, nMsg, wParam, lParam);
}
ˆ
|
output.c
// Row 1164
=> WRITE_CHAR(ch, &charsout);
break;
case ST_PERCENT:
/* set default value of conversion parameters */
prefixlen = fldwidth = no_output = capexp = 0;
flags = 0;
precision = -1;
bufferiswide = 0; /* default */
break;
ˆ
|
crtmbox.c
// #ifdef _UNICODE
// int __cdecl __crtMessageBoxW(
// #else /* _UNICODE */
// int __cdecl __crtMessageBoxA(
// Row 145
if (fNonInteractive)
{
_ERRCHECK(_get_winmajor(&winmajor));
if (winmajor >= 4)
uType |= MB_SERVICE_NOTIFICATION;
else
uType |= MB_SERVICE_NOTIFICATION_NT3X;
}
else
{
if (pfnGetActiveWindow != enull)
hWndParent = ((PFNGetActiveWindow) _decode_pointer(pfnGetActiveWindow))();
if (hWndParent != NULL && pfnGetLastActivePopup != enull)
hWndParent = ((PFNGetLastActivePopup) _decode_pointer(pfnGetLastActivePopup))(hWndParent);
}
return ((PFNMessageBox) _decode_pointer(pfnMessageBox))(hWndParent, lpText, lpCaption, uType);
=>}
ˆ
|
dbgrpt.c
// int __cdecl __crtMessageWindow(...)
// Row 420
#ifdef _UNICODE
_ERRCHECK(wcscpy_s(szOutMessage, DBGRPT_MAX_MSG, _CRT_WIDE(DBGRPT_TOOLONGMSG)));
#else /* _UNICODE */
_ERRCHECK(strcpy_s(szOutMessage, DBGRPT_MAX_MSG, DBGRPT_TOOLONGMSG));
#endif /* _UNICODE */
/* Report the warning/error */
nCode = __crtMessageBox(szOutMessage,
_T("Microsoft Visual C++ Debug Library"),
=> MB_TASKMODAL|MB_ICONHAND|MB_ABORTRETRYIGNORE|MB_SETFOREGROUND);
ˆ
|
dbgrptt.c
// _CRTIMP int __cdecl _VCrtDbgReportA(...)
// Row 417
if (_CrtDbgMode[nRptType] & _CRTDBG_MODE_WNDW)
{
szLineMessage[0] = 0;
if (nLine)
{
_ERRCHECK(_itoa_s(nLine, szLineMessage, DBGRPT_MAX_MSG, 10));
}
=> retval = __crtMessageWindowA(nRptType, szFile, (nLine ? szLineMessage : NULL), szModule, szUserMessage);
}
}
}
}
}
ˆ
|
dbgrpt.c
// __inline int __cdecl _CrtDbgReportTV(...)
// Row 300
#endif /* _UNICODE */
=> return _VCrtDbgReportT(nRptType,szFile,nLine,szModule,szFormat,arglist);
}
ˆ
|
dbgrpt.c
_CRTIMP int __cdecl _CrtDbgReportT(
int nRptType,
const TCHAR * szFile,
int nLine,
const TCHAR * szModule,
const TCHAR * szFormat,
...
)
{
int retval;
va_list arglist;
va_start(arglist,szFormat);
=> retval = _CrtDbgReportTV(nRptType, szFile, nLine, szModule, szFormat, arglist);
va_end(arglist);
return retval;
}
ˆ
|
afxasert.cpp
BOOL AFXAPI AfxAssertFailedLine(LPCSTR lpszFileName, int nLine)
{
#ifndef _AFX_NO_DEBUG_CRT
// we remove WM_QUIT because if it is in the queue then the message box
// won’t display
MSG msg;
BOOL bQuit = PeekMessage(&msg, NULL, WM_QUIT, WM_QUIT, PM_REMOVE);
=> BOOL bResult = _CrtDbgReport(_CRT_ASSERT, lpszFileName, nLine, NULL, NULL);
if (bQuit)
PostQuitMessage((int)msg.wParam);
return bResult;
#else
// Not supported.
#error _AFX_NO_DEBUG_CRT is not supported.
#endif // _AFX_NO_DEBUG_CRT
}
ˆ
|
extpaintmanager.cpp
void CExtPaintManagerOffice2007_Impl::NcFrame_Paint(
CDC & dc,
const CExtCmdIcon * pIcon,
__EXT_MFC_SAFE_LPCTSTR strCaption,
UINT nDrawTextAlignFlags,
const RECT & rcFrame,
const RECT & rcClient,
const RECT & rcIcon,
const RECT & rcText,
const RECT & rcHelp,
const RECT & rcMinimize,
const RECT & rcMaximizeRestore,
const RECT & rcClose,
bool bFrameActive,
bool bFrameEnabled,
bool bFrameMaximized,
CExtPaintManager::e_nc_button_state_t eStateButtonHelp,
CExtPaintManager::e_nc_button_state_t eStateButtonMinimize,
CExtPaintManager::e_nc_button_state_t eStateButtonMaximizeRestore,
CExtPaintManager::e_nc_button_state_t eStateButtonClose,
const CWnd * pWnd,
LPARAM lParam // = 0L
) const
{
ASSERT_VALID( this );
=> ASSERT( dc.GetSafeHdc() != NULL );
ˆ
|
extncframe.cpp
// void CExtNcFrameImpl::NcFrameImpl_OnNcPaint(...)
// Row 1992
pPM->NcFrame_Paint(
dc,
bDrawIcon ? (&_icon) : NULL,
bDrawCaptionText ? LPCTSTR(strCaption) : _T(""),
nDtFlags,
rcWnd,
rcClient,
rcDrawIcon,
rcDrawText,
m_rcNcFrameImpl_ScHelp,
m_rcNcFrameImpl_ScMinimize,
m_rcNcFrameImpl_ScMaximize,
m_rcNcFrameImpl_ScClose,
bFrameActive,
bFrameEnabled,
bFrameMaximized,
eStateButtonHelp,
eStateButtonMinimize,
eStateButtonMaximizeRestore,
eStateButtonClose,
pWndFrameImpl
=> );
ˆ
|
extncframe.cpp
// bool CExtNcFrameImpl::NcFrameImpl_PreWindowProc(...)
// Row 2874
case WM_NCPAINT:
if( ! NcFrameImpl_IsDwmBased() )
{
if( (! NcFrameImpl_IsForceEmpty() )
// || m_bNcFrameImpl_RestoreEnabledState
)
{
CMDIChildWnd * pWndMdiChild = DYNAMIC_DOWNCAST( CMDIChildWnd, pWndFrameImpl );
if( pWndMdiChild != NULL && pWndMdiChild->IsWindowEnabled() )
{
HWND hWndMDIClient = ::GetParent( pWndMdiChild->m_hWnd );
HWND hWndActiveChildFrame = (HWND) ::SendMessage( hWndMDIClient, WM_MDIGETACTIVE, 0, NULL );
if( hWndActiveChildFrame != NULL )
m_bNcFrameImpl_IsActive = ( hWndActiveChildFrame == pWndMdiChild->m_hWnd ) ? true : false;
}
CWindowDC dcPaint( pWndFrameImpl );
=> NcFrameImpl_OnNcPaint( dcPaint );
lResult = 0;
return true;
}
} //if( ! NcFrameImpl_IsDwmBased() )
break;
ˆ
|
extncframe.h
virtual LRESULT WindowProc( UINT message, WPARAM wParam, LPARAM lParam )
{
HWND hWndOwn = m_hWnd;
LRESULT lResult = 0;
if( NcFrameImpl_FilterWindowProc( lResult, message, wParam, lParam ) )
return lResult;
if( ! ::IsWindow( hWndOwn ) )
return lResult;
if( ! NcFrameImpl_IsSupported() )
return _BTNCW::WindowProc( message, wParam, lParam );
=> if( NcFrameImpl_PreWindowProc( lResult, message, wParam, lParam ) )
return lResult;
lResult = _BTNCW::WindowProc( message, wParam, lParam );
if( ! ::IsWindow( hWndOwn ) )
return lResult;
if( CWnd::FromHandlePermanent(hWndOwn) == NULL )
return lResult;
NcFrameImpl_PostWindowProc( lResult, message, wParam, lParam );
return lResult;
}
ˆ
|
wincore.cpp
LRESULT AFXAPI AfxCallWndProc(CWnd* pWnd, HWND hWnd, UINT nMsg,
WPARAM wParam = 0, LPARAM lParam = 0)
{
_AFX_THREAD_STATE* pThreadState = _afxThreadState.GetData();
MSG oldState = pThreadState->m_lastSentMsg; // save for nesting
pThreadState->m_lastSentMsg.hwnd = hWnd;
pThreadState->m_lastSentMsg.message = nMsg;
pThreadState->m_lastSentMsg.wParam = wParam;
pThreadState->m_lastSentMsg.lParam = lParam;
#ifdef _DEBUG
_AfxTraceMsg(_T("WndProc"), &pThreadState->m_lastSentMsg);
#endif
// Catch exceptions thrown outside the scope of a callback
// in debug builds and warn the user.
LRESULT lResult;
TRY
{
#ifndef _AFX_NO_OCC_SUPPORT
// special case for WM_DESTROY
if ((nMsg == WM_DESTROY) && (pWnd->m_pCtrlCont != NULL))
pWnd->m_pCtrlCont->OnUIActivate(NULL);
#endif
// special case for WM_INITDIALOG
CRect rectOld;
DWORD dwStyle = 0;
if (nMsg == WM_INITDIALOG)
_AfxPreInitDialog(pWnd, &rectOld, &dwStyle);
// delegate to object’s WindowProc
=> lResult = pWnd->WindowProc(nMsg, wParam, lParam);
ˆ
|
wincore.cpp
LRESULT CALLBACK
AfxWndProc(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam)
{
// special message which identifies the window as using AfxWndProc
if (nMsg == WM_QUERYAFXWNDPROC)
return 1;
// all other messages route through message map
CWnd* pWnd = CWnd::FromHandlePermanent(hWnd);
ASSERT(pWnd != NULL);
ASSERT(pWnd==NULL || pWnd->m_hWnd == hWnd);
if (pWnd == NULL || pWnd->m_hWnd != hWnd)
return ::DefWindowProc(hWnd, nMsg, wParam, lParam);
return AfxCallWndProc(pWnd, hWnd, nMsg, wParam, lParam);
=>}
ˆ
|
afxstate.cpp
LRESULT CALLBACK
AfxWndProcBase(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam)
{
AFX_MANAGE_STATE(_afxBaseModuleState.GetData());
=> return AfxWndProc(hWnd, nMsg, wParam, lParam);
}
ˆ
|
exthook.cpp
// struct __PROF_UIS_API CExtHookSink::HookChains_t
// LRESULT HookChainsWindowProc(...)
// Row 227
if( nMessage == WM_NCDESTROY )
{
DestroyChains( true );
// if( pWndPermanent != NULL )
// {
// __PROF_UIS_MANAGE_STATE;
// CWnd * pWndExamine =
// CWnd::FromHandlePermanent( hWndHooked );
// if( pWndExamine != pWndPermanent )
// return 0L;
// } // if( pWndPermanent != NULL )
if( bEatNcDestroy )
return 0L;
} // if( nMessage == WM_NCDESTROY )
LRESULT lResult =
::CallWindowProc(
pWNDPROC,
hWndHooked,
nMessage,
wParam,
lParam
=> );
ˆ
|
exthook.cpp
CExtHookSink::HookChains_t * pHookChains = NULL;
if( g_HookChainsMap.Lookup( hWnd, pHookChains ) )
{
ASSERT( pHookChains != NULL );
ASSERT( pHookChains->m_hWndHooked == hWnd );
lResult =
pHookChains->HookChainsWindowProc(
nMessage,
wParam,
lParam
=> );
if( nMessage == WM_NCDESTROY || ( ! ::IsWindow( hWnd ) ) )
g_HookChainsMap.RemoveKey( hWnd );
} // if( g_HookChainsMap.Lookup( hWnd, pHookChains ) )
refMsgMfcCurr = msgMfcSaved;
return lResult;
}
ˆ
|
afxwin2.inl
_AFXWIN_INLINE LRESULT CWnd::_AFX_FUNCNAME(SendMessage)(UINT message, WPARAM wParam, LPARAM lParam)
=> { ASSERT(::IsWindow(m_hWnd)); return ::SendMessage(m_hWnd, message, wParam, lParam); }
#pragma push_macro("SendMessage")
#undef SendMessage
ˆ
|
extncframe.cpp
void CExtNcFrameImpl::NcFrameImpl_PostWindowProc( LRESULT & lResult, UINT message, WPARAM wParam, LPARAM lParam )
{
lResult;
switch( message )
{
case WM_ENABLE:
if( m_bNcFrameImpl_IsActive && wParam == 0 )
{
m_bNcFrameImpl_IsActive = false;
if( NcFrameImpl_IsSupported()
&& ( ! NcFrameImpl_IsDwmBased() )
)
{
CWnd * pWndFrameImpl = (CWnd *)NcFrameImpl_GetFrameWindow();
pWndFrameImpl->SendMessage( WM_NCPAINT );
}
}
=> break;
case WM_CAPTURECHANGED:
{
if( ! NcFrameImpl_IsSupported() )
break;
if( NcFrameImpl_IsDwmBased() )
break;
CWnd * pWndFrameImpl = (CWnd *)NcFrameImpl_GetFrameWindow();
if( ((HWND)lParam) != pWndFrameImpl->m_hWnd )
pWndFrameImpl->ModifyStyle( 0, WS_CAPTION|WS_BORDER, 0 );
}
break;
ˆ
|
extncframe.h
virtual LRESULT WindowProc( UINT message, WPARAM wParam, LPARAM lParam )
{
HWND hWndOwn = m_hWnd;
LRESULT lResult = 0;
if( NcFrameImpl_FilterWindowProc( lResult, message, wParam, lParam ) )
return lResult;
if( ! ::IsWindow( hWndOwn ) )
return lResult;
if( ! NcFrameImpl_IsSupported() )
return _BTNCW::WindowProc( message, wParam, lParam );
if( NcFrameImpl_PreWindowProc( lResult, message, wParam, lParam ) )
return lResult;
lResult = _BTNCW::WindowProc( message, wParam, lParam );
if( ! ::IsWindow( hWndOwn ) )
return lResult;
if( CWnd::FromHandlePermanent(hWndOwn) == NULL )
return lResult;
NcFrameImpl_PostWindowProc( lResult, message, wParam, lParam );
=> return lResult;
}
ˆ
|
wincore.cpp
LRESULT AFXAPI AfxCallWndProc(CWnd* pWnd, HWND hWnd, UINT nMsg,
WPARAM wParam = 0, LPARAM lParam = 0)
{
_AFX_THREAD_STATE* pThreadState = _afxThreadState.GetData();
MSG oldState = pThreadState->m_lastSentMsg; // save for nesting
pThreadState->m_lastSentMsg.hwnd = hWnd;
pThreadState->m_lastSentMsg.message = nMsg;
pThreadState->m_lastSentMsg.wParam = wParam;
pThreadState->m_lastSentMsg.lParam = lParam;
#ifdef _DEBUG
_AfxTraceMsg(_T("WndProc"), &pThreadState->m_lastSentMsg);
#endif
// Catch exceptions thrown outside the scope of a callback
// in debug builds and warn the user.
LRESULT lResult;
TRY
{
#ifndef _AFX_NO_OCC_SUPPORT
// special case for WM_DESTROY
if ((nMsg == WM_DESTROY) && (pWnd->m_pCtrlCont != NULL))
pWnd->m_pCtrlCont->OnUIActivate(NULL);
#endif
// special case for WM_INITDIALOG
CRect rectOld;
DWORD dwStyle = 0;
if (nMsg == WM_INITDIALOG)
_AfxPreInitDialog(pWnd, &rectOld, &dwStyle);
// delegate to object’s WindowProc
=> lResult = pWnd->WindowProc(nMsg, wParam, lParam);
ˆ
|
wincore.cpp
LRESULT CALLBACK
AfxWndProc(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam)
{
// special message which identifies the window as using AfxWndProc
if (nMsg == WM_QUERYAFXWNDPROC)
return 1;
// all other messages route through message map
CWnd* pWnd = CWnd::FromHandlePermanent(hWnd);
ASSERT(pWnd != NULL);
ASSERT(pWnd==NULL || pWnd->m_hWnd == hWnd);
if (pWnd == NULL || pWnd->m_hWnd != hWnd)
return ::DefWindowProc(hWnd, nMsg, wParam, lParam);
return AfxCallWndProc(pWnd, hWnd, nMsg, wParam, lParam);
=>}
ˆ
|
afxstate.cpp
LRESULT CALLBACK
AfxWndProcBase(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam)
{
AFX_MANAGE_STATE(_afxBaseModuleState.GetData());
=> return AfxWndProc(hWnd, nMsg, wParam, lParam);
}
ˆ
|
exthook.cpp
// struct __PROF_UIS_API CExtHookSink::HookChains_t
// LRESULT HookChainsWindowProc(...)
// Row 227
if( nMessage == WM_NCDESTROY )
{
DestroyChains( true );
// if( pWndPermanent != NULL )
// {
// __PROF_UIS_MANAGE_STATE;
// CWnd * pWndExamine =
// CWnd::FromHandlePermanent( hWndHooked );
// if( pWndExamine != pWndPermanent )
// return 0L;
// } // if( pWndPermanent != NULL )
if( bEatNcDestroy )
return 0L;
} // if( nMessage == WM_NCDESTROY )
LRESULT lResult =
::CallWindowProc(
pWNDPROC,
hWndHooked,
nMessage,
wParam,
lParam
=> );
ˆ
|
exthook.cpp
LRESULT CALLBACK CExtHookSink::HookChains_t::g_HookWndProc(
HWND hWnd,
UINT nMessage,
WPARAM wParam,
LPARAM lParam
)
{
LRESULT lResult = 0;
MSG & refMsgMfcCurr = AfxGetThreadState()->m_lastSentMsg;
MSG msgMfcSaved( refMsgMfcCurr );
refMsgMfcCurr.hwnd = hWnd;
refMsgMfcCurr.message = nMessage;
refMsgMfcCurr.wParam = wParam;
refMsgMfcCurr.lParam = lParam;
CExtHookSink::HookChains_t * pHookChains = NULL;
if( g_HookChainsMap.Lookup( hWnd, pHookChains ) )
{
ASSERT( pHookChains != NULL );
ASSERT( pHookChains->m_hWndHooked == hWnd );
lResult =
pHookChains->HookChainsWindowProc(
nMessage,
wParam,
lParam
=> );
if( nMessage == WM_NCDESTROY || ( ! ::IsWindow( hWnd ) ) )
g_HookChainsMap.RemoveKey( hWnd );
} // if( g_HookChainsMap.Lookup( hWnd, pHookChains ) )
refMsgMfcCurr = msgMfcSaved;
return lResult;
}
ˆ
|
dlgcore.cpp
// INT_PTR CDialog::DoModal()
// Row 517
#ifndef _AFX_NO_OLE_SUPPORT
CWnd* pMainWnd = NULL;
BOOL bEnableMainWnd = FALSE;
#endif
if (hWndParent && hWndParent != ::GetDesktopWindow() && ::IsWindowEnabled(hWndParent))
{
::EnableWindow(hWndParent, FALSE);
=> bEnableParent = TRUE;
#ifndef _AFX_NO_OLE_SUPPORT
pMainWnd = AfxGetMainWnd();
if (pMainWnd && pMainWnd->IsFrameWnd() && pMainWnd->IsWindowEnabled())
{
//
// We are hosted by non-MFC container
//
pMainWnd->EnableWindow(FALSE);
bEnableMainWnd = TRUE;
}
#endif
ˆ
|
extcontrolscommon.cpp
// __EXT_MFC_INT_PTR CExtMsgBox::DoModal()
// Row 9099
#if (defined _DEBUG)
#if (_MFC_VER < 0x700)
CWinThread * pWT = ::AfxGetThread();
int nSavedWTDisablePumpCount = pWT->m_nDisablePumpCount;
pWT->m_nDisablePumpCount = 0;
#else
_AFX_THREAD_STATE * pATH = ::AfxGetThreadState();
int nSavedWTDisablePumpCount = pATH->m_nDisablePumpCount;
pATH->m_nDisablePumpCount = 0;
#endif
#endif
=> nRetVal = CDialog::DoModal();
#if (defined _DEBUG)
#if (_MFC_VER < 0x700)
pWT->m_nDisablePumpCount = nSavedWTDisablePumpCount;
#else
pATH->m_nDisablePumpCount = nSavedWTDisablePumpCount;
#endif
#endif
ˆ
|
extcontrolscommon.cpp
int CExtMsgBox::DoMsgBox(
HWND hWndParent,
__EXT_MFC_SAFE_LPCTSTR strMessageText,
__EXT_MFC_SAFE_LPCTSTR strCaption, // = NULL
UINT nMsgBoxStyle, // = __EXT_MB_DEFAULT_STYLES
UINT nHelpID, // = 0
__EXT_MFC_SAFE_LPCTSTR strUniqueID, // = NULL // for __EXT_MB_DO_NOT_DISPLAY_AGAIN and __EXT_MB_DO_NOT_ASK_AGAIN
UINT nMsgBoxStyleEx, // = __EXT_MB_EX_DEFAULT_STYLES
UINT nTimeoutSeconds, // = 0
bool bIsDisabledTimeout, // = false
CExtBitmap * pBmpIcon // = NULL
)
{
__PROF_UIS_MANAGE_STATE;
if( ::GetCapture() != NULL )
::ReleaseCapture(); // force release mouse capture
CExtMsgBox dlg( hWndParent, strMessageText, strCaption, nMsgBoxStyle, nHelpID, strUniqueID, nMsgBoxStyleEx );
if( nTimeoutSeconds > 0 )
dlg.TimeoutSet( nTimeoutSeconds, bIsDisabledTimeout );
if( pBmpIcon != NULL && ( ! pBmpIcon->IsEmpty() ) )
dlg.m_bmpIcon = (*pBmpIcon);
//HWND hWndFocusRestore = ::GetFocus();
=> int nRetVal = int( dlg.DoModal() );
// if( hWndFocusRestore != NULL
// && ::IsWindow( hWndFocusRestore )
// && ::IsWindowEnabled( hWndFocusRestore )
// && ( ( ::__EXT_MFC_GetWindowLong( hWndFocusRestore, GWL_STYLE ) ) & WS_VISIBLE ) != 0
// && ::GetFocus() != hWndFocusRestore
// )
// {
// CExtPopupMenuWnd::PassMsgLoop( false );
// if( ::IsWindow( hWndFocusRestore )
// && ::IsWindowEnabled( hWndFocusRestore )
// && ( ( ::__EXT_MFC_GetWindowLong( hWndFocusRestore, GWL_STYLE ) ) & WS_VISIBLE ) != 0
// && ::GetFocus() != hWndFocusRestore
// )
// ::SetFocus( hWndFocusRestore );
// }
return nRetVal;
}
ˆ
|
extcontrolscommon.cpp
int ProfUISMsgBox(
HWND hWndParent,
__EXT_MFC_SAFE_LPCTSTR strMessageText,
__EXT_MFC_SAFE_LPCTSTR strCaption, // = NULL
UINT nMsgBoxStyle, // = __EXT_MB_DEFAULT_STYLES
UINT nHelpID, // = 0
__EXT_MFC_SAFE_LPCTSTR strUniqueID, // = NULL // for __EXT_MB_DO_NOT_DISPLAY_AGAIN and __EXT_MB_DO_NOT_ASK_AGAIN
UINT nMsgBoxStyleEx, // = __EXT_MB_EX_DEFAULT_STYLES
UINT nTimeoutSeconds, // = 0
bool bIsDisabledTimeout, // = false
CExtBitmap * pBmpIcon // = NULL
)
{
__PROF_UIS_MANAGE_STATE;
=> return CExtMsgBox::DoMsgBox( hWndParent, strMessageText, strCaption, nMsgBoxStyle, nHelpID, strUniqueID, nMsgBoxStyleEx, nTimeoutSeconds, bIsDisabledTimeout, pBmpIcon );
}
ˆ
|
DentalVox.h
class CDentalVoxApp : public CWinApp
{
public:
=> IMPLEMENT_CWinAPP_DoMessageBox;
CDentalVoxApp();
~CDentalVoxApp();
Thank you, Tom
|
|
Tommaso Chiarelli
|
Oct 5, 2010 - 2:02 AM
|
You were right. I initially thought it was related to ProfUIS in consideration of last involved calls in call stack, but it was due to a lack of release of DCs in some hidden and less important, but massively repeated (cause rendering related), methods of mine.
Problem solved.
Thank you very much, Tom
|
|
Technical Support
|
Sep 24, 2010 - 10:16 AM
|
Thank you for providing us with detailed information about the crashes. They are related to the NULL values of HDC handles. The MFC’s CDC / CWindowDC use the GetDC() Win32 API. This API can return NULL only if the GDI subsystem is overloaded. The normal application typically never overloads GDI. The most often GDI is overloading situation is GDI handle leaks. The GDI is completely overloaded if an application allocated 10000 (ten thousands ) GDI handles of any type (HBRUSH , HPEN , HBITMAP , HDC ). You can see the number of GDI handles allocated by any application in the standard Windows Task Manager (invoked by Ctrl+Shift+Esc). The Processes tab page contains table of running processes and you can add the GDI Handles column in it. Normal application should not allocate several thousands of GDI handles. This is not good.
Additionally, such a crash may occur due to incorrect usage of the GDI subsystem APIs. The GDI is not multithreaded in any Windows OS version. The Prof-UIS library is also not multithreaded as result of GDI implementation. You can use Prof-UIS APIs and classes only in one thread which is typically the main application’s thread.
|
|
Alastair Watts
|
Sep 23, 2010 - 10:05 AM
|
|
|
Technical Support
|
Sep 24, 2010 - 10:22 AM
|
Looks like you found an issue in the drag-n-drop subsystem of Prof-UIS grid controls. To fix it, please update the source code for the following three methods in the .../Prof-UIS/Src/ExtGridWnd.cpp file:
SCODE CExtGridOleDropSource::QueryContinueDrag( BOOL bEscapePressed, DWORD dwKeyState )
{
__PROF_UIS_MANAGE_STATE;
__EXT_DEBUG_GRID_ASSERT_VALID( this );
SCODE sCode = m_pWndGrid->OnGridDropSourceQueryContinueDrag( bEscapePressed, dwKeyState );
if( bEscapePressed && sCode == DRAGDROP_S_CANCEL )
m_EscapePressed = true;
return sCode;
}
SCODE CExtGridOleDropSource::GiveFeedback( DROPEFFECT dropEffect )
{
__PROF_UIS_MANAGE_STATE;
__EXT_DEBUG_GRID_ASSERT_VALID( this );
m_deLast = dropEffect;
SCODE sCode = m_pWndGrid->OnGridDropSourceGiveFeedback( dropEffect );
if( sCode == DRAGDROP_S_USEDEFAULTCURSORS )
{
if( dropEffect == DROPEFFECT_COPY )
{
if( m_hCursorCopy != NULL )
::SetCursor( m_hCursorCopy );
sCode = S_OK;
}
else if( dropEffect == DROPEFFECT_MOVE )
{
if( m_hCursorMove != NULL )
::SetCursor( m_hCursorMove );
sCode = S_OK;
}
else if( dropEffect == DROPEFFECT_NONE )
{
if( m_hCursorDelete != NULL )
::SetCursor( m_hCursorDelete );
sCode = S_OK;
}
} // if( sCode == DRAGDROP_S_USEDEFAULTCURSORS )
return sCode;
}
SCODE CExtGridWnd::OnGridDropSourceGiveFeedback( DROPEFFECT dropEffect )
{
__EXT_DEBUG_GRID_ASSERT_VALID( this );
dropEffect;
return DRAGDROP_S_USEDEFAULTCURSORS;
}
|
|
Alastair Watts
|
Sep 24, 2010 - 5:43 AM
|
I’m using the standard drag & drop. The following doesn’t change the icon ... what am I doing wrong?
SCODE CMyTreeGridWnd::OnGridDropSourceGiveFeedback(DROPEFFECT dropEffect)
{
HCURSOR hCursor = LoadCursor(NULL, MAKEINTRESOURCE(IDC_HAND));
SetCursor(hCursor);
} return NOERROR;
|
|
Technical Support
|
Sep 24, 2010 - 3:15 AM
|
Please take a look at the following test application dedicated to the drag-n-drop and the CExtTreeGridWnd control:
http://www.prof-uis.com/download/forums/test_tree_grid_idea_dnd.zip
If you are using the standard drag-n-drop of the CExtGridWnd control, then you should override the CExtGridWnd::OnGridDropSourceGiveFeedback() virtual method and change cursor in it using the standard SetCursor() API.
|
|
Dominik Braendlin
|
Sep 22, 2010 - 3:43 AM
|
Dear Tech Support, I have three CExtControlBar’s that are initially joined together. Is it possible to lock them so the user cannot separate them? It should still be possible to hide them. Or should I better consider to using one CExtControlBar and place a tabwindow in it and then add the three CExtResizableDialog? Thanks Adrian
|
|
Technical Support
|
Sep 22, 2010 - 12:12 PM
|
You can create one control bar with the CExtTabPageContainerWnd window inside it. Then create three tab page windows inside the tab page container. You will get one control bar with three non-detachable tabs inside.
|
|
tera tera
|
Sep 22, 2010 - 3:09 AM
|
Hello. In Windows7-Aero, the malfunction such as the following video does not occur.
http://ifreeta.dee.cc/20100922/Untitled25.html But , On the Basic themes, the following malfunction occurs.
http://ifreeta.dee.cc/20100922/Untitled25.html
The re-drawing of the screen of RibbonMenu is not performed definitely.
The programs are as follows. // ----------------------------------------------------------------------------
/**
*/
// ----------------------------------------------------------------------------
void ProcessCtl( CString csCommand )
{
DWORD dwThread = 0; BOOL result;
DWORD dwExitCode;
STARTUPINFO si;
PROCESS_INFORMATION pi; ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(STARTUPINFO);
si.lpReserved = NULL;
si.dwX = CW_USEDEFAULT;
si.dwY = CW_USEDEFAULT;
si.dwXSize = CW_USEDEFAULT;
si.dwYSize = CW_USEDEFAULT;
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_SHOWNORMAL;
ZeroMemory( &pi, sizeof(pi) ); result = CreateProcess( NULL, csCommand.GetBuffer( csCommand.GetLength() ), NULL, NULL, FALSE,
DETACHED_PROCESS | HIGH_PRIORITY_CLASS,
NULL, NULL, &si, &pi ); DWORD dRet = WaitForSingleObject( pi.hProcess, INFINITE ); if( dRet != WAIT_FAILED )
{
GetExitCodeProcess( pi.hProcess, &dwExitCode );
} CloseHandle( pi.hProcess );
if( dwExitCode >= 0 ){
if( (dwExitCode / 10) == 1 ){
ProcessCtl( csCommand );
}
}
}
BOOL CMainFrame::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo)
{ if( nID == ID_EDIT_PASTE && nCode == CN_COMMAND && pExtra == NULL )
{
ProcessCtl("NotePad.exe");
return TRUE;
}
|
|
tera tera
|
Sep 26, 2010 - 6:58 PM
|
Hello. I tried this source code.
However, re-drawing does not work at the time of specific pattern definitely. http://ifreeta.dee.cc/20100927/Untitled27.html Without its starting from VisualStudio , When I started direct Exe, a bug occurs. //čµ·å
result = CreateProcess(
NULL, csCommand.GetBuffer( csCommand.GetLength() ), NULL, NULL, FALSE,
DETACHED_PROCESS ,
NULL, NULL, &si, &pi ); //DWORD dRet = WaitForSingleObject( pi.hProcess, INFINITE ); DWORD dRet = WaitForSingleObject( pi.hProcess , 10 );
for( ; dRet == WAIT_TIMEOUT; dRet = WaitForSingleObject( pi.hProcess , 10 ) ){
CExtPaintManager::stat_PassPaintMessages();
}
|
|
Technical Support
|
Sep 27, 2010 - 11:58 AM
|
Redrawing stops working when the message queue is overloaded with messages. The CExtPaintManager::stat_PassPaintMessages() static method handles only painting messages. So, please try the next version:
result =
CreateProcess(
NULL,
csCommand.GetBuffer( csCommand.GetLength() ),
NULL,
NULL,
FALSE,
DETACHED_PROCESS ,
NULL,
NULL,
&si,
&pi
);
HWND hWndMain = ::AfxGetMainWnd()->GetSafeHwnd();
DWORD dRet = WaitForSingleObject( pi.hProcess , 10 );
for( ; dRet == WAIT_TIMEOUT; dRet = WaitForSingleObject( pi.hProcess , 10 ) )
{
if( hWndMain == NULL || ( ! ::IsWindow( hWndMain ) ) )
return;
CExtPopupMenuWnd::PassMsgLoop( true );
}
|
|
Technical Support
|
Sep 22, 2010 - 12:12 PM
|
The following line of code is bad because it switches the main UI thread of the application into the non-responding and non-draw-able state:
DWORD dRet = WaitForSingleObject( pi.hProcess, INFINITE );
Please replace this bad line of code with the following: DWORD dRet = WaitForSingleObject( pi.hProcess, 10 );
for( ; dwRet == WAIT_TIMEOUT; dRet = WaitForSingleObject( pi.hProcess, 10 ); )
CExtPaintManager::stat_PassPaintMessages();
The main frame window will be able to repaint itself, but the UI will not be click-able. I.e. main frame will behave like disabled. Is that what you need?
|
|
Francesco Toscano
|
Sep 21, 2010 - 11:14 AM
|
Because I would like to use an equivalent CPropertySheet in my project, I have used as starting point your sample "test_page_sheet". As you know your sample is based on CExtResizableDialog using a CExtTabPageContainerWnd.
But I found a problem with all the Edit controls on a child page (CExtResizableDialog), the EDit controls are not selectable with the mouse click. Seems that, for some reason, the mouse click within the edit control is not catched. With Buttons and check box works fine. To reproduce the problem use your sample "test_page_sheet" and then, add an Edit control on a child page. You will see that the mouse click on the control wil not work. Waiting you replay. Regards Francesco
|
|
Francesco Toscano
|
Sep 21, 2010 - 4:52 PM
|
Thanks .... problem solved!! Regards. Francesco
|
|
Technical Support
|
Sep 21, 2010 - 12:31 PM
|
We added edit controls and created a new version of this test project:
http://www.prof-uis.com/download/forums/test_page_sheet2.zip
There was no surprise with editors. Please check whether this new version runs OK on your computer? In any case, you can send us the source code parts of your project whether the tabbed property sheet like window is implemented so we will check what’s wrong.
|
|
Robert Hofstetter
|
Sep 20, 2010 - 5:48 PM
|
I override the virtual function CExtTreeCtrl::OnQueryItemFont() and provide a larger font. The tree items are drawn with the font however the item sizes do not increase accordingly. so the tree item texts are partially cut off. Could you let me know the correct way to use different font in CExtTreeCtrl. Thanks
|
|
Technical Support
|
Sep 30, 2010 - 1:15 PM
|
We are sorry for misunderstanding you. You can return different fonts for tree rows. But you should provide them with equal height fonts. The variable height rows are not supported in the CExtTreeCtrl control due to implementation limitations of the Win32 tree view common control. If you need variable height rows, multiple columns, header columns and rows, over than 40 specialized data format inputs in your tree control, printing/previewing and much more, then please switch using the CExtTreeCtrl tree grid control.
|
|
Robert Hofstetter
|
Sep 29, 2010 - 11:08 PM
|
I am afraid that this is not right answer. I am talking about CExtTreeCtrl, not Grid control. Please read my original post again!
|
|
Technical Support
|
Sep 21, 2010 - 9:58 AM
|
The CExtGridBaseWnd::DefaultRowHeightSet() method allows you to specify the default row height in the grid control.
|
|
Tommaso Chiarelli
|
Sep 20, 2010 - 8:33 AM
|
Hi,
After having installed the package, I’ve built libraries I was interested in through the Integration Wizard. I’ve built ProfUIS, ProfSkin, and ProfAuto both in MBCS Debug and Release mode, as Zlib and LibPNG respectively in Debug and Release DLL mode (always Win32 platform). Every configuration has been built correctly, apart from ProfUIS in MBCS Debug (ProfUISDLL - Win32 MBCS Debug): there was no ProfUIS290md.dll, nor ProfUIS290md.exp or ProfUIS290md.lib (notice that no errors have been highlighted and the whole operation has been closed as succesful).
So, I checked projects configurations (Workspace -> ProfUIS_800.sln) and I discovered that the solution MBCS Debug configuration is the same as the Release one: every project configuration is set to MBCS Release, apart from ANSI ones (that are ANSI DEBUG).
I think there’s a problem (I’ve never encountered this problem with the previous versions nor with the 2.90 freeware one). What should I do to achieve the MBCS Debug version of ProfUIS library?
Other info: OS: XP SP3 DevEnv: Microsoft Visual Studio 2005 (I’ve built libraries for this environment)
Thank you in advance,
Tom
|
|
Tommaso Chiarelli
|
Sep 22, 2010 - 4:28 AM
|
I solved the problem about the error message I got at runtime beginning (I wrongly wrote "beginning of building operation": I was meaning runtime).
I thought the problem was related to ProfUISDLL MBCS Debug building due to the singularity of the situation: as I said in my last post, the error occurred just with the MBCS Debug version of 2.90 full library, not with the freeware one, nor with the MBCS Release version of both 2.90 freeware and full library, and I had had problems to build exactly in that configuration, as I wrote before. I’ve discovered, instead, that the error depended on a limit in the assembly loader (actually comprehensible for MBCS Debug building of the full library). I solved using /GF parameter (enable string pooling) while compiling and building.
Thank you,
Tom
|
|
Technical Support
|
Sep 22, 2010 - 12:12 PM
|
This is something new and very interesting. We added the /Zm512 compiler option to the Prof-UIS, additional libraries, all the sample projects and Prof-UIS Application Wizard generated projects. We added this compiler option more than year ago. Prof-UIS library simply exceeded the default memory limit using by all the Microsoft’s C/C++ compilers. But we never received reports about string pool related issues. Could you please try to remove the /GF parameter and replace /Zm512 with /Zm1024 or, even with /Zm2048.
|
|
Tommaso Chiarelli
|
Sep 22, 2010 - 1:18 PM
|
I’ve seen that you use the /Zm512 parameter in your projects, but in last two posts I’m talking about building my application, not ProfUIS. I’m afraid I did not express myself not very clearly. I try to make a sum up:
1. I had problems building ProfUISDLL in MBCS Debug mode through Integration Wizard. The problem existed also building manually through the MBCS Debug configuration for the whole solution. This problem is still unsolved.
2. I manually built ProfUISDLL in MBCS Debug mode changing only its configuration (so just the project one, not the solution one) and building only that project. In this way I achieved correctly the library in MBCS Debug mode.
3. Then I built and tried to execute my application (that uses ProfUIS) in Debug mode, but I got the error message of two posts before (Exception from HRESULT: 0x80131522). I consequently thought that was possibly due to a kind of error during MBCS Debug ProfUISDLL building in consideration of: a) the problems encountered before trying to build it, and b) that fact that my application runs correctly with MBCS Debug ProfUISDLL 2.90 Freeware and both MBCS Release ProfUISDLL 2.90 Freeware and Full.
4. I’ve discovered that the error message of (3) is about an overcame limit in the assembly loader (I suppose due to the fact ProfUISDLL 2.90 Full in Debug mode is huge to load, and my application uses several other libraries too). I solved this building my application with the /GF compiler option (I’m already using the /Zm140 too, but in this case the error wasn’t related to the compiler memory need).
I hope this may help you.
Tom
|
|
Tommaso Chiarelli
|
Sep 21, 2010 - 1:21 AM
|
As I wrote, I’ve tried to set the solution configuration to MBSC Debug, achieving only a MBCS Release general setting (so, to say, the overall configuration is called MBCS Debug, but all the projects configurations are set to MBCS Release, apart from the ANSI ones, as I wrote yesterday).
I’ve also tried setting the ProfUISDLL project (only it) to MBCS DEBUG configuration manually. After I built it, I’ve obtained the related .dll, .exp, and .lib files. However, when I tried to build my application project in Debug mode, at the very beginning of building operation, I got an error message (never encountered before):
"Eccezione non gestita di tipo ’System.IO.FileLoadException’ in Modulo sconosciuto.
Informazioni aggiuntive: Impossibile caricare il file o l’assembly ’DentalVox, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null’ o una delle relative dipendenze. Impossibile trovare o caricare un tipo. (Eccezione da HRESULT: 0x80131522)"
That in english should be something like:
"Unhandled exception of ’System.IO.FileLoadException’ type in unknown Module.
Additional information: Impossible to load the file or the assembly ’DentalVox, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null’ or one of the related dependancies. Impossible to find or load a type. (Exception from HRESULT: 0x80131522)"
Notice that this problem does not happen with the MBCS Debug version of 2.90 freeware library, nor with the MBCS Release version of the 2.90 freeware and full libraries (but I have to admit I’ve not encountered problems building them, if there’s any relationship between the problems).
Thank you,
Tom
PS: I’ve sent the Integration Wizard report file in the Support sub folder.
|
|
Technical Support
|
Sep 20, 2010 - 12:59 PM
|
We just re-checked the Integration Wizard using WinXP SP3 and VS2005. It works. Please pack the log files from the .../Prof-UIS/Support/ sub folder and send them to the support mail box at this web site. You can build any libraries manually. You can open .../Prof-UIS/Workspace/ProfUIS_800.sln solution file in VS 2005 and build the MBCS Debug configurations of the ProfUISDLL projects.
|
|
Offer Har
|
Sep 18, 2010 - 8:28 AM
|
Dear Support, We have a class derived from CExtEdit and we would like to display a detailed information on it in a tooltip, which contains icon and formatted text. Is this possible? if so how? Thanks, Ron.
|
|
Technical Support
|
Sep 18, 2010 - 2:49 PM
|
If you see HTML source code instead of HTML based rich content, then you are using Prof-UIS version that is older than 2.90. You need Prof-UIS 2.90 or later to see the HTML output.
|
|
Offer Har
|
Sep 20, 2010 - 3:06 AM
|
Dear Support,
Any new on that subject?
Thanks,
Ron.
|
|
Technical Support
|
Sep 20, 2010 - 10:24 AM
|
We used the ProfUIS_Controls sample to test the tooltip problem. The first dialog page in it demonstrates button common controls and allows you to type a button tooltip in a single line editor control. We typed HTML text here to see the HTML in the tooltip over the button. Then we modified this sample project. Please find the following code in the PageButtons.cpp file:
m_btnPushButton.SetTooltipText( LPCTSTR(sTooltip) );
There are two such lines of code. Please replace each of them with the following: m_btnPushButton.SetTooltipText( LPCTSTR(sTooltip) );
m_Tooltip.SetTooltipText( LPCTSTR(sTooltip) );
Now the single line tooltip editor displays the same tooltip text as you type in it. We saw HTML tooltips over this CExtEdit editor.
|
|
Offer Har
|
Sep 20, 2010 - 2:31 PM
|
Dear Support, I don’t understand - how do I get the tooltip for CExtEdit? what lines make it work? Is there an example of a CExtEdit with tooltip? Thanks,
Ron.
|
|
Technical Support
|
Sep 21, 2010 - 11:26 AM
|
We prepared a test project that illustrates it:
http:/www.prof-uis.com/download/forums/TestHtmlTooltipOverEdit.zip
|
|
Offer Har
|
Sep 21, 2010 - 12:09 PM
|
Dear Support,
When I compile and run it I still get the whole HTML sting and not the formatted HTML!
Maybe it does not work in 2.90 only in 2.91?
Regards,
Ron.
|
|
Technical Support
|
Sep 22, 2010 - 12:05 PM
|
Yes, you are right. We added complete tooltip support for CExtEdit in 2.91.
|
|
Offer Har
|
Sep 28, 2010 - 2:32 PM
|
When is 2.91 supposed to be released? What features will it include?
|
|
Technical Support
|
Sep 30, 2010 - 12:42 AM
|
It’s 90% finished. We are going to introduce HWND -less controls based on HTML like language and trees describing logical structure of control’s inner part. The Office 2010 style Backstage View for ribbon bar is such kind of control.
|
|
Offer Har
|
Sep 18, 2010 - 4:14 PM
|
From my trace window:
* * * INITIALIZING DYNAMIC LIBRARY: ProfUIS version 2.90 * * *
* * * INITIALIZING DYNAMIC LIBRARY: ProfSkin version 2.90 * * * So I guess I’m using 2.90...
|
|
Offer Har
|
Sep 18, 2010 - 3:31 PM
|
|
|
Technical Support
|
Sep 18, 2010 - 9:31 AM
|
The CExtEditBase::SetTooltipText() method assigns tooltip text to the edit control. This text can be HTML in Prof-UIS 2.90 or later. First of all, we need to load bitmap image into the global object container. This bitmap is the icon to use in the tooltip text formatted as HTML:
CExtRichDocObjectBase & _GC = CExtRichContentLayout::stat_GetObjectCountainerGlobal();
CExtRichDocObjectImage * pObjPic = NULL;
pObjPic = new CExtRichDocObjectImage( _T("smile.bmp") );
VERIFY( pObjPic->ImageGet().LoadBMP_Resource( MAKEINTRESOURCE(IDB_SMILE) ) );
VERIFY( pObjPic->ImageGet().Make32() );
VERIFY( _GC.ObjectAdd( pObjPic ) );
The code above assumes your app have the IDB_SMILE bitmap resource. We loaded bitmap image into the global object container and we can use it everywhere in any Prof-UIS control. The smile.bmp is the HTML name of this image to use as value of the SRC attribute of the IMG tag. Here is how the tooltip text may look like: <HTML><IMG SRC=smile.bmp />Some tooltip text.</HTML>
The <HTML> text at start is needed to let Prof-UIS detect the HTML format. Of course, you can use much more complex HTML formatted text as parameter of the CExtEditBase::SetTooltipText() method. You can use HTML <TABLE> s for compound content formating. You can use fixed and absolutely positioned elements. You can use inline type of tables and blocks provided by the display:inline-table and display:inline-block CSS attributes. Prof-UIS 2.91 adds support for the float:left and float:right CSS attributes what allows to dock images to the left or right sides of text paragraphs. You can test your HTML in the RichContentFeatures sample application before using it in your project.
|
|
Offer Har
|
Sep 18, 2010 - 11:40 AM
|
Dear Support, I managed to see the string, but it still is not HTML formatted, only the text I inserted... <HTML><B>RON</B> RON</HTML>. Also, I would like the tooltip to be displayed on top at a fixed location with a balloon-like tooltip - is it possible? I need also the tooltip to be displayed until I close it from the code (calling to Hide) - is it possible? Thanks, Ron.
|
|
Offer Har
|
Sep 18, 2010 - 10:54 AM
|
Dear Support, I replaced my line with this one: SetTooltipText("<HTML><B>RON</B> RON</HTML>"); But now I don’t see any tooltip, before it worked, but was a very basic tooltip. Do I need to add any initialization code? Also, how can I get the balloon shape? Is there any place with a sample of this? Thanks, Ron.
|
|
Alastair Watts
|
Sep 14, 2010 - 4:17 AM
|
SelectionGetFirstRowInColumn(0) works but is too slow over 2000 rows.
SelectionIsEmpty() doesn’t when the last item in the list is selected, then deleted
|
|
Alastair Watts
|
Sep 20, 2010 - 4:44 AM
|
|
|
Technical Support
|
Sep 17, 2010 - 12:28 PM
|
Thank you for reporting this issue. Here is the fix: bool CExtTreeGridWnd::ItemFocusSet(
HTREEITEM hTreeItem,
LONG nColNo,
bool bRedraw // = true
)
{
__EXT_DEBUG_GRID_ASSERT_VALID( this );
if( hTreeItem == ItemGetRoot() )
return false;
if( ! ItemFocusIsLocked() )
{
CPoint ptFocus = FocusGet();
if( ptFocus.y < 0 || ptFocus.y >= RowCountGet() )
{
if( hTreeItem == NULL )
return false;
} // if( ptFocus.y < 0 || ptFocus.y >= RowCountGet() )
else
{
if( hTreeItem == NULL )
{
SelectionUnset( false, false );
FocusUnset( bRedraw );
return true;
}
HTREEITEM htiFocus = ItemGetByVisibleRowIndex( ptFocus.y );
__EXT_DEBUG_GRID_ASSERT( htiFocus != NULL );
if( htiFocus == hTreeItem && nColNo == ptFocus.x )
return false;
} // else from if( ptFocus.y < 0 || ptFocus.y >= RowCountGet() )
if( ! ItemEnsureExpanded( hTreeItem, false ) )
return false;
ptFocus.x = nColNo;
ptFocus.y = ItemGetVisibleIndexOf( hTreeItem );
__EXT_DEBUG_GRID_ASSERT( ptFocus.y >= 0 );
if( bRedraw )
OnSwUpdateScrollBars();
FocusSet( ptFocus, bRedraw, true, true, bRedraw );
} // if( ! ItemFocusIsLocked() )
else
{
if( bRedraw )
{
OnSwUpdateScrollBars();
OnSwInvalidate( true );
} // if( bRedraw )
} // else from if( ! ItemFocusIsLocked() )
return true;
}
|
|
Alastair Watts
|
Sep 14, 2010 - 6:48 AM
|
I tried your suggestion, however, it behaves the same as SelectionIsEmpty(). Let me explain: If I select the last row in a CExtTreeGridWnd, then delete it using ItemRemove() so that nothing is now selected, the above methods report that something is still selected.
|
|
Technical Support
|
Sep 14, 2010 - 5:39 AM
|
The CExtGridBaseWnd::SelectionGetAreaCount() and CExtGridBaseWnd::SelectionGet() methods allow you to walk through rectangular parts of the selected cell region. The CExtGridBaseWnd::SelectionRangeGet() method returns the selected cell region as an CExtGR2D object. You can use the CExtGR2D::IsEmpty() method to detect whether the region is empty.
|
|
marc uchida
|
Sep 9, 2010 - 11:45 AM
|
I have a property grid with some string cells (CExtGridCellString) and 1 combo property. The string cells are read only. The values of the string cells reflects what was chosen from the combo property. I can update the values for the data members though the Apply of the combo property, because I have access to all the Property Values in my Property grid class, but the string cells DISPLAYED values do not update when I change their values programmatically in this way. I do use TextSet member of the string grid cells in question, but that does not force a refresh of the display. The same applies to changing the Style (like toggling read only trait) with the ModifyStyle member.
There is no equivalent behaviour in the PropertyGrid sample project.
I used to be able to get this behaviour pre version 283 by calling the property grid control’s PropertyStoreSynchronize() from the containing dialogs OnPaint, but since 283 the OnPaint no longer gets called automatically after an item in the property grid has been changed.
How am I suppose to handle this case? There does not appear to be a way, if the TextSet does not do it for me.
CExtGridCell does not appear to have an update display method.
I am running on Vista and XP with v290 currently.
thanks
marc
|
|
Technical Support
|
Sep 10, 2010 - 12:24 AM
|
|
|
Robert Hofstetter
|
Sep 8, 2010 - 1:49 AM
|
Is there any way to speed it up? or remove assertion code ? Thanks
|
|
Technical Support
|
Sep 8, 2010 - 4:52 AM
|
The assertions can be removed for grid related code at the beginning of the .../Include/ExtGridWnd.h file: // #if (defined _DEBUG)
// #define __EXT_DEBUG_HEAVY_CHECK_GENERIC_REGION_2D
// #endif // (defined _DEBUG)
#define __EXT_DEBUG_GRID_ASSERT_VALID( __PTR__ ) ;
#define __EXT_DEBUG_GRID_ASSERT_KINDOF( __CTYPE__, __PTR__ ) ;
#define __EXT_DEBUG_GRID_ASSERT( __SOME_EXPR__ ) ;
#define __EXT_DEBUG_GRID_VERIFY( __SOME_EXPR__ ) __SOME_EXPR__ ;
// #define __EXT_DEBUG_GRID_ASSERT_VALID( __PTR__ ) ASSERT_VALID( __PTR__ ) ;
// #define __EXT_DEBUG_GRID_ASSERT_KINDOF( __CTYPE__, __PTR__ ) ASSERT_KINDOF( __CTYPE__, __PTR__ ) ;
// #define __EXT_DEBUG_GRID_ASSERT( __SOME_EXPR__ ) ASSERT( __SOME_EXPR__ ) ;
// #define __EXT_DEBUG_GRID_VERIFY( __SOME_EXPR__ ) VERIFY( __SOME_EXPR__ ) ;
Second, the assertions can be removed for text rendering subsystem of Prof-UIS 2.90 at the beginning of the .../Include/ExtRichContent.h file: #define __EXT_DEBUG_RICH_CONTENT_ASSERT_VALID( __PTR__ ) ;
#define __EXT_DEBUG_RICH_CONTENT_ASSERT_KINDOF( __CTYPE__, __PTR__ ) ;
#define __EXT_DEBUG_RICH_CONTENT_ASSERT( __SOME_EXPR__ ) ;
#define __EXT_DEBUG_RICH_CONTENT_VERIFY( __SOME_EXPR__ ) __SOME_EXPR__ ;
// #define __EXT_DEBUG_RICH_CONTENT_ASSERT_VALID( __PTR__ ) ASSERT_VALID( __PTR__ ) ;
// #define __EXT_DEBUG_RICH_CONTENT_ASSERT_KINDOF( __CTYPE__, __PTR__ ) ASSERT_KINDOF( __CTYPE__, __PTR__ ) ;
// #define __EXT_DEBUG_RICH_CONTENT_ASSERT( __SOME_EXPR__ ) ASSERT( __SOME_EXPR__ ) ;
// #define __EXT_DEBUG_RICH_CONTENT_VERIFY( __SOME_EXPR__ ) VERIFY( __SOME_EXPR__ ) ;
Third, you can debug the release version of your app and Prof-UIS.
|
|