|
Suppose in Winsock if A send "1234" to peer B. Just when "12" is arrived at Peer B, the network is disconnected. Will peer B be notified with FD_READ and receive "12"? What is the case if the receiving buffer is just full after receiving "12"?
Nilesh Korpe
|
|
|
|
|
|
nilrshkorpe wrote: Where can I find good samples for Casting in VC++/MFC/Pointers and technique for handeling Windows messages.
I think you are mixing a little bit everything. Casting and windows messages are things completely different .
Here[^] is a good article about the different cast method.
For windows messages, this is more tricky because it is a rather large subject. What do you want to know precisely ?
|
|
|
|
|
Which messages I should handel in which class like(CDocument or CView or Cmainframe...)in SDI
Sorry May be junk question but pls bear with me I am very new to all this stuff
and totally confused.....
Nilesh Korpe
|
|
|
|
|
Nilesh Korpe wrote: Which messages I should handel in which class like(CDocument or CView or Cmainframe...)in SDI
Err.. that depends a lot of what you want to do. What could help you a lot is to find a book (or tutorial) about the MFC that explains that.
|
|
|
|
|
can you suggest good totorial or book for this fundamentals.
Nilesh Korpe
|
|
|
|
|
I have made simple SDI application with CHTMLVIEW and added few menus
with there methods but menus appear gray (when properties are set properly)
when I run the code, how to get the menus active.
|| ART OF LIVING ||
|
|
|
|
|
When I added code for getting the URL while navigation
surprisingly my menu commands got visible and active.
as well as tool bar became visible
void CMainFrame::SetAddress(LPCTSTR lpszUrl)
{
m_wndDlgBar.GetDlgItem(IDC_EDIT1)->SetWindowText(lpszUrl);
}
#include "MainFrm.h"
void CWebBrowseView::OnDocumentComplete(LPCTSTR lpszUrl)
{
((CMainFrame*)GetParentFrame())->SetAddress(lpszUrl);
}
|| ART OF LIVING ||
|
|
|
|
|
Dear all,
I am using WM_LBUTTTONUP notification message to capture the (x, y) of user clicks in an mfc application, which hosts a microsoft web browser activex control.
I have added WM_LBUTTTONUP event handler to the application and tried to print some statements there. But apparently that event handler is never executed !!!
Note: I am using visual studio 2003. and the user will be clicking on the microsoft web browser control.
Thank you
llp00na
|
|
|
|
|
Post the code (with the message map entry).
Did you try to put a breakpoint with your debugger ?
|
|
|
|
|
yah this is problem,none of events get recognised there
|| ART OF LIVING ||
|
|
|
|
|
shivditya wrote: yah this is problem,none of events get recognised there
|
|
|
|
|
BEGIN_MESSAGE_MAP(CPilotStudyDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDC_BUTTON_GO, OnBnClickedButtonGo)
ON_WM_LBUTTONDOWN()
END_MESSAGE_MAP()
FILE* trial = fopen("Trial.txt","w");
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);
}
No i am not using any breakpoints
llp00na
|
|
|
|
|
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
|
|
|
|