VC 小结

1.VC STATIC控件响应鼠标点击事件 

将notify设置为true。

双击控件即可自动创建点击事件函数,如void CRecPlotDlg::OnStnClickedWavePwm()

2.建立文件夹和文件/保存文件

#include "shlwapi.h"

#pragma comment(lib,"shlwapi.lib")

        CString filepath = pDlg->m_str_edit_client;
        if (!PathIsDirectory(filepath))
        {
            ::CreateDirectory(filepath, NULL);//创建目录,已有的话不影响
        }
        filepath += _T("\\") + pDlg->m_str_edit_site + _T("-") + pDlg->m_str_edit_prodid;
        if (!PathIsDirectory(filepath))
        {
            ::CreateDirectory(filepath, NULL);//创建目录,已有的话不影响
        }

        CFile fileSave;
        CTime time = CTime::GetCurrentTime();
        str.Format(_T("%d"),rec_num_cur);
        BOOL success = fileSave.Open(filepath + _T("\\") + pDlg->m_str_edit_client + _T("-") + pDlg->m_str_edit_site + _T("-") + pDlg->m_str_edit_prodid + _T("-") +time.Format("%Y%m%d")+_T("-rec")+str+_T(".data"),CFile::modeCreate | CFile::modeWrite);
        if(success==0){
            pDlg->m_str_edit_output += _T("打开/新建保存文件,失败!\r\n");
            pDlg->SendMessage(WM_REFRESH_UI);
            ThreadEnd(pDlg,&Proc2Running,TRUE);
            return 0;
        }
        CArchive ar(&fileSave, CArchive::store);
        for(int n=0;n<8192;n++)
        {
            ar<<modbus_data_reorder[n];
        }
        ar.Close();
        fileSave.Close();
3.按键打开另一个窗口

    CRecPlotDlg dlgRecPlot;
    dlgRecPlot.DoModal();

4.获取可用的COM口

#include <devguid.h>
/*  
GUID_DEVCLASS_FDC软盘控制器  
GUID_DEVCLASS_DISPLAY显示卡  
GUID_DEVCLASS_CDROM光驱  
GUID_DEVCLASS_KEYBOARD键盘  
GUID_DEVCLASS_COMPUTER计算机  
GUID_DEVCLASS_SYSTEM系统  
GUID_DEVCLASS_DISKDRIVE磁盘驱动器  
GUID_DEVCLASS_MEDIA声音、视频和游戏控制器  
GUID_DEVCLASS_MODEMMODEM  
GUID_DEVCLASS_MOUSE鼠标和其他指针设备  
GUID_DEVCLASS_NET网络设备器  
GUID_DEVCLASS_USB通用串行总线控制器  
GUID_DEVCLASS_FLOPPYDISK软盘驱动器  
GUID_DEVCLASS_UNKNOWN未知设备  
GUID_DEVCLASS_SCSIADAPTERSCSI 和 RAID 控制器  
GUID_DEVCLASS_HDCIDE ATA/ATAPI 控制器  
GUID_DEVCLASS_PORTS端口(COM 和 LPT)  
GUID_DEVCLASS_MONITOR监视器  
*/   
void EnumerCOMPortByGUID(LPVOID lpParameter)
{
    Crec_readDlg * pDlg = (Crec_readDlg *)lpParameter;

    HDEVINFO hDevInfo = SetupDiGetClassDevs(&GUID_DEVCLASS_PORTS, NULL, NULL, 0);
    HANDLE hCom;

    if (hDevInfo)
    {
        int iy = 0;
        SP_DEVINFO_DATA SpDevInfo = { sizeof(SP_DEVINFO_DATA) };
        CString ComY[50];
        CString ComYanzheng;
        for (DWORD iDevIndex = 0; SetupDiEnumDeviceInfo(hDevInfo, iDevIndex, &SpDevInfo); iDevIndex++)
        {
            TCHAR szName[512] = { 0 };
            if (SetupDiGetDeviceRegistryProperty(hDevInfo, &SpDevInfo, SPDRP_FRIENDLYNAME,
                NULL, (PBYTE)szName, sizeof(szName), NULL))
            {
                CString com, str, strComOpen;
                str.Format(_T("%s"), szName);//获取串口的名称COM2
                int posBeg = str.Find('(');
                int posEnd = str.Find(')');
                com = str.Mid(posBeg + 1, posEnd - posBeg - 1);//获取串口的名称COM2
                strComOpen = _T("\\\\.\\") + com;

                hCom = CreateFile(strComOpen, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);//如果返回不为空则此串口可用
                if (INVALID_HANDLE_VALUE == hCom || ComYanzheng == com)
                {
                    DWORD error = ::GetLastError();//取得错误信息 
                }
                else
                {
                    ComYanzheng = com;
                    ComY[iy] = str;
                    iy++;
                }
                CloseHandle(hCom);
            }
        }
        SetupDiDestroyDeviceInfoList(hDevInfo);
        //显示可用串口
        pDlg->m_ctl_com_port.Clear();
        for(int n=0;n<50;n++)
        {
            if(ComY[n].IsEmpty())    continue;
            pDlg->m_ctl_com_port.AddString(ComY[n]);
        }
    }
}

5.点击打开文件选择对话框

    char strExt[5] = "data";//设置文件的读取类型
    CString szFilter = _T("Data Files (*.data)|*.data|All Files (*.*)|*.*||");
    SelectFile(strExt,szFilter);


bool Crec_readDlg::SelectFile(char* strExt,CString const& szFilter)
{
    CFileDialog dlg(TRUE,(LPCTSTR)strExt,NULL,OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_ALLOWMULTISELECT,szFilter);
    dlg.m_ofn.lpstrTitle = _T("请选择缓存文件");
    CString inPath;
    CArray<CString,CString> aryFilename;
    if(dlg.DoModal() == IDOK)
    {
        CString filenames;
        POSITION posFile = dlg.GetStartPosition();
        while(posFile != NULL)
        {
            aryFilename.Add(dlg.GetNextPathName(posFile));
        }
    }
    
    int SelFileNum = aryFilename.GetSize();
    if(SelFileNum==0)
    {
        this->m_str_edit_output += _T("没有选择缓存文件");
        return false;
    }else{
        this->m_str_edit_recfile = *aryFilename.GetData();
        this->UpdateData(FALSE);
    }
    return true;
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值