[JDEV] JabberCOM c++ sample
Robert Temple
robert.temple at dig.com
Wed May 23 19:59:58 CDT 2001
Sorry, thats not my project. Never heard of it.
-Robert
> -----Original Message-----
> From: Dai Jin [mailto:dai_jin at email.com.cn]
> Sent: Wednesday, May 23, 2001 5:24 PM
> To: jdev at jabber.org
> Subject: Re: RE: [JDEV] JabberCOM c++ sample
>
>
> Hello, Robert Temple,
>
> I have imitated your jabbin project. When i inherit from
> a CDocument
> class, it run. But when i inherit from a CDialog class, it can't run.
> Can u give me some help?
>
> Best Regard,
> Jim
>
>
> // JabberDlg.cpp : implementation file
> //
>
> #include "stdafx.h"
> #include "Jabber.h"
> #include "JabberDlg.h"
>
> #ifdef _DEBUG
> #define new DEBUG_NEW
> #undef THIS_FILE
> static char THIS_FILE[] = __FILE__;
> #endif
>
> #define MIN_TRACK_WIDTH 120
> #define MIN_TRACK_LENGTH 180
>
> //////////////////////////////////////////////////////////////
> ///////////////
> // CAboutDlg dialog used for App About
>
> class CAboutDlg : public CDialog
> {
> public:
> CAboutDlg();
>
> // Dialog Data
> //{{AFX_DATA(CAboutDlg)
> enum { IDD = IDD_ABOUTBOX };
> //}}AFX_DATA
>
> // ClassWizard generated virtual function overrides
> //{{AFX_VIRTUAL(CAboutDlg)
> protected:
> virtual void DoDataExchange(CDataExchange* pDX); //
> DDX/DDV support
> //}}AFX_VIRTUAL
>
> // Implementation
> protected:
> //{{AFX_MSG(CAboutDlg)
> //}}AFX_MSG
> DECLARE_MESSAGE_MAP()
> };
>
> CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
> {
> //{{AFX_DATA_INIT(CAboutDlg)
> //}}AFX_DATA_INIT
> }
>
> void CAboutDlg::DoDataExchange(CDataExchange* pDX)
> {
> CDialog::DoDataExchange(pDX);
> //{{AFX_DATA_MAP(CAboutDlg)
> //}}AFX_DATA_MAP
> }
>
> BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
> //{{AFX_MSG_MAP(CAboutDlg)
> // No message handlers
> //}}AFX_MSG_MAP
> END_MESSAGE_MAP()
>
> //////////////////////////////////////////////////////////////
> ///////////////
> // CJabberDlg dialog
>
> CJabberDlg::CJabberDlg(CWnd* pParent /*=NULL*/)
> : CDialog(CJabberDlg::IDD, pParent)
> {
> //{{AFX_DATA_INIT(CJabberDlg)
> // NOTE: the ClassWizard will add member
> initialization here
> //}}AFX_DATA_INIT
> // Note that LoadIcon does not require a subsequent
> DestroyIcon in Win32
> m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
>
> HRESULT hr = CoInitialize(NULL);
> ASSERT(SUCCEEDED(hr));
>
> hr = spJabberSession.CreateInstance(__uuidof(JabberSession));
> ASSERT(SUCCEEDED(hr));
>
> // 连接Jabber服务器
> ConnectSink();
> }
>
> void CJabberDlg::DoDataExchange(CDataExchange* pDX)
> {
> CDialog::DoDataExchange(pDX);
> //{{AFX_DATA_MAP(CJabberDlg)
> // NOTE: the ClassWizard will add DDX and DDV calls here
> //}}AFX_DATA_MAP
> }
>
> BEGIN_DISPATCH_MAP(CJabberDlg, CDialog)
> //{{AFX_DISPATCH_MAP(CJabberDlg)
> DISP_FUNCTION(CJabberDlg, "OnConnect",
> OnConnect, VT_EMPTY, VTS_NONE)
> DISP_FUNCTION(CJabberDlg, "OnDisconnect",
> OnDisconnect, VT_EMPTY, VTS_NONE)
> DISP_FUNCTION(CJabberDlg, "OnAuthError",
> OnAuthError, VT_EMPTY, VTS_BSTR)
> DISP_FUNCTION(CJabberDlg, "OnCommError",
> OnCommError, VT_EMPTY, VTS_BSTR)
> DISP_FUNCTION(CJabberDlg, "OnQueryError",
> OnQueryError, VT_EMPTY, VTS_BSTR VTS_BSTR VTS_DISPATCH)
> DISP_FUNCTION(CJabberDlg, "OnRosterStart",
> OnRosterStart, VT_EMPTY, VTS_NONE)
> DISP_FUNCTION(CJabberDlg, "OnRosterItem",
> OnRosterItem, VT_EMPTY, VTS_DISPATCH)
> DISP_FUNCTION(CJabberDlg, "OnRosterEnd",
> OnRosterEnd, VT_EMPTY, VTS_NONE)
> DISP_FUNCTION(CJabberDlg, "OnMessage",
> OnMessage, VT_EMPTY, VTS_DISPATCH VTS_DISPATCH)
> DISP_FUNCTION(CJabberDlg, "OnPresence",
> OnPresence, VT_EMPTY, VTS_BSTR VTS_BOOL VTS_BSTR
> VTS_BOOL VTS_DISPATCH)
> DISP_FUNCTION(CJabberDlg, "OnSubscriptionRequest",
> OnSubscriptionRequest, VT_EMPTY, VTS_BSTR VTS_BSTR VTS_BSTR)
> DISP_FUNCTION(CJabberDlg, "OnSubscriptionApproved",
> OnSubscriptionApproved, VT_EMPTY, VTS_BSTR VTS_BSTR)
> DISP_FUNCTION(CJabberDlg, "OnSubscriptionDenied",
> OnSubscriptionDenied, VT_EMPTY, VTS_BSTR VTS_BSTR)
> DISP_FUNCTION(CJabberDlg, "OnXML",
> OnXML, VT_EMPTY, VTS_I4 VTS_BSTR)
> DISP_FUNCTION(CJabberDlg, "OnJabberIQ",
> OnJabberIQ, VT_EMPTY, VTS_BSTR VTS_DISPATCH)
> DISP_FUNCTION(CJabberDlg, "OnUnhandledQuery",
> OnUnhandledQuery, VT_EMPTY, VTS_BSTR VTS_DISPATCH)
> DISP_FUNCTION(CJabberDlg, "OnAgentsStart",
> OnAgentsStart, VT_EMPTY, VTS_NONE)
> DISP_FUNCTION(CJabberDlg, "OnAgentItem",
> OnAgentItem, VT_EMPTY, VTS_DISPATCH VTS_BSTR)
> DISP_FUNCTION(CJabberDlg, "OnAgentsEnd",
> OnAgentsEnd, VT_EMPTY, VTS_NONE)
> DISP_FUNCTION(CJabberDlg, "OnXMLTag",
> OnXMLTag, VT_EMPTY, VTS_DISPATCH)
> DISP_FUNCTION(CJabberDlg, "OnVersionGet",
> OnVersionGet, VT_EMPTY, VTS_BSTR VTS_DISPATCH)
> DISP_FUNCTION(CJabberDlg, "OnTimeGet",
> OnTimeGet, VT_EMPTY, VTS_BSTR VTS_DISPATCH)
> DISP_FUNCTION(CJabberDlg, "OnGetOOB",
> OnGetOOB, VT_EMPTY, VTS_BSTR VTS_BSTR VTS_BSTR
> VTS_DISPATCH)
> //}}AFX_DISPATCH_MAP
> END_DISPATCH_MAP()
>
> BEGIN_INTERFACE_MAP(CJabberDlg, CDialog)
> INTERFACE_PART(CJabberDlg,
> __uuidof(IJabberSessionEvents), Dispatch)
> END_INTERFACE_MAP()
>
> BEGIN_MESSAGE_MAP(CJabberDlg, CDialog)
> //{{AFX_MSG_MAP(CJabberDlg)
> ON_WM_SYSCOMMAND()
> ON_WM_PAINT()
> ON_WM_QUERYDRAGICON()
> ON_WM_GETMINMAXINFO()
> ON_WM_CLOSE()
> //}}AFX_MSG_MAP
> END_MESSAGE_MAP()
>
> //////////////////////////////////////////////////////////////
> ///////////////
> // CJabberDlg message handlers
>
> BOOL CJabberDlg::OnInitDialog()
> {
> CDialog::OnInitDialog();
>
> // Add "About..." menu item to system menu.
>
> // IDM_ABOUTBOX must be in the system command range.
> 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);
> }
> }
>
> // Set the icon for this dialog. The framework does
> this automatically
> // when the application's main window is not a dialog
> SetIcon(m_hIcon, TRUE); // Set big icon
> SetIcon(m_hIcon, FALSE); // Set small icon
>
> // TODO: Add extra initialization here
> m_sJabberID = m_sUsername + '@' + m_sServer;
>
> Connect();
>
> return TRUE; // return TRUE unless you set the focus
> to a control
> }
>
> void CJabberDlg::OnSysCommand(UINT nID, LPARAM lParam)
> {
> if ((nID & 0xFFF0) == IDM_ABOUTBOX)
> {
> CAboutDlg dlgAbout;
> dlgAbout.DoModal();
> }
> else
> {
> CDialog::OnSysCommand(nID, lParam);
> }
> }
>
> // If you add a minimize button to your dialog, you will need
> the code below
> // to draw the icon. For MFC applications using the
> document/view model,
> // this is automatically done for you by the framework.
>
> void CJabberDlg::OnPaint()
> {
> if (IsIconic())
> {
> CPaintDC dc(this); // device context for painting
>
> SendMessage(WM_ICONERASEBKGND, (WPARAM)
> dc.GetSafeHdc(), 0);
>
> // Center icon in client rectangle
> 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;
>
> // Draw the icon
> dc.DrawIcon(x, y, m_hIcon);
> }
> else
> {
> CDialog::OnPaint();
> }
> }
>
> // The system calls this to obtain the cursor to display
> while the user drags
> // the minimized window.
> HCURSOR CJabberDlg::OnQueryDragIcon()
> {
> return (HCURSOR) m_hIcon;
> }
>
> void CJabberDlg::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
> {
> // TODO: Add your message handler code here and/or call default
> lpMMI->ptMinTrackSize.x = MIN_TRACK_WIDTH;
> lpMMI->ptMinTrackSize.y = MIN_TRACK_LENGTH;
>
> CDialog::OnGetMinMaxInfo(lpMMI);
> }
>
> BOOL CJabberDlg::PreTranslateMessage(MSG* pMsg)
> {
> // TODO: Add your specialized code here and/or call the
> base class
> if ((pMsg->message == WM_KEYDOWN) &&
> (pMsg->wParam == VK_RETURN || pMsg->wParam ==
> VK_ESCAPE))
> {
> return TRUE;
> }
>
> return CDialog::PreTranslateMessage(pMsg);
> }
>
> void CJabberDlg::ConnectSink()
> {
> // 得到JabberSession组件的IDispatch接口指针
> IUnknown* pUnkSink = GetIDispatch(FALSE);
> // 与事件接受器建立连接
> BOOL bSucceed = AfxConnectionAdvise(spJabberSession,
>
> __uuidof(IJabberSessionEvents),
>
> pUnkSink, FALSE, &m_dwCookie);
> ASSERT(bSucceed);
> }
>
> void CJabberDlg::DisConnectSink()
> {
> // 得到JabberSession组件的IDispatch接口指针
> IUnknown* pUnkSink = GetIDispatch(FALSE);
> // 与事件接受器建立连接
> BOOL bSucceed = AfxConnectionUnadvise(spJabberSession,
>
> __uuidof(IJabberSessionEvents),
>
> pUnkSink, FALSE, m_dwCookie);
> ASSERT(bSucceed);
> }
>
> void CJabberDlg::OnConnect()
> {
> MessageBox("OK");
> }
>
> void CJabberDlg::OnDisconnect()
> {
> }
>
> void CJabberDlg::OnAuthError(LPSTR pTxt)
> {
> }
>
> void CJabberDlg::OnCommError(LPSTR PTxt)
> {
> }
>
> void CJabberDlg::OnQueryError(LPSTR PTxt, LPSTR fromjid,
> IXMLTagPtr tag)
> {
> }
>
> void CJabberDlg::OnRosterStart()
> {
> }
>
> void CJabberDlg::OnRosterItem(IJabberRosterItemPtr item)
> {
> }
>
> void CJabberDlg::OnRosterEnd()
> {
> }
>
> void CJabberDlg::OnMessage(IJabberMsgPtr msg, IXMLTagPtr tag)
> {
> }
>
> void CJabberDlg::OnPresence(LPSTR presJID, BOOL available,
> LPSTR status, BOOL inRoster, IXMLTagPtr tag)
> {
> }
>
> void CJabberDlg::OnSubscriptionRequest(LPSTR fromJID, LPSTR
> subType, LPSTR status)
> {
> }
>
> void CJabberDlg::OnSubscriptionApproved(LPSTR fromJID, LPSTR status)
> {
> }
>
> void CJabberDlg::OnSubscriptionDenied(LPSTR fromJID, LPSTR status)
> {
> }
>
> void CJabberDlg::OnXML(long direction, LPSTR txt)
> {
> }
>
> void CJabberDlg::OnJabberIQ(LPSTR nameSpace, IJabberIQPtr iq)
> {
> }
>
> void CJabberDlg::OnUnhandledQuery(LPSTR nameSpace, IXMLTagPtr tag)
> {
> }
>
> void CJabberDlg::OnAgentsStart()
> {
> }
>
> void CJabberDlg::OnAgentItem(IJabberAgentItemPtr agent, LPSTR iqID)
> {
> }
>
> void CJabberDlg::OnAgentsEnd()
> {
> }
>
> void CJabberDlg::OnXMLTag(IXMLTagPtr Tag)
> {
> }
>
> void CJabberDlg::OnVersionGet(LPSTR fromJID, IXMLTagPtr Tag)
> {
> }
>
> void CJabberDlg::OnTimeGet(LPSTR fromJID, IXMLTagPtr Tag)
> {
> }
>
> void CJabberDlg::OnGetOOB(LPSTR fromJID, LPSTR URL, LPSTR
> Desc, IXMLTagPtr Tag)
> {
> }
>
> void CJabberDlg::OnClose()
> {
> // TODO: Add your message handler code here and/or call default
> DisConnectSink();
> DisConnect();
>
> CoUninitialize();
>
> CDialog::OnClose();
> }
>
> void CJabberDlg::Connect()
> {
> spJabberSession->PutPassword((LPCSTR)m_sUsername);
> spJabberSession->PutPassword((LPCSTR)m_sPassword);
> spJabberSession->PutServer((LPCSTR)m_sServer);
> spJabberSession->PutPort(5222);
> spJabberSession->DoConnect(VARIANT_FALSE, jatDigest);
> }
>
> void CJabberDlg::DisConnect()
> {
> spJabberSession->PutAvailable(VARIANT_FALSE);
> spJabberSession->DoDisconnect(VARIANT_FALSE);
> }
>
>
>
> Dai Jin
> dai_jin at email.com.cn
>
> _______________________________________________
> jdev mailing list
> jdev at jabber.org
> http://mailman.jabber.org/listinfo/jdev
>
More information about the JDev
mailing list