DDX_Control(pDX, IDC_STATIC_CONNSTATE, m_labConnState);
IDC_STATIC_CONNSTATE 是某静态控件的ID,设置这个静态控件的控制变量m_labConnState,于是自动生成了上面的那句话
CLabelm_labConnState; 定义了这个控制变量为CLabel 类
然后就可以调用它的方法了:
#ifdef _CHS //注意这些代码都是写在OnInitDialog()初始化函数中的 实现中英文的切换
m_labConnState.SetText("发卡器未连接");
#else
m_labConnState.SetText("Card Issuer Not Connected");
#endif
在初始化函数中就实现了网络的连接,BOOL bOk = InitResource(); 这个函数据调用了UDP类的函数,打开了网路连接
stdafx.h文件中包含了一些必要的头文件(如afxwin.h)在初始化的时候PostMessage(WM_CLOSE); 在某种情况下发送一个关闭的消息
PostMessage是Windows API(应用程序接口) 中的一个常用函数,用于将一条消息放入到消息队列中。
函数功能该函数将一个消息放入(寄送)到与指定窗口创建的线程相联系消息队列里,不等待线程处理消息就返回,是异步消息模式。消息队列里的消息通过调用GetMessage和PeekMessage取得。
StartUdpServer 在初始化的时候就开了资源
定时器的用法
SetTimer(TIMER_LEDTIME,1000,NULL);
#define TIMER_AUTODETECH1000 //自动连接UDP的时间定时器的编号
#define TIMER_LEDTIME1001 //灯亮的时间定时器的编号
#define TIMER_SENDHTOWEB1002 //定时发送穿透数据到web 确保web能发送数据回来
1表示定时器的ID,1000表示没1000ms也就是1s调用一次处理函数,最后一个参数是处理的函数,如果填NULL表示,使用系统默认的,默认处理函数是OnTimer()那个函数,在这里面写你要执行的操作就可以了,如果你有多个定时器要在这里写if(id == 1)类似的东西去区分不同的定时器,更换贴图最好是在OnTimer里面更换当前显示的图片编号,然后刷新界面,更换图片的工作让OnPaint去做,让他们各司其职。关闭定时器:KillTimer(1)
定时器的处理函数:
OnTimer函数中这样写: void CMyClass::OnTimer(UINT nIDEvent) { switch(nIDEvent) //判断事件的类型
{ case ID_TIMER1: // id为1的计时器要做的事。 …… break; case ID_TIMER2: //id为2的计时器要做的事。 …… break; …… …… } }
void CCardIssuerDlg::OnTimer(UINT nIDEvent)
OnTimer函数直接写在对话类的CPP文件里面,没有被调用过,类似于单片机中的定时器中断函数,中断函数就是最高层了,是不受其他函数所调用的
通过了定时器的操作函数把数据添加到了链表中m_lsSendMsg.AddTail(stMsg);
然后再这个CUDP的发送线程里 CUdpServer::threadUdp(LPVOID lp) 轮询等待 while(pUdpServer->m_lsSendMsg.GetCount()),不断发送,直到数据发送完毕为止