|
What is this line doing outside of your function ?
FILE* trial = fopen("Trial.txt","w");
Instead of using that, use your debugger and put a breakpoint there, it's much more safer than everything you could write .
|
|
|
|
|
This line creates a file in which i will be saving the x,y of user clicks. But i just dont get it, why this is never executed !!!
void CPilotStudyDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
fprintf(trial, "\nAnything ...");
// TODO: Add your message handler code here and/or call default
CDialog::OnLButtonDown(nFlags, point);
}
even though i dont believe that FILE* trial = fopen("Trial.txt","w"); is the trouble i have taken it off. However OnLButtonDown still never gets called
llp00na
|
|
|
|
|
llp00na wrote: However OnLButtonDown still never gets called
How do you know that ?
Please, for the third time I ask you: use your debugger ! Put a breakpoint in the function and press F5. Tell me if the program stops in the function or not.
|
|
|
|
|
I am sorry.
I have done what u told me. and no it does not stop at all.
llp00na
-- modified at 8:53 Wednesday 10th May, 2006
|
|
|
|
|
That's strange. Are you sure you press the left button (I don't know, maybe you inverted them ) ? Try both of them to be sure.
Post maybe the code of the header file of your dialog and the source code also. Please, use the <pre> tags just above the emoticons (otherwise it will look horrible).
|
|
|
|
|
Yep, i am positive. I have also pressed both buttons but my program runs smoothly and never stops.
here is my header file
#pragma once
#include "explorer1.h"
class CPilotStudyDlg : public CDialog
{
public:
CPilotStudyDlg(CWnd* pParent = NULL);
enum { IDD = IDD_PILOTSTUDY_DIALOG };
protected:
virtual void DoDataExchange(CDataExchange* pDX);
protected:
HICON m_hIcon;
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
public:
CExplorer1 m_webBrowser;
CString urlAddress;
afx_msg void OnBnClickedButtonGo();
DECLARE_EVENTSINK_MAP()
void NavigateComplete2Explorer1(LPDISPATCH pDisp, VARIANT* URL);
void DocumentCompleteExplorer1(LPDISPATCH pDisp, VARIANT* URL);
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
};
my cpp file is:
#include "stdafx.h"
#include "PilotStudy.h"
#include "PilotStudyDlg.h"
#include ".\pilotstudydlg.h"
#include <mshtml.h>
#include <mshtmdid.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
enum { IDD = IDD_ABOUTBOX };
protected:
virtual void DoDataExchange(CDataExchange* pDX);
protected:
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()
CPilotStudyDlg::CPilotStudyDlg(CWnd* pParent )
: CDialog(CPilotStudyDlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
urlAddress = "www.google.com";
}
void CPilotStudyDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_EXPLORER1, m_webBrowser);
}
BEGIN_MESSAGE_MAP(CPilotStudyDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON_GO, OnBnClickedButtonGo)
ON_WM_LBUTTONDOWN()
END_MESSAGE_MAP()
BOOL CPilotStudyDlg::OnInitDialog()
{
CDialog::OnInitDialog();
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
SetIcon(m_hIcon, TRUE);
SetIcon(m_hIcon, FALSE);
m_webBrowser.Navigate(urlAddress, NULL, NULL, NULL, NULL);
return TRUE;
}
void CPilotStudyDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
void CPilotStudyDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this);
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
HCURSOR CPilotStudyDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
void CPilotStudyDlg::OnBnClickedButtonGo()
{
GetDlgItemText(IDC_EDIT_ADDRESS, urlAddress);
if(urlAddress.GetLength() == 0){
return;
}
m_webBrowser.Navigate(urlAddress, NULL, NULL, NULL, NULL);
}
BEGIN_EVENTSINK_MAP(CPilotStudyDlg, CDialog)
ON_EVENT(CPilotStudyDlg, IDC_EXPLORER1, 252, NavigateComplete2Explorer1, VTS_DISPATCH VTS_PVARIANT)
ON_EVENT(CPilotStudyDlg, IDC_EXPLORER1, 259, DocumentCompleteExplorer1, VTS_DISPATCH VTS_PVARIANT)
END_EVENTSINK_MAP()
void CPilotStudyDlg::NavigateComplete2Explorer1(LPDISPATCH pDisp, VARIANT* URL)
{
CString strURL = m_webBrowser.get_LocationURL();
SetDlgItemText(IDC_EDIT_ADDRESS, strURL);
}
FILE* trial = fopen("Trial.txt","w");
void CPilotStudyDlg::DocumentCompleteExplorer1(LPDISPATCH pDisp, VARIANT* URL)
{
if(m_webBrowser.get_ReadyState() != READYSTATE_COMPLETE)
return;
}
void CPilotStudyDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
fprintf(trial, "\nAnything ...");
CDialog::OnLButtonDown(nFlags, point);
}
llp00na
-- modified at 9:03 Wednesday 10th May, 2006
|
|
|
|
|
Try to move both lines:
afx_msg void OnBnClickedButtonGo();
and
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
above the DECLARE_MESSAGE_MAP() line
|
|
|
|
|
I have done that. but it does not stop
llp00na
|
|
|
|
|
Then I don't know... Where are you releasing the button ? On the dialog where there is nothing or on a control ? I think this will only work if you release it on the dialog (check it out: press on the dialog where there is nothing under the mouse).
|
|
|
|
|
oh yea. Now i have clicked on the dialog and the program stopped. So there is no way to use WM_LBUTTTONUP to capture use clicks on the microsoft control ???
llp00na
|
|
|
|
|
So, we finally get it there . You didn't tell me that you were clicking on the control !
Normally, it's up to the control to know that you clicked on it and to fire an event in that case. I cannot help you more because I don't know the control. Take a look at the doc (if you have), there should be an event for mouse up event (if they implemented it).
|
|
|
|
|
oh, sorry i havent well expressed my prob. thanx alot for your effort. At least i know that WM_LBUTTTONUP is not the way to go about it. I will look into html events.
I want to get a final opinion about mouse hooking. would it be possible to use mouse hook functions to get click on the control ??? or does it only provide clicks on the dialog ??
llp00na
|
|
|
|
|
llp00na wrote: oh, sorry i havent well expressed my prob.
No problem, in general if you don't know what the problem is, you won't explain it clearly.
llp00na wrote: would it be possible to use mouse hook functions to get click on the control ???
I have no idea, I never worked with hooks before. But I think the control should probably be able to fire mouse events.
|
|
|
|
|
thanx alot
I appreciate your help very much
llp00na
|
|
|
|
|
llp00na wrote: I appreciate your help very much
You're welcome. Just keep me informed if you find a solution and how you did it. I'm interested.
Good luck
|
|
|
|
|
Yep. Yesterday while i was trying to figure out how to use mouse hooks. Someone told me that there is no need to perform hooking at all. Instead he recommended to override the PreTranslateMessage. He proposed the following code:
BOOL CPilotStudyDlg::PreTranslateMessage(MSG* pMsg)
{
if(WM_LBUTTONDOWN == pMsg->message)
{
fprintf(trial, "\nMouse: x = %i, y = %i ", LOWORD(pMsg->lParam), HIWORD(pMsg->lParam));
fflush(trial);
}
return CDialog::PreTranslateMessage(pMsg);
}
It works really fine. However i have a slight problem, in my browser i have an address bar (where user enters url) that placed above the control. Whenever i click on the address bar i receice a *y* value that is bigger than the value of *y* received when clicking on the control (just beneath the address bar).
I dont know why this is happening, *y* values should get bigger as i move from the top towards the bottom but its not the case.
If you have any clue why this might be happening, please share.
Cheers
llp00na
-- modified at 5:13 Thursday 11th May, 2006
|
|
|
|
|
llp00na wrote: Instead he recommended to override the PreTranslateMessage
I don't think this is a good idea: what you need (from what I understood) is getting a message when the user clicks on the control, not on the dialog (am I wrong ?). So, it is better that the control fires the event when you click on it, so that you get notification in the dialog (and you can retrieve the X and Y position ON the control).
llp00na wrote: Whenever i click on the address bar i receice a *y* value that is bigger than the value of *y* received when clicking on the control (just beneath the address bar).
That's strange... I don't know what the problem is. But what position do you need to retrieve exactly ? The position on the dialog on the position on the control (they are different because the upper-left corner is considered as the reference point for the position on the control).
Maybe, before going further, it could be very helpfull for me to understand what you are trying to achieve: why do you want to get these mouse events and for what purpose (and why you need the position). What is the control used ? ...
|
|
|
|
|
I am trying to build a web browser-IE in which users will be clicking on their areas of interest, for that reason I have to capture the x,y of user left clicks on the control (web browser). I am gona be needing to perform some comparison between the captured (x, y)s
I have been looking at the html element events and it looks like it only returns the html elements that have been clicked. It does not return the exact (x,y).
Capturing the exact x,y of user left clicks will always allow me to access the corresponding html element using pHTMLDocument2->elementFromPoint(x, y, &htmlElement);
However, handling html element events will only allow me to access the relevant html elements. I wont be able to retrieve the (x,y):
Handling html element Events. Please correct me if i am wrong
well for the positiong problem. I dont care which point is to be set as a reference, as long as it is consistent. ie, the top left corner of the client area is the reference or the top left corner of the control is the reference. I cant afford havign two reference points which seems to be the case for me now. whenever i click on the address bar i get a *y* value that is greater than the *y* value retrieved when clicking on the top left corner of the control .
I hope it is clearer now.
llp00na
-- modified at 6:11 Thursday 11th May, 2006
|
|
|
|
|
I can email you the whole application if u want ? you would then probably be able to diagnose it.
thanx
llp00na
-- modified at 9:08 Wednesday 10th May, 2006
|
|
|
|
|
This won't help because I don't have visual studio installed here at work.
|
|
|
|
|
Dont assign class from classwizard for the dialog bar on which you are calling on left button .
Only way you can access the controls on gui is the way I shown.
this m_wndDlgBar variable gets automatically assign in CMainFrame when
you have derived view from CHTMLView and on STEP 4 of wizard you must opt
for Internet Exporer Rebar option. I dont know how you are creating activex
but hope you will be using htmlview.
m_wndDlgBar.GetDlgItem(IDC_EDIT1)->GetWindowText(sm); // CString sm; defined.
((CWebBrowseView*)GetActiveView())->Navigate2(sm);
|| ART OF LIVING ||
|
|
|
|
|
Actually i am using a dialog based application. I have then added the microsoft web browser activex control to the dialog.
so its pretty different from what you described.
llp00na
|
|
|
|
|
How Can I Make Achild Window In Win32 .
I Need The Child Window With Out Close button , i,e in the midddle of the parent window
|
|
|
|
|
are you building an mfc application ???
llp00na
|
|
|
|
|
Are you using a dialog from resource? If set style as child and Uncheck the System Menu check box in Dialog Property. Also you have to launch it by using Create API.
- NS -
|
|
|
|
|