当前位置:首页 > 纯业余者用VC(MFC)编写串口调试助手(含VC6工程源文件)
//===============函数结束===========================
char ConvertHexChar(char ch) { //将一个字符转换为相应的十六进制 if ((ch >= '0') && (ch <= '9')) return ch - 48;//0x30; else if ((ch >= 'A') && (ch <= 'F')) return ch - 'A' + 10; else if ((ch >= 'a') && (ch <= 'f')) return ch - 'a' + 10; else return (-1); }
//=================16进制转字符串显示===================== //16进制转字符串显示的函数
//传入参数Data为16进制的字符串 //函数返回为CString的结果sResult
CString DisplayHex2CString(CString Data) { CString sResult; CString sTemp; int Data_Length; Data_Length = Data.GetLength(); if (Data_Length == 0) return \ char *pchar = new char[Data_Length]; //用了new分配内存空间,要记得释放 strncpy(pchar,Data,Data_Length); for(int i=0; i //===============函数结束============================= comm.h编写如下: #ifndef comm_H #define comm_H 第 21 页 共 39 页 #define WM_FOUNDCOMM WM_USER + 1 //自定义消息WM_FOUNDCOMM,收到该消息表示串口已经找到 #define WM_READCOMM WM_USER + 2 //自定义消息WM_READCOMM,收到该消息缓冲区有数据,可以读取 extern void FindComm(); //申明为外部函数 extern void OpenComm(int nBaud, int nData, int nStop, int nCal); extern void CloseComm(); extern UINT ThreadFunc(LPVOID pParam); //申明全局线程处理函数 extern CString DisplayCString2Hex(CString Data, bool Blank_allow); extern CString DisplayHex2CString(CString Data); extern int ConvertHexC2String(CString str, CByteArray &senddata); extern bool ComIsOK; //申明为外部变量 extern HANDLE hCom; extern CString strcomname; #endif 在commassistDlg.h中包含MyButton.h文件 在#endif // _MSC_VER > 1000后加入 #include \ 在// Construction后加入变量及函数 CWinThread* pReceiveThread; void ShowStatus(); int m_intTxCnt; int m_intRxCnt; BOOL m_bAutoSend; DWORD ReadComm(); 在commassistDlg.cpp中 加入头文件comm.h #include \加入全局变量 CString strIn; CString strOut; CString m_strFile; 变量初始化如 ///////////////////////////////////////////////////////////////////////////// // CCommassistDlg dialog 第 22 页 共 39 页 CCommassistDlg::CCommassistDlg(CWnd* pParent /*=NULL*/) : CDialog(CCommassistDlg::IDD, pParent) { //{{AFX_DATA_INIT(CCommassistDlg) m_strTimer = _T(\ m_strFilePath = _T(\ m_strOut = _T(\ m_strStatus = _T(\ m_check_hexrx = FALSE; m_check_hextx = FALSE; //}}AFX_DATA_INIT // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); //下面就是自己添加的变量初始化 m_strTimer = \ m_strFilePath = \请选择要发送的文件\ m_intTxCnt = 0; m_intRxCnt = 0; m_bAutoSend = 0; strIn = \ strOut = \} 在OnInitDialog函数中添加代码如下 // TODO: Add extra initialization here m_comcontrol.SetForeColor(RGB(255,0,0)); FindComm(); //调用自动找串口函数 m_comlist.SetCurSel(0); //设置串口号下拉框默认值为第一个 m_baud.SetCurSel(6); //设置波特率下拉框默认值为9600 m_bdata.SetCurSel(3); //设置数据位下拉框默认值为8位 m_bstop.SetCurSel(0); //设置停止位下拉框默认值为1 m_cal.SetCurSel(0); //设置校验位下拉框默认值为None无 GetDlgItem(IDC_BTN_HANDSEND)->EnableWindow(false); //设置手动发送按钮不可用 GetDlgItem(IDC_BTN_AUTOSEND)->EnableWindow(false); //设置自动发送按钮不可用 GetDlgItem(IDC_EDIT_TIMER)->EnableWindow(false); //设置发送间隔按钮不可用 GetDlgItem(IDC_BTN_SELCTFILE)->EnableWindow(false); //设置选择文件按钮不可用 GetDlgItem(IDC_BTN_SENDFILE)->EnableWindow(false); //设置发送文件按钮不可用 ShowStatus(); //下面语句用于解决程序运行后初始化EDIT框内容被默认自动选中状态 第 23 页 共 39 页 //返回值需更改为FALSE GetFocus(); //获取焦点 SetFocus(); //设置焦点 m_CEditStatus.SetSel(-1,-1,FALSE); //设置 // PostMessage(EM_SETSEL,-1,0); return FALSE; // return TRUE unless you set the focus to a control 用ClassWizard添加WindowProc函数来处理自定义消息 函数内容如下: //=====================消息处理函数=========================== //功能:处理自定义消息========================================= LRESULT CCommassistDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) { // TODO: Add your specialized code here and/or call the base class switch(message) { case WM_FOUNDCOMM : //已找到串口,串口号以字符串形式由wParam传递 m_comlist.AddString((LPCTSTR)wParam); //用AddString添加一个字符串即COM号到m_comlist列表框中 break; case WM_READCOMM : //读串口消息 ReadComm(); break; } return CDialog::WindowProc(message, wParam, lParam); } 第 24 页 共 39 页
共分享92篇相关文档