以下是本人以前用 VC++ 做成功后总结的文档,我现在看也没感觉。
有兴趣可以研究一下:
下面以第一种回调函数的方式给出程序代码,但为了在窗口中能处理
事件状态的改变,本人自定义了一个消息WM_STATE_CHANGE。当回调函数
被通知状态改变时,给主窗口发送自定义消息。当然回调函数直接可以
对事件进行处理。本示例是基于对话框的应用程序,下面给出了"拔号"
按钮命令处理函数、回调函数及自定义消息处理函数。
#define WM_STATE_CHANGE WM_USER +101
ON_MESSAGE(WM_STATE_CHANGE,OnStateChange)
afx_msg LRESULT OnStateChange(WPARAM wParam,LPARAM lParam);
VOID WINAPI RasDialFunc(UINT unMsg,RASCONNSTATE
rasconnstate, DWORD dwError)
{
AfxGetMainWnd ()->PostMessage(WM_STATE_CHANGE
,(WPARAM)rasconnstate,(LPARAM)dwError);
}
void CProgDlg::OnButton3()
{
OnDis();//断开连接,其中应该有延时
RASDIALPARAMS lps;
HRASCONN lph ;
RASCONNSTATUS lpt;
memset (&lps,0,sizeof(RASDIALPARAMS));
memset (&lpt,0,sizeof(RASCONNSTATUS));
lps.dwSize=sizeof(RASDIALPARAMS);
strcpy(lps.szPhoneNumber,"990");
strcpy(lps.szUserName,"990");
strcpy(lps.szPassword,"990");
lpt.dwSize=sizeof(RASCONNSTATUS);
DWORD d=RasDial(NULL,NULL,&lps,
0,RasDialFunc,&lph);
if(d)
{
CString s;
RasGetConnectStatus(lph,&lpt);
s.Format ("Error Code=%d %d %s: %s,%d",d,lpt.dwError,
lpt.szDeviceType,lpt.szDeviceName,WM_RASDIALEVENT);
MessageBox(s);
}
}
LRESULT CProgDlg::OnStateChange(WPARAM wParam,LPARAM lParam)
{
CStatic *d=(CStatic *)GetDlgItem (IDC_STATIC1);
CString s;
char c[256];
c[0]=0;
RasGetErrorString ((UINT)lParam,c,255);
if (c[0]==0)strcpy(c,"正在拔号...");
s.Format ("State Code:%d/r/nMessage:%s",wParam,c);
d->SetWindowText (s);
return true;
}