⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dialerview.cpp

📁 在wince上创建位图滚动显示静态控件
💻 CPP
字号:
// DialerView.cpp : implementation of the CDialerView class
//

#include "stdafx.h"
#include "Dialer.h"

#include "DialerDoc.h"
#include "DialerView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CDialerView

IMPLEMENT_DYNCREATE(CDialerView, CFormView)

BEGIN_MESSAGE_MAP(CDialerView, CFormView)
	//{{AFX_MSG_MAP(CDialerView)
	ON_EN_SETFOCUS(IDC_EDT_CALLCMD, OnSetfocusEdtCallcmd)
	ON_EN_CHANGE(IDC_EDT_CALLCMD, OnChangeEdtCallcmd)
	ON_BN_CLICKED(IDC_BTN_PLUS, OnBtnPlus)
	ON_BN_CLICKED(IDC_BTN1, OnBtnNum)
	ON_EN_KILLFOCUS(IDC_EDT_CALLCMD, OnKillfocusEdtCallcmd)
	ON_BN_CLICKED(IDC_BTN_QUICKDIAL, OnBtnQuickdial)	
	ON_BN_CLICKED(IDC_BTN_CALL, OnBtnCallOut)
	ON_BN_CLICKED(IDC_BTN_RETURN, OnBtnReturn)
	ON_BN_CLICKED(IDC_BTN2, OnBtnNum)
	ON_BN_CLICKED(IDC_BTN3, OnBtnNum)
	ON_BN_CLICKED(IDC_BTN4, OnBtnNum)
	ON_BN_CLICKED(IDC_BTN5, OnBtnNum)
	ON_BN_CLICKED(IDC_BTN6, OnBtnNum)
	ON_BN_CLICKED(IDC_BTN7, OnBtnNum)
	ON_BN_CLICKED(IDC_BTN8, OnBtnNum)
	ON_BN_CLICKED(IDC_BTN9, OnBtnNum)
	ON_BN_CLICKED(IDC_BTN_STAR, OnBtnNum)
	ON_BN_CLICKED(IDC_BTN_WAIT, OnBtnNum)
	ON_BN_CLICKED(IDC_BTN_WELL, OnBtnNum)
	ON_BN_CLICKED(IDC_BTN_PAUSE, OnBtnNum)
	ON_BN_CLICKED(IDC_BTN0, OnBtnNum)
	ON_BN_CLICKED(IDC_BTN_IP, OnBtnIp)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDialerView construction/destruction

CDialerView::CDialerView()
	: CFormView(CDialerView::IDD)
{
	//{{AFX_DATA_INIT(CDialerView)
	m_strCallCmd = _T("");
	//}}AFX_DATA_INIT
	// TODO: add construction code here

}

CDialerView::~CDialerView()
{
}

void CDialerView::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDialerView)
	DDX_Text(pDX, IDC_EDT_CALLCMD, m_strCallCmd);
	//}}AFX_DATA_MAP
}

BOOL CDialerView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CFormView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CDialerView diagnostics

#ifdef _DEBUG
void CDialerView::AssertValid() const
{
	CFormView::AssertValid();
}

void CDialerView::Dump(CDumpContext& dc) const
{
	CFormView::Dump(dc);
}

CDialerDoc* CDialerView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDialerDoc)));
	return (CDialerDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CDialerView message handlers

void CDialerView::OnSetfocusEdtCallcmd() 
{
//	HCURSOR hCursor = GetCursor();
//	SetCursor(hCursor);
	CEdit *edit = (CEdit*)(GetDlgItem(IDC_EDT_CALLCMD));
	edit->SetSel(m_iStart,m_iEnd,FALSE);
}

void CDialerView::OnChangeEdtCallcmd() 
{
	// TODO: If this is a RICHEDIT control, the control will not
	// send this notification unless you override the CFormView::OnInitDialog()
	// function and call CRichEditCtrl().SetEventMask()
	// with the ENM_CHANGE flag ORed into the mask.
	UpdateData(TRUE);
	if (m_strCallCmd.GetLength () != 0)//电话编辑框中有输入时,则显示切换成删除功能
	{
		GetDlgItem(IDC_BTN_PLUS)->SetWindowText(_T("C"));
	}
	else//否则切换成输入“+”字符
	{
		GetDlgItem(IDC_BTN_PLUS)->SetWindowText(_T("+"));
	}

}

void CDialerView::OnBtnPlus() 
{
	CString strTmp;
	GetDlgItem(IDC_BTN_PLUS)->GetWindowText(strTmp);
	if (strTmp == _T("C"))
	{
		m_strCallCmd = _T("");
	}
	else
	{
		m_strCallCmd = _T("+");
	}

	CEdit *edit = (CEdit*)(GetDlgItem(IDC_EDT_CALLCMD));
	edit->GetSel (m_iStart,m_iEnd);

	if(m_iStart == m_iEnd)
	{
		edit->SetSel (m_iStart++,m_iEnd++,FALSE);
	}
	else
	{
		m_iStart++;
		m_iEnd = m_iStart;
		edit->SetSel (m_iStart,m_iEnd,FALSE);		
	}

	UpdateData(FALSE);
	OnChangeEdtCallcmd();
	edit->SetFocus ();	
}

void CDialerView::OnBtnNum() 
{
	CString strInsert,strLeft,strRight;
	int iID = GetFocus()->GetDlgCtrlID ();
	switch(iID)
	{
	case IDC_BTN0:
		strInsert = "0";
		break;
	case IDC_BTN1:
		strInsert = "1";
		break;
	case IDC_BTN2:
		strInsert = "2";
		break;
	case IDC_BTN3:
		strInsert = "3";
		break;
	case IDC_BTN4:
		strInsert = "4";
		break;
	case IDC_BTN5:
		strInsert = "5";
		break;
	case IDC_BTN6:
		strInsert = "6";
		break;
	case IDC_BTN7:
		strInsert = "7";
		break;
	case IDC_BTN8:
		strInsert = "8";
		break;
	case IDC_BTN9:
		strInsert = "9";
		break;
	case IDC_BTN_STAR:
		strInsert = "*";
		break;
	case IDC_BTN_WELL:
		strInsert = "#";
		break;
	case IDC_BTN_WAIT:
		strInsert = "W";
		break;
	case IDC_BTN_PAUSE:
		strInsert = "P";
		break;
	}
	
	CEdit *edit = (CEdit*)(GetDlgItem(IDC_EDT_CALLCMD));
	edit->GetSel (m_iStart,m_iEnd);
	CPoint point;// = edit->GetCaretPos ();
	strLeft = m_strCallCmd.Left (m_iStart);
	strRight = m_strCallCmd.Right (m_strCallCmd.GetLength () - m_iEnd);
	m_strCallCmd = strLeft + strInsert + strRight;
	if(m_iStart == m_iEnd)
	{
		edit->SetSel (m_iStart++,m_iEnd++,FALSE);
	}
	else
	{
		m_iStart++;
		m_iEnd = m_iStart;
		edit->SetSel (m_iStart,m_iEnd,FALSE);
	}
	UpdateData(FALSE);
	OnChangeEdtCallcmd();
	edit->SetFocus ();	
}

void CDialerView::OnKillfocusEdtCallcmd() 
{
	CEdit *edit = (CEdit*)(GetDlgItem(IDC_EDT_CALLCMD));
	edit->GetSel(m_iStart,m_iEnd);
}

//调用快速拨号程序并与之通讯
void CDialerView::OnBtnQuickdial() 
{
	PROCESS_INFORMATION process;
	
	CWnd *pWnd = FindWindow(NULL,_T("QuickDial"));
	if (pWnd == NULL)//快速拨号程序没有运行,则调用程序。
	{
		CreateProcess(L"\\QuickDial.exe",NULL,NULL,
			NULL,NULL,0,NULL,NULL,NULL,&process);
	}
	else//否则向程序发送消息
	{	
		MessageBox(_T("向快速拨号程序发送消息"),NULL,MB_OK);
	}
}


/*
void CDialerView::OnClose() 
{
	// TODO: Add your message handler code here and/or call default
	MessageBox(_T("我收到了外部发来的消息WM_CLOSE"),NULL,MB_OK);
	CFormView::OnClose();
}
*/



void CDialerView::OnInitialUpdate() 
{
	CFormView::OnInitialUpdate();
	
	RECT rect;
	CEdit *edit = (CEdit*)(GetDlgItem(IDC_EDT_CALLCMD));
	edit->GetWindowRect (&rect);
	LOGFONT lf;
	static CFont font;
	memset(&lf,0,sizeof(lf));   
	lf.lfHeight = rect.bottom - rect.top ;  //改变字体高度,和矩形框一样高  
	font.CreateFontIndirect(&lf) ;
	

	edit->SetFont (&font,TRUE);
}

void CDialerView::OnBtnReturn() 
{
	CEdit *edit = (CEdit*)(GetDlgItem(IDC_EDT_CALLCMD));
	edit->GetSel (m_iStart,m_iEnd);
	
	if(m_iStart == m_iEnd)
	{
		m_strCallCmd.Delete (m_iStart-1,1);
		edit->SetSel (m_iStart--,m_iEnd--,FALSE);
	}
	else
	{
		m_strCallCmd.Delete (m_iStart,m_iEnd-m_iStart);
		m_iEnd = m_iStart;
		edit->SetSel (m_iStart,m_iEnd,FALSE);
	}
	UpdateData(FALSE);
	OnChangeEdtCallcmd();
	edit->SetFocus ();
}

void CDialerView::OnBtnIp() 
{
	CString strIp;
	UpdateData(TRUE);
	strIp = _T("17951");
	m_strCallCmd = strIp + m_strCallCmd;	

	typedef void (WINAPI * CALL)(CString);

	HINSTANCE hmod;
	hmod = ::LoadLibrary (_T("CALL.dll"));
	if(hmod==NULL)
	{
		AfxMessageBox(_T("Fail"));
	}
	CALL lpproc = (CALL)GetProcAddress (hmod,_T("CallOut"));
	if(lpproc!=(CALL)NULL)
		lpproc(m_strCallCmd);
	//	(*lpproc)();
	FreeLibrary(hmod);			
}

void CDialerView::OnBtnCallOut() 
{
	typedef void (WINAPI * TESTDLL)();
	
	
	HINSTANCE hmod;
	hmod = ::LoadLibrary (_T("CALL.dll"));
	if(hmod==NULL)
	{
		AfxMessageBox(_T("Fail"));
	}
	TESTDLL lpproc;
	lpproc = (TESTDLL)GetProcAddress (hmod,_T("CallOut"));
	if(lpproc!=(TESTDLL)NULL)
		(*lpproc)();
	FreeLibrary(hmod);	
}
/*
	m_strCallCmd = theApp.g_strCmdTel ;
	MessageBox(m_strCallCmd,NULL,MB_OK);
	UpdateData(FALSE);
*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -