BUG: GetWindowContextHelpId() returns 0 for ActiveX Controls (167170)
The information in this article applies to:
- The Microsoft Foundation Classes (MFC), when used with:
- Microsoft Visual C++, 32-bit Enterprise Edition 4.2
- Microsoft Visual C++, 32-bit Enterprise Edition 4.2b
- Microsoft Visual C++, 32-bit Enterprise Edition 5.0
- Microsoft Visual C++, 32-bit Enterprise Edition 6.0
- Microsoft Visual C++, 32-bit Professional Edition 4.2
- Microsoft Visual C++, 32-bit Professional Edition 4.2b
- Microsoft Visual C++, 32-bit Professional Edition 5.0
- Microsoft Visual C++, 32-bit Professional Edition 6.0
- Microsoft Visual C++, 32-bit Learning Edition 6.0
This article was previously published under Q167170 SYMPTOMS
You can specify a control's help context ID by selecting the "Help ID"
check box from the General tab of the control dialog box in resource
editor. If the "Help ID" check box is selected, calling
GetWindowContextHelpId() at runtime retrieves the help context identifier
associated with the control. This works for all standard controls, such as
edit controls, button controls, etc. However, for ActiveX controls, such as
TestHelp controls, Circ3 controls, and so forth, 0 is returned.
CAUSE
MFC fails to associate a help context id for ActiveX controls even though
the "Help ID" check box is selected.
RESOLUTION
When you call SetWindowContextHelpId() on the control with the correct ID,
it sets the Help ID for the control. OnInitDialog is a good place to do
this. For form views, OnInitialUpdate would be the best place to set the
help ID. The sample code below shows a way to set and retrieve the help
context ID of an ActiveX control (TestHelp control) in a CDialog-derived
class.
STATUS
Microsoft has confirmed this to be a bug in the Microsoft products listed
at the beginning of this article.
REFERENCESSample Code
...
#include "resource.hm" // Make sure you include the .hm file
// generated by the resource editor.
// It includes the help ID's for the
// controls.
...
BOOL CMyDialog::OnInitDialog()
{
CDialog::OnInitDialog();
...
// Associate a help context id with the TestHelp control.
// IDC_TESTHELP_CONTROL is the id of the TestHelp control and
// HIDC_TESTHELP_CONTROL is its help context id defined in
// resource.hm file.
CWnd* control = GetDlgItem(IDC_TESTHELP_CONTROL);
control->SetWindowContextHelpId(HIDC_TESTHELP_CONTROL);
return TRUE; // Return TRUE unless you set the focus to a control.
// EXCEPTION: OCX Property Pages should return FALSE.
}
void CMyDialog::MyFunction()
{
// Retrieve the help context id associated with the TestHelp
// control.
CWnd* control = GetDlgItem(IDC_TESTHELP_CONTROL);
DWORD help_id = control->GetWindowContextHelpId();
TRACE("Help ID for Control IDC_TESTHELP_CONTROL : %x\n", help_id);
...
}
(c) Microsoft Corporation 1997, All Rights Reserved.
Contributions by Yeong-Kah Tam, Microsoft Corporation
Modification Type: | Major | Last Reviewed: | 12/2/2003 |
---|
Keywords: | kbBug kbContainer kbCSHelp kbCtrl kbNoUpdate KB167170 |
---|
|