how do i get OnClick event in CDhtmlDialog derived class

Hi,
i have created a class that inherits from CDHtmlDialog,
i added DECLARE_DHTML_EVENT_MAP to my header file
and the following event map to the cpp file

BEGIN_DHTML_EVENT_MAP(CDlgEmail)
      DHTML_EVENT_ONCLICK(L"btn1", OnBtn1)
      DHTML_EVENT_ONCLICK(L"btn2", OnBtn2)
END_DHTML_EVENT_MAP()

my HTML file is loaded from a url and not from a resource.
both the btn1 and btn2 elements are included in the html file.
when clicking those elements, nothing happens,
i cant get the onclick event to get into my cpp code.

any idea what did I do wrong?
thanks



i
bundy9764Asked:
Who is Participating?

[Product update] Infrastructure Analysis Tool is now available with Business Accounts.Learn More

x
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

LordOfPortsCommented:
The code above itself appears to be good, I ran a simple test with the following code and an HTML file located on a web server:

BEGIN_DHTML_EVENT_MAP(CDlgEmail)
      DHTML_EVENT_ONCLICK(_T("btn1"), OnBtn1)
END_DHTML_EVENT_MAP()

HRESULT CDlgEmail::OnBtn1(IHTMLElement * pElement)
{
      AfxMessageBox(_T("OnBtn1 called."));
      return S_OK;
}

Do the input elements of type button, in the remove HTML file, have an id attribute with values btn1 and btn2, i.e. id="btn1" and id="btn2" respectively?
<html>
</head>
<body>
<input type="button" id="btn1" value="Button 1" />
</body>
</html>

Open in new window

0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
bundy9764Author Commented:
thanks,
thats what i was trying to do...
the page was loaded using the navigate function.
the Ids are set on the html but still no call made to the c++ function.
the only diffrence from your code is the use of _T macro, i have made all calls as wide strings.
0
LordOfPortsCommented:
The wide strings are fine if your application is compiled in Unicode mode.

Have you used the wizard to create the class or was it added to an existing project manually? Can you post the code for your class perhaps?
0
Exploring SharePoint 2016

Explore SharePoint 2016, the web-based, collaborative platform that integrates with Microsoft Office to provide intranets, secure document management, and collaboration so you can develop your online and offline capabilities.

bundy9764Author Commented:
attached the two files ( i have removed some of my irrelevant code)
thanks again.
DlgEmailcpp.txt
DlgEmailh.txt
0
LordOfPortsCommented:
At the moment I still do not see the problem in the code however one question that arises is how do you know that OnBtn1 is not called? The code in the file for OnBtn1 would not indicate that it executed:

HRESULT CDlgEmail::OnBtn1(IHTMLElement* pElement)
{
      CComBSTR szId;
      pElement->get_id(&szId);
      return S_OK;
}

Try adding AfxMessageBox(_T("OnBtn1 called.")); to the function body to see if it gets called.

I basically added a new MFC class derived from CDHtmlDialog to a sample project, then verified that it matches the code you have i.e. same DHTML Event Map, same approach of navigating to the web page on a server, and then created an instance of the class during a button click in the main app:

CDlgEmail dlgE;
dlgE.DoModal();

The dialog opened and displayed the web page and a message box was shown when the button was clicked.
0
bundy9764Author Commented:
thanks for your help,
i knew that the code doesnt work because i have a breakpoint on this function :)

i have found the problem which was not related to the message map or anything, i was listenning to the OnNavigateComplete event, and didnt call CDhtmlDialog::OnNavigateComplete which initialize the document pointer.

thanks again for your help.

0
bundy9764Author Commented:
i had a mistake not accepting it earlier :)
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
System Programming

From novice to tech pro — start learning today.