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?
 
LordOfPortsConnect With a Mentor Commented:
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
 
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
Cloud Class® Course: Ruby Fundamentals

This course will introduce you to Ruby, as well as teach you about classes, methods, variables, data structures, loops, enumerable methods, and finishing touches.

 
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
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.