Professional UI Solutions
Site Map   /  Register
 
 

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.

Forums » Prof-UIS Tech Support » issue with the tab control Collapse All
Subject Author Date
Pierre MEDART Mar 27, 2008 - 11:47 AM

We use the CExtTabMdiWhidbeyWnd.


We have an issue when we close the latest doc/view. After that, from time to time (I know it sounds ackward) we loose one click...


For example if we click on the title bar and try to move the window, the application is not moving on the desktop (it is not maximized ;-) )


Any clue ?


We use the 2.82 version of the toolkit.

Pierre MEDART Apr 2, 2008 - 4:20 AM

 


We got a call stack...


The issue seems to be that the TabWnd enters in Hover while (I guess) it should be destroying itself... we close our last doc (any type, 3 different type of frames).


This forces a CExtMouseCaptureSink::SetCapture( m_hWnd ) hence our troubles (loosing the first click etc)


What would you suggest?


ProfUIS282nd.dll!CExtTabWnd::OnTabWndMouseTrackingHoverStart(long nHitTest=0xfffffff9) Line 5351 C++

ProfUIS282nd.dll!CExtTMWI<CExtTabWhidbeyWnd>::OnTabWndMouseTrackingHoverStart(long nHitTest=0xfffffff9) Line 1813 C++

ProfUIS282nd.dll!CExtTabWnd::_ProcessMouseMove(unsigned int nFlags=0x00000000, CPoint point={...}) Line 5170 + 0x16 bytes C++

ProfUIS282nd.dll!CExtTabWnd::OnMouseMove(unsigned int nFlags=0x00000000, CPoint point={...}) Line 5305 + 0x1e bytes C++

mfc80d.dll!CWnd::OnWndMsg(unsigned int message=0x00000200, unsigned int wParam=0x00000000, long lParam=0x000c0240, long * pResult=0x0012edf0) Line 2169 C++

mfc80d.dll!CWnd::WindowProc(unsigned int message=0x00000200, unsigned int wParam=0x00000000, long lParam=0x000c0240) Line 1741 + 0x20 bytes C++

> ProfUIS282nd.dll!CExtTabWnd::WindowProc(unsigned int message=0x00000200, unsigned int wParam=0x00000000, long lParam=0x000c0240) Line 2140 C++

ProfUIS282nd.dll!CExtTMWI<CExtTabWhidbeyWnd>::WindowProc(unsigned int message=0x00000200, unsigned int wParam=0x00000000, long lParam=0x000c0240) Line 2217 C++

mfc80d.dll!AfxCallWndProc(CWnd * pWnd=0x04ccefac, HWND__ * hWnd=0x000b0b22, unsigned int nMsg=0x00000200, unsigned int wParam=0x00000000, long lParam=0x000c0240) Line 240 + 0x1c bytes C++

mfc80d.dll!AfxWndProc(HWND__ * hWnd=0x000b0b22, unsigned int nMsg=0x00000200, unsigned int wParam=0x00000000, long lParam=0x000c0240) Line 389 C++

mfc80d.dll!AfxWndProcBase(HWND__ * hWnd=0x000b0b22, unsigned int nMsg=0x00000200, unsigned int wParam=0x00000000, long lParam=0x000c0240) Line 411 + 0x15 bytes C++

user32.dll!_InternalCallWinProc@20() + 0x28 bytes

user32.dll!_UserCallWinProcCheckWow@32() + 0xb7 bytes

user32.dll!_DispatchMessageWorker@8() + 0xdc bytes

user32.dll!_DispatchMessageA@4() + 0xf bytes

mfc80d.dll!AfxInternalPumpMessage() Line 183 C++

mfc80d.dll!CWinThread::PumpMessage() Line 896 C++

FRC.exe!FFiREApp::PumpMessage() Line 237 + 0xb bytes C++

mfc80d.dll!CWinThread::Run() Line 625 + 0xd bytes C++

mfc80d.dll!CWinApp::Run() Line 894 C++

mfc80d.dll!AfxWinMain(HINSTANCE__ * hInstance=0x00400000, HINSTANCE__ * hPrevInstance=0x00000000, char * lpCmdLine=0x00151f10, int nCmdShow=0x00000005) Line 47 + 0xd bytes C++

FRC.exe!WinMain(HINSTANCE__ * hInstance=0x00400000, HINSTANCE__ * hPrevInstance=0x00000000, char * lpCmdLine=0x00151f10, int nCmdShow=0x00000005) Line 33 C++

FRC.exe!__tmainCRTStartup() Line 589 + 0x35 bytes C

FRC.exe!WinMainCRTStartup() Line 414 C

0511a167()

mscorwks.dll!_CallDescrWorker@20() + 0x1f bytes

mscorwks.dll!_CallDescrWorker@20() + 0x1f bytes

FRC.exe!__NULL_IMPORT_DESCRIPTOR() + 0x25e3 bytes Unknown

FRC.exe!__NULL_IMPORT_DESCRIPTOR() + 0x187e8 bytes Unknown

Technical Support Apr 3, 2008 - 11:49 AM

We still cannot reproduce this problem. We would like to ask you to do the following:

1) Find the CExtTMWI::OnTabWndClickedButton() method in the ../Prof-UIS/Include/ExtTabWnd.h file. The class implements MDI tab control’s functionality.

2) Find the following code in this method:

            ::PostMessage(
                  hWndMdiChild,
                  WM_SYSCOMMAND,
                  SC_CLOSE,
                  MAKELONG( point.x, point.y )
                  );
This code closes the active MDI child window when the "X"-button on the right side of the MDI tab control is pressed.

3) Insert the following line immediately before PostMessage() is called:
            ::ReleaseCapture();
We would like to know whether the problem is solved. If not, then please also try to insert the following instead of ReleaseCapture():
SendMessage( WM_CANCELMODE );


Technical Support Mar 31, 2008 - 12:16 PM

The difference between the Whidbey tabs (MDI or simple) and other tabs is only the style of tab items and tab control background. So, if the problem exists, it can be reproduced using any other MDI tabs. We checked our sample applications with MDI tabs (DRAWCLI and ProfStudio) but failed to reproduce the problem. We tried to close the last document using Ctrl+F4, X in the menu bar, X in the MDI tab control, X in a tab item, the Close command in the system menu of MDI child frame window and the Close button in the MDI windows dialog. Would you help us reproduce the problem or send us a test project?

Pierre MEDART Apr 2, 2008 - 4:20 AM

We got a call stack...


 


The issue seems to be that the TabWnd enters in Hover while (I guess) it should be destroying itself... we close our last doc (any type, 3 different type of frames).


 


This forces a CExtMouseCaptureSink::SetCapture( m_hWnd ) hence our troubles (loosing the first click etc)


 


What would you suggest?


 


ProfUIS282nd.dll!CExtTabWnd::OnTabWndMouseTrackingHoverStart(long nHitTest=0xfffffff9) Line 5351 C++



ProfUIS282nd.dll!CExtTMWI<CExtTabWhidbeyWnd>::OnTabWndMouseTrackingHoverStart(long nHitTest=0xfffffff9) Line 1813 C++



ProfUIS282nd.dll!CExtTabWnd::_ProcessMouseMove(unsigned int nFlags=0x00000000, CPoint point={...}) Line 5170 + 0x16 bytes C++



ProfUIS282nd.dll!CExtTabWnd::OnMouseMove(unsigned int nFlags=0x00000000, CPoint point={...}) Line 5305 + 0x1e bytes C++



mfc80d.dll!CWnd::OnWndMsg(unsigned int message=0x00000200, unsigned int wParam=0x00000000, long lParam=0x000c0240, long * pResult=0x0012edf0) Line 2169 C++



mfc80d.dll!CWnd::WindowProc(unsigned int message=0x00000200, unsigned int wParam=0x00000000, long lParam=0x000c0240) Line 1741 + 0x20 bytes C++



> ProfUIS282nd.dll!CExtTabWnd::WindowProc(unsigned int message=0x00000200, unsigned int wParam=0x00000000, long lParam=0x000c0240) Line 2140 C++



ProfUIS282nd.dll!CExtTMWI<CExtTabWhidbeyWnd>::WindowProc(unsigned int message=0x00000200, unsigned int wParam=0x00000000, long lParam=0x000c0240) Line 2217 C++



mfc80d.dll!AfxCallWndProc(CWnd * pWnd=0x04ccefac, HWND__ * hWnd=0x000b0b22, unsigned int nMsg=0x00000200, unsigned int wParam=0x00000000, long lParam=0x000c0240) Line 240 + 0x1c bytes C++



mfc80d.dll!AfxWndProc(HWND__ * hWnd=0x000b0b22, unsigned int nMsg=0x00000200, unsigned int wParam=0x00000000, long lParam=0x000c0240) Line 389 C++



mfc80d.dll!AfxWndProcBase(HWND__ * hWnd=0x000b0b22, unsigned int nMsg=0x00000200, unsigned int wParam=0x00000000, long lParam=0x000c0240) Line 411 + 0x15 bytes C++



user32.dll!_InternalCallWinProc@20() + 0x28 bytes



user32.dll!_UserCallWinProcCheckWow@32() + 0xb7 bytes



user32.dll!_DispatchMessageWorker@8() + 0xdc bytes



user32.dll!_DispatchMessageA@4() + 0xf bytes



mfc80d.dll!AfxInternalPumpMessage() Line 183 C++



mfc80d.dll!CWinThread::PumpMessage() Line 896 C++



FRC.exe!FFiREApp::PumpMessage() Line 237 + 0xb bytes C++



mfc80d.dll!CWinThread::Run() Line 625 + 0xd bytes C++



mfc80d.dll!CWinApp::Run() Line 894 C++



mfc80d.dll!AfxWinMain(HINSTANCE__ * hInstance=0x00400000, HINSTANCE__ * hPrevInstance=0x00000000, char * lpCmdLine=0x00151f10, int nCmdShow=0x00000005) Line 47 + 0xd bytes C++



FRC.exe!WinMain(HINSTANCE__ * hInstance=0x00400000, HINSTANCE__ * hPrevInstance=0x00000000, char * lpCmdLine=0x00151f10, int nCmdShow=0x00000005) Line 33 C++



FRC.exe!__tmainCRTStartup() Line 589 + 0x35 bytes C



FRC.exe!WinMainCRTStartup() Line 414 C



0511a167()



mscorwks.dll!_CallDescrWorker@20() + 0x1f bytes



mscorwks.dll!_CallDescrWorker@20() + 0x1f bytes



FRC.exe!__NULL_IMPORT_DESCRIPTOR() + 0x25e3 bytes Unknown



FRC.exe!__NULL_IMPORT_DESCRIPTOR() + 0x187e8 bytes Unknown

Technical Support Apr 3, 2008 - 11:46 AM

We still cannot reproduce this problem. We would like to ask you to do the following:

1) Find the CExtTMWI::OnTabWndClickedButton() method in the ../Prof-UIS/Include/ExtTabWnd.h file. The class implements MDI tab control’s functionality.

2) Find the following code in this method:

            ::PostMessage(
                  hWndMdiChild,
                  WM_SYSCOMMAND,
                  SC_CLOSE,
                  MAKELONG( point.x, point.y )
                  );
This code closes the active MDI child window when the "X"-button on the right side of the MDI tab control is pressed.

3) Insert the following line immediately before PostMessage() is called:
            ::ReleaseCapture();
We would like to know whether the problem is solved. If not, then please also try to insert the following instead of ReleaseCapture():
SendMessage( WM_CANCELMODE );


Pierre MEDART Apr 1, 2008 - 11:08 AM

Hard to build a sample solution where we can reproduce the issue.


We have that issue only with the TabMdi |X| button (close all, Ctrl+F4, etc work fine).


But not always!


If we click on the cross and move the mouse it works fine.


If we click on the cross but don’t move the mouse during few seconds (3 is enough) we jump to that weird state.

Technical Support Apr 3, 2008 - 11:46 AM

We still cannot reproduce this problem. We would like to ask you to do the following:

1) Find the CExtTMWI::OnTabWndClickedButton() method in the ../Prof-UIS/Include/ExtTabWnd.h file. The class implements MDI tab control’s functionality.

2) Find the following code in this method:

            ::PostMessage(
                  hWndMdiChild,
                  WM_SYSCOMMAND,
                  SC_CLOSE,
                  MAKELONG( point.x, point.y )
                  );
This code closes the active MDI child window when the "X"-button on the right side of the MDI tab control is pressed.

3) Insert the following line immediately before PostMessage() is called:
            ::ReleaseCapture();
We would like to know whether the problem is solved. If not, then please also try to insert the following instead of ReleaseCapture():
SendMessage( WM_CANCELMODE );


Pierre MEDART Mar 31, 2008 - 10:31 AM

Using Spy++, it seems that the application stops receiving any SetCursor msg or the MessagePump stops working.


If we press on Alt Key + expand a menu -> application is responsive


If we just press on Alt key -> still in a bad state...


Any idea?