www.gusucode.com > VC++ VFW视频会议客户端源码-源码程序 > VC++ VFW视频会议客户端源码-源码程序/code/VFWDialog/AddRemote.cpp
//Download by http://www.NewXing.com // AddRemote.cpp : implementation file // #include "stdafx.h" #include "GraghDialog.h" #include "AddRemote.h" #include "AddressBook.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CAddRemote dialog CAddRemote::CAddRemote(CWnd* pParent /*=NULL*/) : CDialog(CAddRemote::IDD, pParent) { //{{AFX_DATA_INIT(CAddRemote) m_Comment = _T("连接自己"); m_IPAddr = _T("127.0.0.1"); m_Name = _T("Local"); m_AutoAccept = FALSE; //}}AFX_DATA_INIT } void CAddRemote::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CAddRemote) DDX_Control(pDX, IDOK, m_OK); DDX_Control(pDX, IDCANCEL, m_Cancel); DDX_Text(pDX, IDC_COMMENT, m_Comment); DDV_MaxChars(pDX, m_Comment, 64); DDX_Text(pDX, IDC_IPADDR, m_IPAddr); DDV_MaxChars(pDX, m_IPAddr, 64); DDX_Text(pDX, IDC_NAME, m_Name); DDV_MaxChars(pDX, m_Name, 64); DDX_Check(pDX, IDC_AUTOACCEPT, m_AutoAccept); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CAddRemote, CDialog) //{{AFX_MSG_MAP(CAddRemote) ON_WM_ERASEBKGND() ON_WM_LBUTTONDOWN() ON_WM_MOUSEMOVE() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CAddRemote message handlers BOOL CAddRemote::OnInitDialog() { CDialog::OnInitDialog(); m_hdc = GetDC ()->m_hDC ; BITMAP bm; m_bmpMain.LoadBitmap (IDB_ADDREMOTE); m_bmpMain.GetBitmap (&bm); m_Width = bm.bmWidth ; m_Height = bm.bmHeight ; RECT rc; GetClientRect(&rc); ClientToScreen (&rc); ::SetWindowPos (m_hWnd,HWND_TOP,rc.left ,rc.top ,m_Width ,m_Height,0); POINT pt[4]; pt[0].x=18; pt[0].y=2; pt[1].x=118; pt[1].y=2; pt[2].x=104; pt[2].y=16; pt[3].x=4; pt[3].y=16; m_hTitleRgn = CreatePolygonRgn(pt,4,ALTERNATE); DrawTitleBar(m_hdc); if(m_CallAction ==1) SetWindowText(_T("添加联系人")); else if(m_CallAction ==2) SetWindowText(_T("修改联系人")); else SetWindowText(_T("联系人")); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CAddRemote::SetParent(CDialog *dlg) { m_pdlg = dlg; } void CAddRemote::FreeSource() { DeleteObject(m_hTitleRgn); } void CAddRemote::OnOK() { LVITEM li; int iItem; UpdateData(TRUE); if(m_CallAction == 1) // add { li.iSubItem=0; li.mask=LVIF_TEXT; li.iItem=1000; li.pszText= m_Name.GetBuffer (m_Name.GetLength ()) ; iItem=ListView_InsertItem(((CAddressBook*)m_pdlg)->m_AddrList.m_hWnd ,&li); }else // modify { iItem=ListView_GetNextItem(((CAddressBook*)m_pdlg)->m_AddrList ,-1,LVNI_SELECTED); if(iItem<0) { AfxMessageBox("严重错误: 无法指定联系人!"); CDialog::OnOK(); } ListView_SetItemText(((CAddressBook*)m_pdlg)->m_AddrList.m_hWnd,iItem,0,m_Name.GetBuffer (m_Name.GetLength ())) ; } ListView_SetItemText(((CAddressBook*)m_pdlg)->m_AddrList.m_hWnd,iItem,1,m_IPAddr.GetBuffer (m_IPAddr.GetLength ())) ; if(m_AutoAccept ) // 自动接受该用户呼叫 { ListView_SetItemText(((CAddressBook*)m_pdlg)->m_AddrList.m_hWnd,iItem,2,"是") ; } else { ListView_SetItemText(((CAddressBook*)m_pdlg)->m_AddrList.m_hWnd,iItem,2,"否") ; } ListView_SetItemText(((CAddressBook*)m_pdlg)->m_AddrList.m_hWnd,iItem,3,m_Comment.GetBuffer (m_Comment.GetLength ())) ; FreeSource(); CDialog::OnOK(); } void CAddRemote::OnCancel() { FreeSource(); CDialog::OnCancel(); } void CAddRemote::OnLButtonDown(UINT nFlags, CPoint point) { CDialog::OnLButtonDown(nFlags, point); if(PtInRegion(m_hTitleRgn,point.x,point.y)) PostMessage(WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(point.x,point.y)); } void CAddRemote::OnMouseMove(UINT nFlags, CPoint point) { CDialog::OnMouseMove(nFlags, point); PtInRegion(m_hTitleRgn,point.x,point.y)?m_bHilight =TRUE:m_bHilight =FALSE; if(m_bHilight != m_Last ) { m_Last=m_bHilight; DrawTitleBar(m_hdc); } } BOOL CAddRemote::OnEraseBkgnd(CDC* pDC) { CDC MemDC; MemDC.CreateCompatibleDC(pDC); CBitmap *pOldBMP = (CBitmap*)MemDC.SelectObject(&m_bmpMain); pDC->BitBlt(0,0,m_Width,m_Height,&MemDC,0,0,SRCCOPY); if(pOldBMP) MemDC.SelectObject(pOldBMP); MemDC.DeleteDC (); return TRUE; } void CAddRemote::DrawTitleBar(HDC hdc) { RECT rc; GetClientRect(&rc); HBRUSH hbr; if(m_bHilight) hbr=CreateSolidBrush(0x00FF3333); else hbr=CreateSolidBrush(0x00660000); FillRgn(hdc,m_hTitleRgn,hbr); DeleteObject(hbr); char szTitle[64]=""; NONCLIENTMETRICS ncm; ncm.cbSize = sizeof(ncm); SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, &ncm, 0); HFONT hf=CreateFontIndirect(&ncm.lfCaptionFont); HFONT hof=(HFONT)SelectObject(hdc,hf); SetBkMode(hdc,TRANSPARENT); if(m_bHilight) SetTextColor(hdc,0x000000ff); else SetTextColor(hdc,0x00C0C0C0); GetWindowText(szTitle,63); DrawText(hdc,szTitle,strlen(szTitle),&CRect(25,2,144,22),DT_LEFT); SelectObject(hdc,hof); DeleteObject(hf); DeleteObject(hof); }