1,扫码本质就是一个字符串,使用一个编辑框接收数据就好了。
2,串口通讯,设置好串口需要的参数,读取数据时注意分段接收,做死循环等待接收的时候记得做超时。可以使用conut = 18000; count --; while(count > 0)
(1) int 代表一个整形
而二进制 10进制 16进制 都是一种表示的方式
int a=0c;
int b=0f;
int c = (a<<8 | b);
就代表0c0f;
(2)int和char 互相转换 : atoi itoa
float和char 互相转换 : atof sprintf
_ttoi CString 转int
(3)strtok 分离字符串
strstr 查找字符串里是否有子字符串
(4)CString 转 char可以用sprintf
CString转int float 都可以用Format
(5)memset 清0初始化
memcpy内存拷贝 可以将unsigned char 连接起来
(6)CTime获取时间
CTimeSpan获取时间差
(7)UNICODE CString 转char
CString str;
int n = str.GetLength();
int len = WideCharToMultiByte(CP_ACP, 0, str, str.GenLength(), null, 0, null, null);
char * buf = new char[len+1];
WideCharToMultiByte(CP_ACP, 0, str, str.GenLength(), buf, len, null, null);
(8)m_pMainWnd = (CBaseFrame *)AfxGetApp()->GetMainWnd():
3,socket 通讯也是,注意分段接收,可以做开始结束标识,当开始结束都包含在字符串内的时候,才代表接收完成。
4,数据库 sql server 2008r2操作
建议odbc源
sql语句
建表:
select count(*) from sysobjects where id = OBJECT_ID('表名') 返回值>0则代表表已存在
create table 表名 (id int IDENTITY(1,1) NOT NULL, constraint pkid primary key (id), 日期 varchar
(50)))
插入:
insert into 表名 (列名,....) values (‘值’,......)
删除:
delete from 表名 where 日期 >= '20200101' AND 日期 <= '20200721'
更新:
UPDATE 库名 set 表名 VALUES = ‘1’ WHERE id = '1'
5,list control 用线程读取数据库数据,防止UI卡住!控件分页显示 数据库报表
CRect rect;
// 获取编程语言列表视图控件的位置和大小
m_programLangList.GetClientRect(&rect);
// 为列表视图控件添加全行选中和栅格风格
m_programLangList.SetExtendedStyle(m_programLangList.GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
// 为列表视图控件添加三列
m_programLangList.InsertColumn(0, _T("语言"), LVCFMT_CENTER, rect.Width()/3, 0);
m_programLangList.InsertColumn(1, _T("2012.02排名"), LVCFMT_CENTER, rect.Width()/3, 1);
m_programLangList.InsertColumn(2, _T("2011.02排名"), LVCFMT_CENTER, rect.Width()/3, 2);
// 在列表视图控件中插入列表项,并设置列表子项文本
m_programLangList.InsertItem(0, _T("Java")); 第0行 第0 java列
m_programLangList.SetItemText(0, 1, _T("1")); 第0行 第1列
分页显示:
1.创造工程 testDlg,在对话框头文件中定义,四个公有变量
int pageNo; //页数编号
int pageSize; // 每页显示条数
int intStart; // 开始记录
int intEnd; // 结束记录
int max_page; // 记录最大页数
2.在构造函数中初始化
pageSize=10;
pageNo=1;
3.添加控件,并通过类向导添加响应函数,核心代码如下:
void CTestDlg::OnBtnFirst() // 第一页
{
if (pageNo == 1)
{
AfxMessageBox(_T("已是第一页"));
}
else
{
pageNo = 1;
m_ctlList.DeleteAllItems();
ListShow();
}
}
void CTestDlg::OnBtnPageup() // 上一页
{
if(pageNo==1)
{
AfxMessageBox(_T("已是第一页"));
}
if(pageNo>1)
{
pageNo--;
m_ctlList.DeleteAllItems();
ListShow();
}
}
void CTestDlg::OnBtnPagedown() // 下一页
{
pageNo++;
if (pageNo > max_page)
{
pageNo--;
AfxMessageBox("已是最后一页");
return;
}
m_ctlList.DeleteAllItems();
ListShow();
}
void CTestDlg::OnBtnLast() // 最后一页
{
if (pageNo == max_page)
{
AfxMessageBox("已是最后一页");
return;
}
else
{
pageNo = max_page;
m_ctlList.DeleteAllItems();
ListShow();
}
}
4.在对话框初始化中设置List Control的风格
5.添加ListShow函数的实现,通过数据库实现
void ListShow()
{
intStart = pageSize * (pageNo-1);
intEnd = pageSize * pageNo;
for(int i = intStart,j=0;i<intEnd;i++,j++)
m_ctlList.InsertItem(j,str[i]);
for(int i = intStart,j=0;i<intEnd;i++,j++)
m_ctlList.InsertItem(j,1,str[i]);
CString strShowPage, strpageNo, strMaxPage;
strpageNo.Format("第 %d 页 ", pageNo);
strMaxPage.Format("共 %d 页", max_page);
strShowPage.Format(strpageNo + strMaxPage);
GetDlgItem(IDC_STATIC_SHOWPAGE)->SetWindowText(strShowPage);
}
6,MonthCalendar 日历控件
void CMFC_Ctrl_TimeDlg::OnMcnSelchangeMonthcalendar1(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMSELCHANGE pSelChange = reinterpret_cast<LPNMSELCHANGE>(pNMHDR);
SYSTEMTIME st = {0};
m_calendar.GetCurSel(&st); //获取当前日期信息
CString str;
str.Format(L"%d年%d月%d日", st.wYear,st.wMongth,st.wDay);
*pResult = 0;
}