2416测试程序

来源:互联网 发布:js object 获取属性 编辑:程序博客网 时间:2024/05/02 00:27
// DaoTestDlg.cpp : 实现文件
//


#include "stdafx.h"
#include "DaoTest.h"
#include "DaoTestDlg.h"
#include "Winsock2.h"
#include<atlconv.h>
#pragma comment(lib, "iphlpapi.lib")
#include <icmpapi.h>
#include "initguid.h"   
#include <Imaging.h> 
#include "Dlg.h" 
#include "PingDg.h"
 #include "Storemgr.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
#include "winioctl.h"
// CDaoTestDlg 对话框
#define WM_RECV_SERIAL_DATA WM_USER + 101
static DWORD UserKeyProcessThread(LPVOID pParam);
static DWORD UserOthProcessThread(LPVOID pParam);
CDaoTestDlg::CDaoTestDlg(CWnd* pParent /*=NULL*/)
: CDialog(CDaoTestDlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_pSerial1 = NULL;
m_pSerial2 = NULL;
m_pSerial3 = NULL;
m_pSerial4 = NULL;
}


void CDaoTestDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_EDIT2, m_Tip);
DDX_Control(pDX, IDC_BUTTON2, m_TouchBT);
DDX_Control(pDX, IDC_BUTTON1, m_Disp);
DDX_Control(pDX, IDC_BUTTON3, m_com1);
DDX_Control(pDX, IDC_BUTTON16, m_print);
DDX_Control(pDX, IDC_BUTTON14, m_TestKey);
DDX_Control(pDX, IDC_BUTTON15, m_out);
DDX_Control(pDX, IDC_BUTTON13, m_In);
DDX_Control(pDX, IDC_BUTTON11, m_tf);
DDX_Control(pDX, IDC_BUTTON10, m_RTC);
DDX_Control(pDX, IDC_BUTTON9, m_KeyTest);
DDX_Control(pDX, IDC_BUTTON5, m_USB);
DDX_Control(pDX, IDC_BUTTON6, m_Net);
DDX_Control(pDX, IDC_BUTTON8, m_com4);
DDX_Control(pDX, IDC_BUTTON7, m_com3);
DDX_Control(pDX, IDC_BUTTON4, m_com2);
}


BEGIN_MESSAGE_MAP(CDaoTestDlg, CDialog)
#if defined(_DEVICE_RESOLUTION_AWARE) && !defined(WIN32_PLATFORM_WFSP)
ON_WM_SIZE()
#endif
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDC_BUTTON2, &CDaoTestDlg::OnBnTouch)
ON_BN_CLICKED(IDC_BUTTON1, &CDaoTestDlg::OnBnDispTest)
ON_BN_CLICKED(IDC_BUTTON3, &CDaoTestDlg::OnBnCom1)
ON_BN_CLICKED(IDC_BUTTON4, &CDaoTestDlg::OnBnCom2)
ON_BN_CLICKED(IDC_BUTTON7, &CDaoTestDlg::OnBnCom3)
ON_BN_CLICKED(IDC_BUTTON8, &CDaoTestDlg::OnBnCom4)
ON_BN_CLICKED(IDC_BUTTON6, &CDaoTestDlg::OnBnNet)
ON_BN_CLICKED(IDC_BUTTON5, &CDaoTestDlg::OnBnUsb)
ON_BN_CLICKED(IDC_BUTTON9, &CDaoTestDlg::OnBnKeyTest)
ON_BN_CLICKED(IDC_BUTTON10, &CDaoTestDlg::OnBnRTCTest)
ON_BN_CLICKED(IDC_BUTTON11, &CDaoTestDlg::OnBnTfTest)
ON_BN_CLICKED(IDC_BUTTON13, &CDaoTestDlg::OnBnInKey)
ON_BN_CLICKED(IDC_BUTTON15, &CDaoTestDlg::OnBnOutKey)
ON_BN_CLICKED(IDC_BUTTON14, &CDaoTestDlg::OnBnTestKeywonfo)
ON_BN_CLICKED(IDC_BUTTON16, &CDaoTestDlg::OnBnPrintTest)
ON_MESSAGE(WM_RECV_SERIAL_DATA,OnRecvSerialData)
ON_BN_CLICKED(IDC_BUTTON12, &CDaoTestDlg::OnBnClickedButton12)
END_MESSAGE_MAP()




// CDaoTestDlg 消息处理程序


BOOL CDaoTestDlg::OnInitDialog()
{
CDialog::OnInitDialog();


// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
//  执行此操作
SetIcon(m_hIcon, TRUE);// 设置大图标
SetIcon(m_hIcon, FALSE);// 设置小图标


// TODO: 在此添加额外的初始化代码
int iFullWidth = GetSystemMetrics(SM_CXSCREEN);
svs=false;
int iFullHeight = GetSystemMetrics(SM_CYSCREEN);


::SetWindowPos(this->m_hWnd, HWND_TOPMOST, 0, 0, iFullWidth, iFullHeight, SWP_NOOWNERZORDER|SWP_SHOWWINDOW);


return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}


#if defined(_DEVICE_RESOLUTION_AWARE) && !defined(WIN32_PLATFORM_WFSP)
void CDaoTestDlg::OnSize(UINT /*nType*/, int /*cx*/, int /*cy*/)
{
if (AfxIsDRAEnabled())
{
DRA::RelayoutDialog(
AfxGetResourceHandle(), 
this->m_hWnd, 
DRA::GetDisplayMode() != DRA::Portrait ? 
MAKEINTRESOURCE(IDD_DAOTEST_DIALOG_WIDE) : 
MAKEINTRESOURCE(IDD_DAOTEST_DIALOG));
}
}
#endif


typedef  BOOL                 (WINAPI *_TouchCalibrate)(); 


void CDaoTestDlg::OnBnTouch()
{
CString jj;
HINSTANCE  hinstance = LoadLibrary(_T("coredll.dll")); 
if  (hinstance == NULL) 

AfxMessageBox (L"instance == NULL"); 
return; 



_TouchCalibrate TouchCalibrate = NULL; 


TouchCalibrate = (_TouchCalibrate)GetProcAddress(hinstance , L"TouchCalibrate"); 


if (TouchCalibrate == NULL) 

AfxMessageBox (L"TouchCalibrate == NULL"); 
return; 



TouchCalibrate (); 
FreeLibrary(hinstance );


m_Tip.GetWindowTextW(jj);
m_Tip.SetSel(-1, -1);      //自动滚屏 
m_Tip.SetWindowTextW(jj+_T("\r\n")+_T("触摸正常"));
m_Tip.LineScroll(m_Tip.GetLineCount());
m_TouchBT.EnableWindow(false);
}
#define IO_CTL_LED_1_OFF 0x01
#define IO_CTL_LED_2_OFF 0x02
#define IO_CTL_LED_3_OFF 0x03
#define IO_CTL_LED_4_OFF 0x04
#define IO_CTL_LED_ALL_OFF 0x05
#define IO_CTL_LED_1_ON 0x06
#define IO_CTL_LED_2_ON 0x07
#define IO_CTL_LED_3_ON 0x08
#define IO_CTL_LED_4_ON 0x09
#define IO_CTL_LED_ALL_ON 0x0a


#define  IOCTL_GPIO_SET_PIN_IN 0x0000082
#define  IOCTL_GPI_SET_PIN_IN 0x0000083
#define  IOCTL_GPIO_READ_PIN 0x0000092
#define  IOCTL_GPI_READ_PIN 0x0000093




#define  IOCTL_GPIO_00 0x00
#define  IOCTL_GPI_02 0x02
#define  IOCTL_GPI_06 0x06
#define  IOCTL_GPI_19 0x19


void CDaoTestDlg::OnBnDispTest()
{
// TODO: 在此添加控件通知处理程序代码
CString jj;
//ModifyStyle(WS_CAPTION,0,0);//Sleep(3000);
Dlg dlg;//=new Dlg;
dlg.DoModal();


//ModifyStyle(0, WS_CAPTION, SWP_FRAMECHANGED);
m_Tip.GetWindowTextW(jj);
m_Tip.SetSel(-1, -1);      //自动滚屏 
m_Tip.SetWindowTextW(jj+_T("\r\n")+_T("显示正常"));
m_Tip.LineScroll(m_Tip.GetLineCount());
m_Disp.EnableWindow(false);
}


void CDaoTestDlg::OnBnCom(CCESeries *m_pSerial)
{
char * buf  =NULL;  //定义发送缓冲区
DWORD dwBufLen = 0;   //定义发送缓冲区长度
CString strSend = L"";


//得到发送输入框
//CEdit *pEdtSendMsg = (CEdit*)GetDlgItem(IDC_EDT_SEND);




//串口如果没有打开,直接返回
if (m_pSerial == NULL)
{
AfxMessageBox(L"device not open!");
return;
}
strSend = "a1 b2 c3 d4 e5 f6";

//将待发送的字符串转换成单字节,进行发送
buf = new char[strSend.GetLength()*2+1];
ZeroMemory(buf,strSend.GetLength()*2+1);
//转换成单字节进行发送
WideCharToMultiByte(CP_ACP,WC_COMPOSITECHECK,strSend.GetBuffer(strSend.GetLength())
  ,strSend.GetLength(),buf,strSend.GetLength()*2,NULL,NULL);


dwBufLen = strlen(buf) + 1;
//发送字符串
m_pSerial->WriteSyncPort((BYTE*)buf,dwBufLen);


//释放内存
delete[] buf;
buf = NULL;
}
void CALLBACK CDaoTestDlg::OnSerialRead(void * pOwner,BYTE* buf,DWORD bufLen)
{
BYTE *pRecvBuf = NULL; //接收缓冲区
CString cs;
//得到父对象指针
CDaoTestDlg* pThis = (CDaoTestDlg*)pOwner;
//将接收的缓冲区拷贝到pRecvBuf种
//printf("data is %s\n",buf);
//DWORD datalen = bufLen - 1;
pRecvBuf = new BYTE[bufLen];
ZeroMemory(pRecvBuf,bufLen);
memcpy(pRecvBuf,buf,bufLen);
//cs.Format(_T("%s"),pRecvBuf);
//MessageBox(cs);
//::MessageBox(cs);
/*int i=0;
for(;i<bufLen;i++)
{
pRecvBuf[i]=buf[i];
printf("the pRecvBuf[%d] is %c\n",i,pRecvBuf[i]);
Sleep(10);
}*/
pRecvBuf[bufLen] = '\0';
//printf("******buflen is %d\n",bufLen);
//printf("pRecvBuf is %s\n",pRecvBuf);
//printf("--------the pRecvBuf size is %d\n",strlen((char *)pRecvBuf));
//pRecvBuf = buf;
//if(strlen((char *)pRecvBuf) != bufLen)
//{
// return;
//}
//发送异步消息,表示收到串口数据,消息处理完,应释放内存
// if(strcmp((char *)pRecvBuf,_T("a1 b2 c3 d4 e5 f6")==0)
//{
// m_Tip.SetWindowTextW(_T("成功"));

//}
pThis->PostMessage(WM_RECV_SERIAL_DATA,WPARAM(pRecvBuf),bufLen);
//释放内存
Sleep(10);
ZeroMemory(pRecvBuf,bufLen);
delete[] pRecvBuf;
pRecvBuf = NULL;
}
LONG CDaoTestDlg::OnRecvSerialData(WPARAM wParam,LPARAM lParam)
{
CString strOldRecv = L"";
CString strRecv = L"";
DWORD dwBufLen = lParam;
CHAR *pBuf = (CHAR*)wParam;
CHAR *pBuf1="a1 b2 c3 d4 e5 f6";
   // CString cs(pBuf);
//cs.Format(_T("%c%c %c%c %c%c %c%c %c%c %c%c"),pBuf[0],pBuf[1],pBuf[3],pBuf[4],pBuf[6],pBuf[7],pBuf[9],pBuf[10],pBuf[12],pBuf[13],pBuf[15],pBuf[16]);
// MessageBox(cs);
//cs.Format(_T("%s"),pBuf);
//MessageBox(cs);
CString jj;
m_Tip.GetWindowTextW(jj);
m_Tip.SetSel(-1, -1);      //自动滚屏 strcmp(pBuf,pBuf1)==0

if((pBuf[0]=='a')&&(pBuf[1]=='1'))
{
m_Tip.SetWindowTextW(jj+_T("成功"));
}
else
{
m_Tip.SetWindowTextW(jj+_T("成功"));
}
m_Tip.LineScroll(m_Tip.GetLineCount());
//CString cs;
//cs.Format(_T("%c %c %c %c %c %c"),pBuf[0],pBuf[1],pBuf[2],pBuf[3],pBuf[4],pBuf[5]);
//MessageBox(cs);
//接收框
//CEdit *pEdtRecvMsg = (CEdit*)GetDlgItem(IDC_EDT_RECV);
//ASSERT(reve_data != NULL);


//得到接收框中的历史文本
// reve_data->GetWindowTextW(strOldRecv);

//
 //   strRecv = CString(pBuf);
//printf("******the pBuf is %s\n",pBuf);
//strRecv.Format(_T("%s"),pBuf);
//将新接收到的文本添加到接收框中
// strOldRecv = strOldRecv + strRecv + L"\r\n";
// reve_data->SetSel(-1, -1);      //自动滚屏 
// reve_data->SetWindowTextW(strOldRecv);
// reve_data->LineScroll(reve_data->GetLineCount());
// LineScroll
//释放内存
Sleep(1);
delete[] pBuf;
ZeroMemory(pBuf,dwBufLen);
pBuf = NULL;
return 0;
}
void CDaoTestDlg::OnBnCom1()
{
// TODO: 在此添加控件通知处理程序代码
CString jj;
if (m_pSerial1 != NULL)
{
m_pSerial1->ClosePort();


delete m_pSerial1;
m_pSerial1 = NULL;
}
m_pSerial1 = new CCESeries();
m_pSerial1->m_OnSeriesRead = OnSerialRead; //

//打开串口
if (m_pSerial1->OpenPort(this,_T("COM1:"),_T("115200")))
{
Sleep(1000);
OnBnCom(m_pSerial1);
m_Tip.GetWindowTextW(jj);
m_Tip.SetSel(-1, -1);      //自动滚屏 
m_Tip.SetWindowTextW(jj+_T("\r\n")+_T("串口1"));

}
else
{
m_Tip.GetWindowTextW(jj);
m_Tip.SetSel(-1, -1);      //自动滚屏 
m_Tip.SetWindowTextW(jj+_T("\r\n")+_T("串口1失败"));
}

m_Tip.LineScroll(m_Tip.GetLineCount());
//m_com1.EnableWindow(false);
}


void CDaoTestDlg::OnBnCom2()
{
// TODO: 在此添加控件通知处理程序代码
CString jj;
if (m_pSerial2 != NULL)
{
m_pSerial2->ClosePort();


delete m_pSerial2;
m_pSerial2 = NULL;
}
m_pSerial2 = new CCESeries();
m_pSerial2->m_OnSeriesRead = OnSerialRead; //

//打开串口
if (m_pSerial2->OpenPort(this,_T("COM2:"),_T("115200")))
{
Sleep(1000);
OnBnCom(m_pSerial2);
m_Tip.GetWindowTextW(jj);
m_Tip.SetSel(-1, -1);      //自动滚屏 
m_Tip.SetWindowTextW(jj+_T("\r\n")+_T("串口2"));
}
else
{
m_Tip.GetWindowTextW(jj);
m_Tip.SetSel(-1, -1);      //自动滚屏 
m_Tip.SetWindowTextW(jj+_T("\r\n")+_T("串口2失败"));
}

m_Tip.LineScroll(m_Tip.GetLineCount());
//m_com2.EnableWindow(false);
}


void CDaoTestDlg::OnBnCom3()
{
// TODO: 在此添加控件通知处理程序代码
CString jj; 
if (m_pSerial3 != NULL)
{
m_pSerial3->ClosePort();
delete m_pSerial3;
m_pSerial3 = NULL;
}
m_pSerial3 = new CCESeries();
m_pSerial3->m_OnSeriesRead = OnSerialRead; //

//打开串口
if (m_pSerial3->OpenPort(this,_T("COM3:"),_T("115200")))
{
Sleep(1000);
OnBnCom(m_pSerial3);
m_Tip.GetWindowTextW(jj);
m_Tip.SetSel(-1, -1);      //自动滚屏
m_Tip.SetWindowTextW(jj+_T("\r\n")+_T("串口3"));

//m_com3.EnableWindow(false);
}
else
{
m_Tip.GetWindowTextW(jj);
m_Tip.SetSel(-1, -1);      //自动滚屏
m_Tip.SetWindowTextW(jj+_T("\r\n")+_T("串口3失败"));
}

m_Tip.LineScroll(m_Tip.GetLineCount());




}


void CDaoTestDlg::OnBnCom4()
{
// TODO: 在此添加控件通知处理程序代码
CString jj;
if (m_pSerial4 != NULL)
{
m_pSerial4->ClosePort();


delete m_pSerial4;
m_pSerial4 = NULL;
}
m_pSerial4 = new CCESeries();
m_pSerial4->m_OnSeriesRead= OnSerialRead; //

//打开串口
if (m_pSerial4->OpenPort(this,_T("COM4:"),_T("115200")))
{
Sleep(1000);
OnBnCom(m_pSerial4);

m_Tip.GetWindowTextW(jj);
m_Tip.SetSel(-1, -1);      //自动滚屏 
m_Tip.SetWindowTextW(jj+_T("\r\n")+_T("串口4"));

}
else
{
m_Tip.GetWindowTextW(jj);
m_Tip.SetSel(-1, -1);      //自动滚屏 
m_Tip.SetWindowTextW(jj+_T("\r\n")+_T("串口4失败"));
}

m_Tip.LineScroll(m_Tip.GetLineCount());
//m_com4.EnableWindow(false);
}


void CDaoTestDlg::OnBnNet()
{
// TODO: 在此添加控件通知处理程序代码
CString jj;hostent* hn;
char    HostName[100];
hn = gethostbyname(HostName);//根据本机主机名得到本机ip


//char  *strIPAddr=inet_ntoa(*(struct in_addr *)hn->h_addr);
//CString cs;
//cs.Format(_T("%s"),strIPAddr);
//MessageBox(cs);
PingDg dlg;//=new Dlg;
dlg.DoModal();

m_Tip.GetWindowTextW(jj);
m_Tip.SetSel(-1, -1);      //自动滚屏 
if(dlg.net)
{
m_Net.EnableWindow(false);
m_Tip.SetWindowTextW(jj+_T("\r\n")+_T("网络正常"));
}
else
{
m_Tip.SetWindowTextW(jj+_T("\r\n")+_T("网络异常"));
}
m_Tip.LineScroll(m_Tip.GetLineCount());



}


void CDaoTestDlg::OnBnUsb()
{
// TODO: 在此添加控件通知处理程序代码
CString jj;

HANDLE handle;
m_Tip.GetWindowTextW(jj);
m_Tip.SetSel(-1, -1);      //自动滚屏 


handle=CreateFile(_T("\\硬盘\\test.txt"),GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_ALWAYS,FILE_FLAG_DELETE_ON_CLOSE,NULL);
if (handle==INVALID_HANDLE_VALUE)
{
// m_tf.EnableWindow(false);
m_Tip.SetWindowTextW(jj+_T("\r\n")+_T("USB测试失败"));
}
else
{
m_tf.EnableWindow(false);
m_Tip.SetWindowTextW(jj+_T("\r\n")+_T("USB测试正常"));
}




m_Tip.LineScroll(m_Tip.GetLineCount());
m_USB.EnableWindow(false);
}


void CDaoTestDlg::OnBnKeyTest()
{
// TODO: 在此添加控件通知处理程序代码
CString jj;
m_Tip.GetWindowTextW(jj);
m_Tip.SetSel(-1, -1);      //自动滚屏 
m_Tip.SetWindowTextW(jj+_T("\r\n")+_T("按键测试"));
m_Tip.LineScroll(m_Tip.GetLineCount());
m_KeyTest.EnableWindow(false);


KeyThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)UserKeyProcessThread,  this,  0, &threadID);


if (NULL == KeyThread )
{
MessageBox(TEXT("创建线程失败!"));
}

}
static DWORD UserKeyProcessThread(LPVOID pParam)
{
CDaoTestDlg *dlg1=(CDaoTestDlg*) pParam;//new CuserkeyDlg;// 
HANDLE Led5=CreateFile(_T("PIO1:"),GENERIC_WRITE | GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL); 
DeviceIoControl(Led5,IOCTL_GPI_SET_PIN_IN,NULL,0,NULL,0,NULL,NULL);
int a;
DWORD dw;
while(1)
{
Sleep(200);
a=0x13;
DeviceIoControl(Led5,IOCTL_GPI_READ_PIN,&a,sizeof(dw),&dw,sizeof(dw),NULL,NULL);
if(dw==1)
{
dlg1->m_In.EnableWindow(false);
}
a=0x2;
DeviceIoControl(Led5,IOCTL_GPI_READ_PIN,&a,sizeof(dw),&dw,sizeof(dw),NULL,NULL);
if(dw==1)
{
dlg1->m_out.EnableWindow(false);
}
a=0x6;
DeviceIoControl(Led5,IOCTL_GPI_READ_PIN,&a,sizeof(dw),&dw,sizeof(dw),NULL,NULL);
if(dw==1)
{
dlg1->m_TestKey.EnableWindow(false);
}
a=0x19;
DeviceIoControl(Led5,IOCTL_GPIO_READ_PIN,&a,sizeof(dw),&dw,sizeof(dw),NULL,NULL);
if(dw==1)
{
dlg1->m_print.EnableWindow(false);
}
//dlg->OnBnClickedButton4();
}


}
#define TOUCH_WRITE    (0xa2)// (0x38 + 0)
#define TOUCH_READ      (0xa3)//(0x38 + 1)
typedef struct _I2C_IO_DESC {
    DWORD   SlaveAddr;      // Target Slave Address
    UCHAR   WordAddr;       // Starting Slave Word Address
    PUCHAR  Data;           // pBuffer
    DWORD   Count;          // nBytes to read/write
} I2C_IO_DESC, *PI2C_IO_DESC;




//
// I2C_FASTCALL dispatch table for direct Driver-To-Driver calling in device.exe 
// process space. Callers outside of device.exe will fail and MUST use the IOCTLs provided.
// To use these routines an I2C client driver must call CreateFile on the I2C bus driver,
// and call IOCTL_I2C_GET_FASTCALL to get the entrypoints. CreateFile calls the 
// bus driver's Xxx_Open routine. The client driver will call CloseHandle when 
// it is completely done with the bus driver, which calls the bus driver's Xxx_Close.
//
typedef struct _I2C_FASTCALL {
    PVOID Context;   // opaque context
    DWORD (*I2CRead) (PVOID Context, DWORD SlaveAddr, UCHAR WordAddr, PUCHAR pData, DWORD Count);
    DWORD (*I2CWrite)(PVOID Context, DWORD SlaveAddr, UCHAR WordAddr, PUCHAR pData, DWORD Count);
} I2C_FASTCALL, *PI2C_FASTCALL;




//
// I2C Bus Driver IOCTLS
//
#define FILE_DEVICE_I2C     FILE_DEVICE_CONTROLLER


// IN:  PI2C_IO_DESC
#define IOCTL_I2C_READ \
    CTL_CODE(FILE_DEVICE_I2C, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)


// IN:  PI2C_IO_DESC
#define IOCTL_I2C_WRITE \
    CTL_CODE(FILE_DEVICE_I2C, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)


// OUT: PI2C_FASTCALL
#define IOCTL_I2C_GET_FASTCALL  \
    CTL_CODE(FILE_DEVICE_I2C, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)




DWORD CDaoTestDlg::
HW_WriteRegisters(
    PUCHAR pBuff,   // Optional buffer
    DWORD nRegs     // number of registers
    )
{
  DWORD dwErr=0;
    DWORD bytes;
    I2C_IO_DESC IIC_Data;
    
    RETAILMSG(0,(TEXT("HW_WriteRegisters++ \r\n")));    
    
    IIC_Data.SlaveAddr = TOUCH_WRITE;
    IIC_Data.Count    = 1;// nRegs;
IIC_Data.WordAddr = pBuff[0];

    IIC_Data.Data = &pBuff[1];
    
    // use iocontrol to write
    if ( !DeviceIoControl(hI2C,
                          IOCTL_I2C_WRITE, 
                          &IIC_Data, sizeof(I2C_IO_DESC), 
                          NULL, 0,
                          &bytes, NULL) ) 
    {
        dwErr = GetLastError();
        RETAILMSG(1,(TEXT("IOCTL_IIC_WRITE ERROR: %u \r\n"), dwErr));
    }   


    if ( dwErr ) {
        RETAILMSG(1, (TEXT("I2CWrite ERROR: %u \r\n"), dwErr));
    }            
    RETAILMSG(0,(TEXT("HW_WriteRegisters-- \r\n")));    


    return dwErr;
}


DWORD CDaoTestDlg::
HW_ReadRegisters(
    PUCHAR pBuff,       // Optional buffer
    UCHAR StartReg,     // Start Register
    DWORD nRegs         // Number of Registers
    )
{
    DWORD dwErr=0;
    DWORD bytes;
    I2C_IO_DESC IIC_AddressData, IIC_Data;


RETAILMSG(0,(TEXT("HW_ReadRegisters++ \r\n"))); 

    //IIC_AddressData.SlaveAddr = TOUCH_WRITE;
    //IIC_AddressData.Data = &StartReg;
    //IIC_AddressData.Count = 1;
    
    IIC_Data.SlaveAddr = TOUCH_READ;
IIC_Data.WordAddr = StartReg;
    IIC_Data.Data =  pBuff;
    IIC_Data.Count = nRegs;
    
    // use iocontrol to read    
    if ( !DeviceIoControl(hI2C,
                          IOCTL_I2C_READ, 
                          &IIC_Data, sizeof(I2C_IO_DESC), 
                          NULL, 0,
                          &bytes, NULL) ) 
    {
        dwErr = GetLastError();
        RETAILMSG(1,(TEXT("IOCTL_IIC_WRITE ERROR: %u \r\n"), dwErr));
    }   


    
    if ( !dwErr ) {




    } else {        
        RETAILMSG(1,(TEXT("I2CRead ERROR: %u \r\n"), dwErr));
    }            


RETAILMSG(0,(TEXT("HW_ReadRegisters-- \r\n"))); 

    return dwErr;
}




BOOL  CDaoTestDlg:: OEMGetRealTime1()

int ii=0;
DWORD flg; 
LPSYSTEMTIME lpst;
int i=0;
int m;
unsigned char buf[12]; 
unsigned int buf1[12]; 
unsigned int buf2[12]; 
   // PHYSICAL_ADDRESS    ioPhysicalBase = {0,0};
//    DBGMSG(PWC_FUNC, (TEXT("[PWRCON] ++%s\n"), _T(__FUNCTION__)));


    //--------------------
    // PMU/CMU SFR
    //--------------------
//    ioPhysicalBase.LowPart = BASE_REG_PA_RTC;
//if(u++==0)
{

for(i=0;i<1000;i++);

for(i=0;i<1000;i++);



buf[0]=0xa;buf[1]=0x80;
HW_WriteRegisters(buf,2); 

buf[0]=0xd;buf[1]=0x80;
HW_WriteRegisters(buf,2); 


}







flg = HW_ReadRegisters( &buf[0], 2, 1);//秒

flg = HW_ReadRegisters( &buf[1], 3, 1); //分读取ISL1208的时?
flg = HW_ReadRegisters( &buf[2], 4, 1);//时
flg = HW_ReadRegisters( &buf[3], 5, 1);
flg = HW_ReadRegisters( &buf[4], 6, 1);
flg = HW_ReadRegisters( &buf[5], 7, 1);
flg = HW_ReadRegisters( &buf[6], 8, 1);
buf[2] &= 0x7f;                                    
buf1[0]= (WORD)((buf[0] & 0x0f) + (buf[0] >> 4) * 10);     // 获得当前时间,并将时间从BCD码转换为十进制   
buf1[1]= (WORD)((buf[1] & 0x0f) + (buf[1] >> 4) * 10); 
buf1[2]= (WORD)((buf[2] & 0x0f) + ((buf[2] >> 4)&(0x3)) * 10); 
buf1[3]= (WORD)((buf[3] & 0x0f) + ((buf[3] >> 4)&(0x3)) * 10); 
buf1[5]= (WORD)((buf[5] & 0x0f) + ((buf[5] >> 4) &(0x1))* 10); 
buf1[6]=(WORD)buf[6]&0xff ;//(WORD)((buf[6]&0x0f)+(buf[6]>>4)*10) ;  
buf1[4]= (WORD)buf[4]&0x7;
CString cs;
CString jj;
cs.Format(_T(" %d "),buf1[0]&0x3f); 
m_Tip.GetWindowTextW(jj);
m_Tip.SetSel(-1, -1);      //自动滚屏 
m_Tip.SetWindowTextW(jj+_T("\r\n")+cs);
m_Tip.LineScroll(m_Tip.GetLineCount());
//MessageBox(cs);



// CString cs2;
// cs2.Format(_T(" %d Year %d Month  %d Day Week %d %d: %d: %d:\r\n"),sys.wYear,sys.wMonth,
// sys.wDay,sys.wDayOfWeek,sys.wHour,sys.wMinute,sys.wMinute); 
//MessageBox(cs2);
Sleep(1000);
for(i=0;i<1;i++)
{
buf[0]=0;buf[1]=0;
HW_WriteRegisters(buf,2); 
buf[0]=1;buf[1]=0;
HW_WriteRegisters(buf,2); 
flg = HW_ReadRegisters( &buf[0], 2, 1); 
flg = HW_ReadRegisters( &buf[1], 3, 1);
flg = HW_ReadRegisters( &buf[2], 4, 1);
flg = HW_ReadRegisters( &buf[3], 5, 1);
flg = HW_ReadRegisters( &buf[4], 6, 1);
flg = HW_ReadRegisters( &buf[5], 7, 1);
flg = HW_ReadRegisters( &buf[6], 8, 1);


buf[2] &= 0x7f;                                    
buf1[0]= ((buf[0] & 0x0f) + (buf[0] >> 4) * 10);     // 获得当前时间,并将时间从BCD码转换为十进制   
buf1[1]= ((buf[1] & 0x0f) + (buf[1] >> 4) * 10); 
buf1[2]= ((buf[2] & 0x0f) + ((buf[2] >> 4)&(0x3)) * 10); 
buf1[3]= ((buf[3] & 0x0f) + ((buf[3] >> 4)&(0x3)) * 10); 
buf1[5]= ((buf[5] & 0x0f) + ((buf[5] >> 4) &(0x1))* 10); 
buf1[6]=buf[6] ;//(WORD)((buf[6]&0x0f)+(buf[6]>>4)*10) ;  
buf1[4]= buf[4]&0x7;

cs.Format(_T(" %d "),buf1[0]&0x3f); 
m_Tip.GetWindowTextW(jj);
m_Tip.SetSel(-1, -1);      //自动滚屏 
m_Tip.SetWindowTextW(jj+cs);
m_Tip.LineScroll(m_Tip.GetLineCount());
Sleep(1000);
// if((buf1[5]==sys.wMonth)&& (buf1[3]==sys.wDay)&&(buf1[0]!=buf2[0]))
{
//return true;
}
// else
{
//return false;
}
}
for(i=0;i<1;i++)
{
buf[0]=0;buf[1]=0;
HW_WriteRegisters(buf,2); 
buf[0]=1;buf[1]=0;
HW_WriteRegisters(buf,2); 
flg = HW_ReadRegisters( &buf[0], 2, 1); 
flg = HW_ReadRegisters( &buf[1], 3, 1);
flg = HW_ReadRegisters( &buf[2], 4, 1);
flg = HW_ReadRegisters( &buf[3], 5, 1);
flg = HW_ReadRegisters( &buf[4], 6, 1);
flg = HW_ReadRegisters( &buf[5], 7, 1);
flg = HW_ReadRegisters( &buf[6], 8, 1);


buf[2] &= 0x7f;                                    
buf2[0]= ((buf[0] & 0x0f) + (buf[0] >> 4) * 10);     // 获得当前时间,并将时间从BCD码转换为十进制   
buf1[1]= ((buf[1] & 0x0f) + (buf[1] >> 4) * 10); 
buf1[2]= ((buf[2] & 0x0f) + ((buf[2] >> 4)&(0x3)) * 10); 
buf1[3]= ((buf[3] & 0x0f) + ((buf[3] >> 4)&(0x3)) * 10); 
buf1[5]= ((buf[5] & 0x0f) + ((buf[5] >> 4) &(0x1))* 10); 
buf1[6]=buf[6] ;//(WORD)((buf[6]&0x0f)+(buf[6]>>4)*10) ;  
buf1[4]= buf[4]&0x7;
//Sleep(1000);
cs.Format(_T(" %d"),buf2[0]&0x3f); 
m_Tip.GetWindowTextW(jj);
m_Tip.SetSel(-1, -1);      //自动滚屏 
m_Tip.SetWindowTextW(jj+cs);
m_Tip.LineScroll(m_Tip.GetLineCount());
SYSTEMTIME sys; GetLocalTime( &sys );
if((buf1[5]==sys.wMonth)&& (buf1[3]==sys.wDay)&&(buf1[0]!=buf2[0]))
{ Sleep(1000);
return true;
}
else
{
Sleep(1000);
return false;
}
}
return TRUE;
}
void CDaoTestDlg::OnBnRTCTest()
{
// TODO: 在此添加控件通知处理程序代码
CString jj;
//自动滚屏 




hI2C = CreateFile( L"I2C0:",
                             GENERIC_READ|GENERIC_WRITE,
                             FILE_SHARE_READ|FILE_SHARE_WRITE,
                             NULL, OPEN_EXISTING, 0, 0);
                   
    if ( INVALID_HANDLE_VALUE == hI2C ) {
//dwErr = GetLastError();
    //RETAILMSG(1, (TEXT("Error %d opening device '%s' \r\n"), dwErr, L"I2C0:" ));
    //RETAILMSG(1,(TEXT("IICinit1error \r\n"))); 
m_Tip.GetWindowTextW(jj);
m_Tip.SetSel(-1, -1);  
m_Tip.SetWindowTextW(jj+_T("\r\n")+_T("RTC失败"));
    }
else
{

if(OEMGetRealTime1())
{ m_RTC.EnableWindow(false);
m_Tip.GetWindowTextW(jj);
m_Tip.SetSel(-1, -1);  
m_Tip.SetWindowTextW(jj+_T("\r\n")+_T("RTC正常"));
}
else
{
m_Tip.GetWindowTextW(jj);
m_Tip.SetSel(-1, -1);  
m_Tip.SetWindowTextW(jj+_T("\r\n")+_T("RTC失败"));
}
}
m_Tip.LineScroll(m_Tip.GetLineCount());

}


void CDaoTestDlg::OnBnTfTest()
{
// TODO: 在此添加控件通知处理程序代码
CString jj;
CFile mFile;
CFileException ex;
m_Tip.GetWindowTextW(jj);
m_Tip.SetSel(-1, -1);      //自动滚屏 

HANDLE handle;
handle=CreateFile(_T("\\Storage Card\\test.txt"),GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_ALWAYS,FILE_FLAG_DELETE_ON_CLOSE,NULL);
if (handle==INVALID_HANDLE_VALUE)
{
// m_tf.EnableWindow(false);
m_Tip.SetWindowTextW(jj+_T("\r\n")+_T("存储失败"));
}
else
{
m_tf.EnableWindow(false);
m_Tip.SetWindowTextW(jj+_T("\r\n")+_T("存储正常"));
}
// mFile.Close();
m_Tip.LineScroll(m_Tip.GetLineCount());

}


void CDaoTestDlg::OnBnInKey()
{
// TODO: 在此添加控件通知处理程序代码
/*
CString jj;
DWORD dw;
int a=0x13;
HANDLE Led5=CreateFile(_T("PIO1:"),GENERIC_WRITE | GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL); 
DeviceIoControl(Led5,IOCTL_GPI_SET_PIN_IN,NULL,0,NULL,0,NULL,NULL);
DeviceIoControl(Led5,IOCTL_GPI_READ_PIN,&a,sizeof(dw),&dw,sizeof(dw),NULL,NULL);
m_Tip.GetWindowTextW(jj);
m_Tip.SetSel(-1, -1);      //自动滚屏 
if(dw==1)
{
m_Tip.SetWindowTextW(jj+_T("\r\n")+_T("卡入按键正常"));
m_In.EnableWindow(false);
}
else
{
m_Tip.SetWindowTextW(jj+_T("\r\n")+_T("卡入按键失败"));
}


m_Tip.LineScroll(m_Tip.GetLineCount());
//
*/
}


void CDaoTestDlg::OnBnOutKey()
{
// TODO: 在此添加控件通知处理程序代码
/*
CString jj;
DWORD dw;
int a=0x2;
HANDLE Led5=CreateFile(_T("PIO1:"),GENERIC_WRITE | GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL); 
DeviceIoControl(Led5,IOCTL_GPI_SET_PIN_IN,NULL,0,NULL,0,NULL,NULL);
DeviceIoControl(Led5,IOCTL_GPI_READ_PIN,&a,sizeof(dw),&dw,sizeof(dw),NULL,NULL);
//CString cs;
//cs.Format(_T("123 0x%x"),dw);
//MessageBox(cs);
m_Tip.GetWindowTextW(jj);
m_Tip.SetSel(-1, -1);      //自动滚屏 
if(dw==1)
{
m_out.EnableWindow(false);
m_Tip.SetWindowTextW(jj+_T("\r\n")+_T("卡出按键正常"));
}
else
m_Tip.SetWindowTextW(jj+_T("\r\n")+_T("卡出按键失败"));
m_Tip.LineScroll(m_Tip.GetLineCount());
//
*/
}


void CDaoTestDlg::OnBnTestKeywonfo()
{
// TODO: 在此添加控件通知处理程序代码
/*
CString jj;
DWORD dw;
int a=0x6;
HANDLE Led5=CreateFile(_T("PIO1:"),GENERIC_WRITE | GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL); 
DeviceIoControl(Led5,IOCTL_GPI_SET_PIN_IN,NULL,0,NULL,0,NULL,NULL);
DeviceIoControl(Led5,IOCTL_GPI_READ_PIN,&a,sizeof(dw),&dw,sizeof(dw),NULL,NULL);
// CString cs;
//cs.Format(_T("123 0x%x"),dw);
//MessageBox(cs);
m_Tip.GetWindowTextW(jj);
m_Tip.SetSel(-1, -1);      //自动滚屏 
if(dw==1)
{
m_Tip.SetWindowTextW(jj+_T("\r\n")+_T("测试按键正常"));
m_TestKey.EnableWindow(false);
}
else
m_Tip.SetWindowTextW(jj+_T("\r\n")+_T("测试按键失败"));
m_Tip.LineScroll(m_Tip.GetLineCount());
//m_TestKey.EnableWindow(false);
*/
}


void CDaoTestDlg::OnBnPrintTest()
{
// TODO: 在此添加控件通知处理程序代码
/*
CString jj;
DWORD dw;
int a=0x19;
HANDLE Led5=CreateFile(_T("PIO1:"),GENERIC_WRITE | GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL); 
DeviceIoControl(Led5,IOCTL_GPI_SET_PIN_IN,NULL,0,NULL,0,NULL,NULL);
DeviceIoControl(Led5,IOCTL_GPIO_READ_PIN,&a,sizeof(dw),&dw,sizeof(dw),NULL,NULL);
//CString cs;
//cs.Format(_T("123 0x%x"),dw);
//MessageBox(cs);
m_Tip.GetWindowTextW(jj);
m_Tip.SetSel(-1, -1);      //自动滚屏 
if(dw==1)
{
m_Tip.SetWindowTextW(jj+_T("\r\n")+_T("打印按键正常"));
m_print.EnableWindow(false);
}
else
m_Tip.SetWindowTextW(jj+_T("\r\n")+_T("打印按键失败"));
m_Tip.LineScroll(m_Tip.GetLineCount());
*/
//m_print.EnableWindow(false);
}


static DWORD UserOthProcessThread(LPVOID pParam)
{
CDaoTestDlg *dlg2=(CDaoTestDlg*) pParam;//new CuserkeyDlg;// 
CString jj,cs;
int s;
int sign=1;
double t,n,q,m;
while(1)
{
Sleep(1000);
t=0,q=0;
for(n=3;(1/n)>(1e-6);n+=4)
{
t+=(-1)*(1/n);
}
for(m=1;(1/m)>(1e-6);m+=4)
{
q+=(1/m);
}
cs.Format(_T("%10.8f"),(t+q)*4);
dlg2->m_Tip.GetWindowTextW(jj);
dlg2->m_Tip.SetSel(-1, -1);      //自动滚屏 
dlg2->m_Tip.SetWindowTextW(jj+_T("\r\n")+cs);
dlg2->m_Tip.LineScroll(dlg2->m_Tip.GetLineCount());
//dlg->OnBnClickedButton4();
}


}
bool svs1=false;
void CDaoTestDlg::OnBnClickedButton12()
{
// TODO: 在此添加控件通知处理程序代码
if(!svs1)
{
ThreadOth = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)UserOthProcessThread,  this,  0, &threadIDOth);


if (NULL == ThreadOth )
{
MessageBox(TEXT("创建线程失败!"));
}
GetDlgItem(IDC_BUTTON12)->SetWindowText(_T("停止"));
svs1=true;
}
else
{
//ExitThread(threadIDOth);
GetDlgItem(IDC_BUTTON12)->SetWindowText(_T("预留"));
SuspendThread(ThreadOth);
   CloseHandle(ThreadOth);
svs1=false;
}

}




网络测试

// PingDg.cpp : 实现文件
//


#include "stdafx.h"
#include "DaoTest.h"
#include "PingDg.h"
  
#include <icmpapi.h>   
#include <winsock.h>   
#include <ipExport.h>  


// PingDg 对话框


IMPLEMENT_DYNAMIC(PingDg, CDialog)


PingDg::PingDg(CWnd* pParent /*=NULL*/)
: CDialog(PingDg::IDD, pParent)
, m_ip1(_T(""))
{


}
BOOL PingDg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: 在此添加额外的初始化代码
int iFullWidth = GetSystemMetrics(SM_CXSCREEN);


int iFullHeight = GetSystemMetrics(SM_CYSCREEN);


::SetWindowPos(this->m_hWnd, HWND_TOPMOST, 0, 0, iFullWidth, iFullHeight, SWP_NOOWNERZORDER|SWP_SHOWWINDOW);
m_IP.SetWindowTextW(_T("192.168.1.31"));
net=false;
return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}


DWORD PingDg::Ping()   
{

    return 0;   


}
PingDg::~PingDg()
{
}


void PingDg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_EDIT1, m_IP);
// DDX_Control(pDX, IDC_LIST4, m_lstRecv);
// DDX_Text(pDX, IDC_EDIT1, m_ip1);
DDX_Text(pDX, IDC_EDIT1, m_ip1);
}




BEGIN_MESSAGE_MAP(PingDg, CDialog)
ON_BN_CLICKED(IDC_BUTTON1, &PingDg::OnBnClickedButton1)
ON_BN_CLICKED(IDC_BUTTON2, &PingDg::OnBnClickedButton2)
END_MESSAGE_MAP()




// PingDg 消息处理程序


void PingDg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
HANDLE iHwnd;
CString pp;
iHwnd=IcmpCreateFile();
m_IP.GetWindowTextW(pp);
IPAddr pAddr;USES_CONVERSION; 
char *p=W2A(pp);
pAddr=(IPAddr)inet_addr (p);
icmp_echo_reply pData;


for(int i=1;i<=1;i++)
{


IcmpSendEcho(iHwnd,pAddr,NULL,0,NULL,(LPVOID)&pData,sizeof(icmp_echo_reply),0);


if (pData.Status==0)


{
MessageBox(_T("Ping测试成功...\n"));
net=true;
}
else
{
MessageBox(_T("Ping测试失败...\n"));
net=false;
}


}

SipShowIM(0);
}
bool svs=false;
void PingDg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
//CFont *font;
//font->CreateFont(14,0,0,0,FW_MEDIUM,FALSE,FALSE,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,
//CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,DEFAULT_PITCH | FF_SWISS,_T("Arial"));
if(!svs)
{
SipShowIM(1);
svs=true;
GetDlgItem(IDC_BUTTON2)->SetWindowText(_T("关闭输入法"));
}
else
{
SipShowIM(0);
svs=false;
//GetDlgItem(IDC_BUTTON2)->SetFont(font);
// ::SetTextColor((HDC)GetDlgItem(IDC_BUTTON2)->GetSafeHwnd(),RGB(255,0,25));//设置按钮IDC_BUTTON_SEND的显示文字颜色
GetDlgItem(IDC_BUTTON2)->SetWindowText(_T("弹出输入法"));

}
}

屏幕测试

// Dlg.cpp : 实现文件
//


#include "stdafx.h"
#include "DaoTest.h"
#include "Dlg.h"
#include <Imaging.h> 


// Dlg 对话框


IMPLEMENT_DYNAMIC(Dlg, CDialog)


Dlg::Dlg(CWnd* pParent /*=NULL*/)
: CDialog(Dlg::IDD, pParent)
{
int iFullWidth = GetSystemMetrics(SM_CXSCREEN);


int iFullHeight = GetSystemMetrics(SM_CYSCREEN);


::SetWindowPos(this->m_hWnd, HWND_TOPMOST, 0, 0, iFullWidth, iFullHeight, SWP_NOOWNERZORDER|SWP_SHOWWINDOW);


}


BOOL Dlg::OnInitDialog()
{
CDialog::OnInitDialog();


// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
//  执行此操作
// SetIcon(m_hIcon, TRUE);// 设置大图标
// SetIcon(m_hIcon, FALSE);// 设置小图标


// TODO: 在此添加额外的初始化代码
int iFullWidth = GetSystemMetrics(SM_CXSCREEN);


int iFullHeight = GetSystemMetrics(SM_CYSCREEN);


::SetWindowPos(this->m_hWnd, HWND_TOPMOST, 0, 0, iFullWidth, iFullHeight, SWP_NOOWNERZORDER|SWP_SHOWWINDOW);
SetTimer(TIMER1,500,0);
return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}
Dlg::~Dlg()
{
}


void Dlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}




BEGIN_MESSAGE_MAP(Dlg, CDialog)
ON_WM_KEYDOWN()
ON_WM_SYSKEYDOWN()
ON_WM_MOUSEMOVE()
ON_WM_LBUTTONDOWN()
ON_WM_TIMER()
END_MESSAGE_MAP()




// Dlg 消息处理程序


void Dlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
MessageBox(_T("1"));
CDialog::OnKeyDown(nChar, nRepCnt, nFlags);
}


void Dlg::OnSysKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
MessageBox(_T("1"));
CDialog::OnSysKeyDown(nChar, nRepCnt, nFlags);
}
int t=0;
void Dlg::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
//if(t==0)
{


}
t=1;
CDialog::OnMouseMove(nFlags, point);
}


void Dlg::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
EndDialog(0);
CDialog::OnLButtonDown(nFlags, point);
}
void Dlg::Loadimage(CString &FileName)   
{   
    HRESULT hr;//返回结果   
    IImage *pImage =NULL;//Image接口对象   
    LPCTSTR szFileName=FileName;//图像文件   
    IImagingFactory *pImagingFactory=NULL;   
    //初始化COM环境   
    if(FAILED(hr=CoInitializeEx(NULL,COINIT_MULTITHREADED)))   
    {   
        TRACE(L"CONINIT_MULTITHREADED ERROR");   
        return;   
    }   
    //得到Image接口对象    
    hr=CoCreateInstance(CLSID_ImagingFactory,NULL,CLSCTX_INPROC_SERVER,IID_IImagingFactory,(void**)&pImagingFactory);   
    if(FAILED(hr))   
    {   
        TRACE(L"IMAGE FACTORY ERROR");   
        goto finish;   
    }   
    //加载图像文件到IImage接口对象中   
    hr=pImagingFactory->CreateImageFromFile(szFileName,&pImage);   
    if(FAILED(hr))   
    {   
        TRACE(L"IMAGE LOAD ERROR");   
        goto finish;   
    }   
   
    //开始绘制图像   
    CDC *pDC=GetDC();   
    //定义绘制尺寸   
    RECT rect;   
    GetClientRect(&rect);   
    //绘制图片   
    pImage->Draw (pDC->m_hDC ,&rect,NULL);   
    //释放设备环境   
    ReleaseDC(pDC);   
finish:   
    //释放IImage接口对象   
    if(pImage)   
        pImage->Release ();   
    //释放IImageingFactory接口对象   
    if(pImagingFactory)   
        pImagingFactory->Release();   
    //释放程序占用的COM资源   
    CoUninitialize();   
}   




void Dlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值


OnDraw(this->GetDC());
}
void Dlg::OnDraw(CDC* pDC)// 注意此处,默认情况下 pDC是被注释掉的,我都被害惨了..
{
int  iFullWidth = GetSystemMetrics(SM_CXSCREEN);


int iFullHeight = GetSystemMetrics(SM_CYSCREEN);
//=======================================================================
CBitmap m_hBitmap;                     // 定义位图对象
m_hBitmap.LoadBitmap(IDB_BITMAP1); 
CDC MemDC;
MemDC.CreateCompatibleDC(NULL);
MemDC.SelectObject(m_hBitmap);
pDC->BitBlt(0,0,iFullWidth,iFullHeight,&MemDC,0,0,SRCCOPY);
//=======================================================================
 // TODO: 在此处为本机数据添加绘制代码
}

0 0