HTML-Help window is not closing
Printed From: Codejock Forums
Category: Codejock Products
Forum Name: Skin Framework
Forum Description: Topics Related to Codejock Skin Framework
URL: http://forum.codejock.com/forum_posts.asp?TID=15592
Printed Date: 22 November 2024 at 6:02pm Software Version: Web Wiz Forums 12.04 - http://www.webwizforums.com
Topic: HTML-Help window is not closing
Posted By: Dieter
Subject: HTML-Help window is not closing
Date Posted: 11 November 2009 at 1:49pm
I've several applications which use the Skin Framework and HTML-Help (CHM-File). The applications are built with Visual C++ 6 because they have to run on older Windows operating systems (Windows 98, NT4).
With Codejock 13.0 the CHM help window has been opened and closed with skinning without any problems: Also the help window closed automatically when my applications have been closed.
Now with the Codejock versions 13.1.0 and 13.2.1 the CHM help window is opened correctly, but when the application is closed, the help window isn't automatically closed: The help window remains about 10 seconds skinned and after 10 seconds the skinning of the help window disappears but the help window remains open.
Can you tell me what has been changed between Codejock 13.0 and 13.1/13.2.1 and could be now the cause for the CHM-help window problem?
------------- Dieter
Product: Xtreme ToolkitPro version 15.2.1
Platform: Windows XP (32bit) - SP 3
Language: Visual C++ 6.0, Visual Studio 2010
|
Replies:
Posted By: Oleg
Date Posted: 12 November 2009 at 7:25am
Hi,
Show code you use to show HTML help from VC6 project.
------------- Oleg, Support Team CODEJOCK SOFTWARE SOLUTIONS
|
Posted By: Dieter
Date Posted: 12 November 2009 at 10:05am
Hi Oleg,
First, I'm checking with the following code if HTML help is available:
CheckHtmlHelp() { BOOL bSucceeded = FALSE; HINSTANCE hHTMLHelpInstance;
typedef HWND (WINAPI *FPHH) (HWND, LPCSTR, UINT, DWORD); FPHH htmlHelp;
// Load hhctrl.ocx. hHTMLHelpInstance = LoadLibrary (TEXT("hhctrl.ocx"));
if (hHTMLHelpInstance != NULL) { #ifdef UNICODE const TCHAR *pszHtmlHelp = "HtmlHelpW"; #else const TCHAR *pszHtmlHelp = "HtmlHelpA"; #endif (FARPROC&) htmlHelp = GetProcAddress(hHTMLHelpInstance, pszHtmlHelp);
if (htmlHelp == NULL) { TRACE ("WARNING : hhctrl.ocx loaded but GetProcAddress failed");
bSucceeded = FALSE; } else { bSucceeded = TRUE; } FreeLibrary (hHTMLHelpInstance); } return bSucceeded; }
Finally, I'm opening the HTML file with the following code: HtmlHelp(::GetDesktopWindow(), AfxGetApp()->m_pszHelpFilePath, HH_HELP_CONTEXT, nCmd == HELP_CONTEXT ? dwData : 0)
I've checked today with a smaller project where I'm also using the skin framework: In this smaller project I've no problem with HTMLHelp.
------------- Dieter
Product: Xtreme ToolkitPro version 15.2.1
Platform: Windows XP (32bit) - SP 3
Language: Visual C++ 6.0, Visual Studio 2010
|
Posted By: Smucker
Date Posted: 12 November 2009 at 1:35pm
Here is some possible help:
I duplicated the problem here. The process is not exiting because of a deadlock. The main thread is in CXTPSkinObject::UnattachHook() waiting for a ::SendMessage() to the tab control in the Help window to complete. However, the thread trying to handle that message (in CXTPSkinManager::HookWndProc() ) is waiting on a critical section owned by the main thread.
Here are the relevant stacks from the threads:
Main thread: ... USER32.dll!_SendMessageW@16+0x7f thumbs8.exe!CXTPSkinObject::UnattachHook+0x57 thumbs8.exe!CXTPSkinManager::RemoveAll+0x98 thumbs8.exe!CXTPSkinManager::~CXTPSkinManager+0xfb thumbs8.exe!CXTPSkinManager::`scalar deleting destructor'+0x2b thumbs8.exe!CXTPSkinManager::CDestructor::~CDestructor+0x62 thumbs8.exe!`dynamic atexit destructor for '__xtpSkinManagerDestructor''+0x28 thumbs8.exe!doexit+0x10a thumbs8.exe!exit+0x12 ...
Help thread: ... ntdll.dll!_ZwWaitForSingleObject@12+0x15 ntdll.dll!_RtlpWaitOnCriticalSection@8+0x155 ntdll.dll!_RtlEnterCriticalSection@4+0x152 thumbs8.exe!CXTPLockGuard::LockThread+0x31 thumbs8.exe!CXTPLockGuard::CXTPLockGuard+0x33 thumbs8.exe!CXTPSkinManager::Lookup+0x56 thumbs8.exe!CXTPSkinManager::HookWndProc+0x2e USER32.dll!_InternalCallWinProc@20+0x23 USER32.dll!_UserCallWinProcCheckWow@32+0x109 USER32.dll!_DispatchClientMessage@24+0xe0 USER32.dll!___fnDWORD@4+0x2b ntdll.dll!_KiUserCallbackDispatcher@12+0x2e USER32.dll!__PeekMessage@24+0x88 USER32.dll!_PeekMessageA@20+0x142 hhctrl.ocx!?AWMessagePump@@YGXPAUHWND__@@@Z+0x5c hhctrl.ocx!_HhWindowThread@4+0x10e thumbs8.exe!CXTPSkinManagerApiHook::ThreadProcHook+0x62 ...
One simple solution, which also helps release builds of complex
applications to exit quickly, is to simply TerminateProcess() once
external resources (databases, writable files, sockets, etc.) are closed,
rather than go through the many and various laborious cleanup routines
for memory, handles, etc. However, I wouldn't recommend this on Windows
9x/ME because GDI handles, color profiles, and shared memory will leak.
Another unrelated note: you can build applications compatible with Windows 98 & NT4 with any later version of Visual C++, you just have to be careful not to use any unsupported APIs or dlls, or provide code to dynamically bind for libraries/apis similarly to what you're doing in CheckHtmlHelp(). I believe Codejock has some helper routines to make this easier too.
------------- Product: Xtreme Toolkit Pro version 13.2 (Unicode, static build)
Platform: Windows 200x/XP/Vista/Win7 (32/64 bit)
Language: Visual C++ 9.0 (Studio 2008)
|
Posted By: Oleg
Date Posted: 13 November 2009 at 3:31am
Thanks, Yes it can be reason. We are changing RemoveAll method.
http://forum.codejock.com/member_profile.asp?PF=2192&FID=130 - Dieter , Please temporary comment CXTPLockGuard lock(m_csObjects); inside CXTPSkinManager::RemoveAll and rebuild library.
------------- Oleg, Support Team CODEJOCK SOFTWARE SOLUTIONS
|
Posted By: Dieter
Date Posted: 13 November 2009 at 2:01pm
Thank you very much both of you!
My problem is solved.
Smucker wrote:
Another unrelated note: you can build applications compatible with
Windows 98 & NT4 with any later version of Visual C++, you just
have to be careful not to use any unsupported APIs or dlls, or provide
code to dynamically bind for libraries/apis similarly to what you're
doing in CheckHtmlHelp(). I believe Codejock has some helper routines to make this easier too.
|
You're right, I should switch to an actual version of Visual C++. Visual Studio 2008 and 2010 have so many new features, I'm using 2008 already for new applications. And it becomes more and more difficult to get third party development tools which still work with Visual C++ 6.0.
------------- Dieter
Product: Xtreme ToolkitPro version 15.2.1
Platform: Windows XP (32bit) - SP 3
Language: Visual C++ 6.0, Visual Studio 2010
|
|