MFC连接数据库实现列表翻页功能
mfc dialog scrollbar 用法

MFC对话框滚动条的使用1. 简介MFC(Microsoft Foundation Class)对话框是Windows评台上一种常见的GUI(Graphical User Interface)界面,可以用于创建各种窗口应用程序。
滚动条是对话框中常用的控件之一,可以用于滚动显示大量内容,如文本、图片等。
本文将介绍在MFC对话框中如何使用滚动条控件。
2. 添加滚动条控件在MFC对话框中添加滚动条控件非常简单。
打开对话框资源编辑器,选中要添加滚动条的对话框,然后在工具栏中选择“滚动条”控件,将其拖放到对话框中即可。
3. 设置滚动条属性添加滚动条控件后,我们可以通过双击滚动条控件或者右键点击属性来设置其各种属性。
常见的滚动条属性包括滚动条的位置、大小、范围、页面大小、滑块大小等。
根据实际需求,可以对这些属性进行调整,以满足程序的需求。
4. 响应滚动条消息一旦滚动条控件添加到对话框中并设置好属性,接下来就是响应滚动条的消息。
在MFC中,我们可以通过重载对话框类的OnVScroll和OnHScroll函数来响应垂直滚动和水平滚动的消息。
在这两个函数中,我们可以根据滚动条的位置来更新对话框中其他控件的显示内容,从而实现滚动显示的效果。
5. 示例代码以下是一个简单的示例代码,演示了在MFC对话框中使用垂直滚动条控件的方法:```C++void CMyDialog::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar){// 获取滚动条控件的当前位置int nCurPos = pScrollBar->GetScrollPos();// 根据滚动条的消息进行相应处理switch (nSBCode){case SB_TOP:// 处理滚动到顶部的情况break;case SB_BOTTOM:// 处理滚动到底部的情况break;case SB_LINEUP:// 处理向上滚动一行的情况break;case SB_LINEDOWN:// 处理向下滚动一行的情况break;case SB_PAGEUP:// 处理向上滚动一页的情况break;case SB_PAGEDOWN:// 处理向下滚动一页的情况break;case SB_THUMBTRACK:// 处理拖动滑块的情况break;default:break;}CDialog::OnVScroll(nSBCode, nPos, pScrollBar); }```在这个示例代码中,我们重载了对话框类的OnVScroll函数,通过获取滚动条的当前位置和消息类型,实现了对滚动条消息的处理。
mfc sqlserver使用

MFC(Microsoft Foundation Classes)是微软提供的一个类库,用于在C++环境下编写应用程序。
而SQL Server是由Microsoft 开发和推广的关系数据库管理系统(RDBMS)。
MFC本身并不直接与SQL Server数据库交互,而是通过ADO (ActiveX Data Objects)或MFC的数据库类(如CDatabase,CRecordset等)来实现与数据库的交互。
如果你想在MFC应用程序中使用SQL Server,你需要做的是:
1. 配置SQL Server数据库:安装SQL Server,创建数据库,配置服务器等。
2. 连接到数据库:使用ADO或MFC的数据库类来连接到你的SQL Server数据库。
3. 执行SQL语句:使用ADO或MFC的数据库类来执行SQL语句,如查询、插入、更新和删除等。
4. 处理结果:获取查询结果,处理异常等。
在MFC应用程序中,你可以使用ADO对象来与SQL Server数据库进行交互。
例如,你可以使用ADO的Connection对象来连接到数据库,使用Command对象来执行SQL语句,使用Recordset对象来获取查询结果等。
另外,你还可以使用MFC的数据库类来与SQL Server数据库进行交互。
例如,你可以使用CDatabase类来打开数据库连接,使用CRecordset类来执行查询并获取结果等。
总的来说,要在MFC应用程序中使用SQL Server数据库,你需要掌握一些关于ADO或MFC的数据库类的知识,并了解如何连接到数据库、执行SQL语句和处理结果等操作。
mfc编程用途

mfc编程用途
MFC(Microsoft Foundation Classes)是微软公司提供的一个用于 Windows 应用程序开发的类库和框架。
它将 Windows API 进行了封装,提供了一系列的类和函数,使得开发者可以更加方便地创建 Windows 应用程序。
以下是 MFC 编程的一些常见用途:
1. 用户界面开发:MFC 提供了丰富的 UI 组件和控件,如按钮、文本框、列表框等,开发者可以利用这些组件快速构建出美观的用户界面。
2. 图形和绘图:MFC 提供了绘图和图形操作的类和函数,开发者可以使用这些功能来绘制图形、显示图像以及实现动画效果。
3. 文件和数据库操作:MFC 提供了文件操作和数据库访问的类和函数,开发者可以使用这些功能来读取、写入文件,以及连接和操作数据库。
4. 网络编程:MFC 提供了网络通信相关的类和函数,开发者可以使用这些功能来创建网络应用程序,实现客户端/服务器通信。
5. 多线程编程:MFC 支持多线程编程,开发者可以使用它来创建并发执行的线程,提高程序的性能和响应能力。
6. 串口通信:MFC 提供了串口通信的类和函数,开发者可以使用这些功能来与外部设备进行串口通信。
7. 打印和打印预览:MFC 提供了打印和打印预览的功能,开发者可以利用这些功能来设计和实现打印相关的应用程序。
8. 动态链接库(DLL)开发:MFC 可以用于创建动态链接库,这些库可以被其他应用程序调用,实现代码的重用和模块化。
总之,MFC 编程提供了一个强大的工具集,使得开发者能够更加高效地创建 Windows 应用程序,并且减少了对底层 Windows API 的直接操作,提高了开发效率和代码的可维护性。
一步一步教你如何通过MFC操作excel

excel合成需要如下步骤:打开MFC工程(任何工程都可以,此处以串口为例)→打开MFC工程类向导并选择Automation→点击Add class,并选择from a type library。
江会弹出如下浏览框在浏览框中找到并选择office的excel.exe(或者是excel.olb),这里必须是office,而不能是wps,因为wps对应的事excel.et而不是exe文件,这里我选择的是excel.exe,我是用的是office2010,通过电脑的文件搜索功能定位了excel.exe的位置并添加的。
打开excel.exe之后,选择新类,如图总共选择六个类,分别是_Application、Workbooks、_Workbook、Worksheets、_Worksheet、Range,加入新类,即可达到用MFC操作excel的前提条件。
选完之后,可在classview中看到如下六个新类。
→在My***Dlg.cpp中加入#include”excel.h”与#include”comdef.h”,同时,在My***.cpp中加入#include”excel.h”→在My***App::InitInstance(),加入如下代码:if(!AfxOleInit() ){AfxMessageBox("初始化Ole出错!");return FALSE;},效果如图:注意excel保存时需要添加“comdef.h”头文件。
到此为止,excel在MFC中的配置环境已完成。
接下来添加一个按键,用于保存成excel文档,按键对应的程序如下:在对应(需要操作excel的)的CPP文件前加#include"comdef.h"_Application ExcelApp;Workbooks workbooks;_Workbook workbook;Worksheets sheets;_Worksheet sheet;Range range;if(!ExcelApp.CreateDispatch("Excel.Application",NULL)){AfxMessageBox("创建Excel服务失败!");}//创建Excel2000服务器(启动Excel)ExcelApp.SetVisible(false);workbooks.AttachDispatch(ExcelApp.GetWorkbooks(),true);//用来锁定对应的工作簿workbook.AttachDispatch(workbooks.Add(COleVariant((_bstr_t)CString(). AllocSysString())));//得到Worksheetssheets.AttachDispatch(workbook.GetWorksheets(),true);sheet.AttachDispatch(sheets.GetItem(_variant_t("Sheet1")),true);//得到全部Cells,此时,range是cells的集合.range.AttachDispatch(sheet.GetCells(),true);//设置1行2列的单元的值range.SetItem(_variant_t((long)1),_variant_t((long)2),_variant_t("This Is A Excel Test Program!"));TCHAR szPath[MAX_PATH];::GetCurrentDirectory(MAX_PATH,szPath);CString strPath(szPath);strPath+=_T("\\test.xlsx");sheet.SaveAs(strPath,vtMissing,vtMissing,vtMissing,vtMissing, vtMissing,vtMissing,vtMissing,vtMissing,vtMissing);ExcelApp.SetVisible(true);ExcelApp.ReleaseDispatch();workbooks.ReleaseDispatch();workbook.ReleaseDispatch();sheets.ReleaseDispatch(); sheet.ReleaseDispatch();Excel的数据读取:运用在MSDN中的示例函数(具体函数见excel文档创建示例4):根据顺序,依次从系统中获取app、books、book、sheets、sheet、range、对象,然后获取路径strpath。
MFC-TabControl使用方法

MFC-TabControl使用方法1.新建一个MFC工程,取名MyTab,选择Dialogbased,然后Finish.2.删除对话框上默认添加的三个控件.添加Tab Control控件并在Property属性中设置ID为IDC_TABTEST在MoreStyles里勾上Bottom.调速尺寸使其布满整个对话框,我这边TabControl的尺寸最后为164X203.在ClassWizard为其添加变量,变量名为m_tab.类型为CTabCtrl. 3.在对话框的初始化函数OnInitDialog里面添加如下代码: m_tab.InsertItem(0,"参数一"); //添加参数一选项卡m_tab.InsertItem(1,"参数二"); //添加参数二选项卡m_tab.InsertItem(2,"结果"); //添加结果选项卡4.在对话框资源里面添加三个对话框资源,ID分别命名为IDD_PARA1,IDD_PARA2,IDD_RESULT.字体为宋体,字号为9,style为Child,Border为None,宽度调整为161.再分别为其添加对应的基于CDialog类CPara1,CPara2,CResult.5.在CMyTabDlg类中添加三个成员变量m_para1,m_para2,m_result,分别是三个子对话框的实例.代码如下:CResultm_result; CPara2m_para2; CPara1m_para1; 6.在IDD_PARA1对话框上添加静态文本控件内容为"参数一"再在后面插入一个文本框控件,用ClassWizard将其关联为一个int型变量,名为m_nPara1; 在IDD_PARA2对话框上添加静态文本控件内容为"参数二"再在后面插入一个文本框控件,用ClassWizard将其关联为一个int型变量,名为m_nPara2; 在IDD_RESULT对话框上添加静态文本控件内容为"结果"再在后面插入一个文本框控件,用ClassWizard将其关联为一个int型变量,名为m_nResult; 7.为CPara1类添加成员函数intGetParaValue()代码如下: intCPara1::GetParaValue() ...{ returnm_nPara1; } 为CPara2类添加成员函数intGetParaValue()代码如下: intCPara2::GetParaValue() ...{ returnm_nPara2; } 为CResult类添加成员函数voidSetResultValue(intnResult)代码如下: voidCResult::SetResultValue(intnResult) ...{ m_nResult= nResult; } 8.在IDD_MYTAB_DIALOG对话框的初始化函数OnInitDialog里面添加如下代码: //关联对话框,并且将IDC_TABTEST控件设为父窗口m_para1.Create(IDD_PARA1,GetDlgItem(IDC_TABTEST)); m_para2.Create(IDD_PARA2,GetDlgItem(IDC_TABTEST)); m_result.Create(IDD_RESULT,GetDlgItem(IDC_TABTEST)); //获得IDC_TABTEST客户区大小CRectrs; m_tab.GetClientRect(&rs); //调整子对话框在父窗口中的位置rs.top+=1; rs.bottom-=60; rs.left+=1; rs.right-=2; //设置子对话框尺寸并移动到指定位置m_para1.MoveWindow(&rs); m_para2.MoveWindow(&rs); m_result.MoveWindow(&rs); //分别设置隐藏和显示m_para1.ShowWindow(true); m_para2.ShowWindow(false); m_result.ShowWindow(false); //设置默认的选项卡m_tab.SetCurSel(0);9.添加Tab Control控件的TCN_SELCHANGE事件响应函数OnSelchangeTabtest(NMHDR*pNMHDR,LRESULT*pResult),函数体代码如下:intCurSel=m_tab.GetCurSel(); switch(CurSel) ...{ case0:m_para1.ShowWindow(true); m_para2.ShowWindow(false); m_result.ShowWindow(false); break; case1:m_para1.ShowWindow(false); m_para2.ShowWindow(true);m_result.ShowWindow(false); break; case2: m_para1.ShowWindow(false); m_para2.ShowWindow(false); m_result.ShowWindow(true); break; default: ; }*pResult=0;10.在IDD_MYTAB_DIALOG对话框下面添加一个按钮,标题为"计算"为其添加事件响应函数,代码如下:m_para1.UpdateData(true); m_para2.UpdateData(true); m _result.SetResultValue(m_para1.GetParaValue()+m_para2.GetParaValue()) ; m_result.UpdateData(false);11.最后演示结果如下:12.这个小程序很简单,但是他说明了Tab Control控件的基本用法.用法2VC中的CTabCtrl用法与VB、Delphi的选项卡控件有很大的不同,每个属性页是用一个“窗体”(对话框)来实现,于是要为每个属性页对话框建类,还要关联、初始化……实在麻烦得多。
mfc中listcontrol控件

MFC中ListControl控件介绍MFC(Microsoft Foundation Class)是一种用于开发Windows桌面应用程序的C++框架。
在MFC中,ListControl是一种常用的控件,用于以列表形式显示数据。
本文将介绍MFC中的ListControl控件,包括其基本功能、使用方法以及常见应用场景。
ListControl的基本功能ListControl控件通常用于显示大量数据,并提供滚动、排序和编辑等功能。
它可以容纳多列的数据,在每个单元格中显示文本、图标或其他类型的数据。
ListControl的创建与添加数据在MFC中,创建ListControl控件的方法如下: 1. 在对话框资源中添加一个ListControl控件; 2. 使用Class Wizard添加一个ListControl成员变量,保存对该控件的引用。
ListControl中的数据可以通过以下方式添加: 1. 使用InsertItem函数添加新的行; 2. 使用SetItemText函数设置每个单元格的文本。
ListControl的基本操作ListControl提供了一系列方法和消息来处理用户交互,并对列表数据进行操作。
以下是一些常见的基本操作: - 添加数据:使用InsertItem和SetItemText函数添加新行和设置单元格数据; - 删除数据:使用DeleteItem函数删除选定行; - 编辑数据:使用EditLabel函数编辑选定行的文本; - 排序数据:使用SortItems函数按列排序列表项; - 选择数据:使用SetItemState函数设置选中行; - 获取数据:使用GetItemText函数获取指定行和列的文本数据。
ListControl的高级功能除了基本功能外,ListControl还提供了一些高级功能,可以增强用户体验和数据展示效果:ListControl可以以图标形式显示数据,并提供多种视图模式,如大图标、小图标和列表视图。
mfc list control简单使用说明

mfc list control简单使用说明MFC(Microsoft Foundation Classes)是Microsoft提供的一个C++面向对象的应用程序框架,用于开发Windows应用程序。
MFC的List Control是其中一个常用的控件,用于展示和管理数据列表。
使用MFC List Control之前,需要先创建一个对话框或视图类,并在资源编辑器中添加一个List Control控件。
我们可以通过以下几个步骤简单地使用MFC List Control控件:1. 设置列标头:使用InsertColumn函数,我们可以设置List Control的列标头。
例如,如果我们想要一个包含“姓名”和“年龄”的列表,可以这样做:```cppm_listCtrl.InsertColumn(0, _T("姓名"), LVCFMT_LEFT, 100);m_listCtrl.InsertColumn(1, _T("年龄"), LVCFMT_LEFT, 100);```2. 添加数据项:使用InsertItem函数,我们可以在List Control中添加数据项。
每个数据项将代表列表中一行的数据。
例如,我们可以这样添加一个名为“张三”,年龄为25的数据项:```cppint nIndex = m_listCtrl.InsertItem(0, _T("张三"));m_listCtrl.SetItemText(nIndex, 1, _T("25"));```3. 更改数据项内容:使用SetItemText函数,我们可以修改List Control中数据项的内容。
例如,如果我们想修改“张三”的年龄为30,可以使用以下代码:```cppm_listCtrl.SetItemText(nIndex, 1, _T("30"));```4. 删除数据项:使用DeleteItem函数,我们可以删除List Control中的数据项。
mfc list 用法

MFC(Microsoft Foundation Classes)是微软提供的一组用于开发Windows桌面应用程序的类库。
MFC List是MFC库中的一个类,用于表示和操作动态数组。
MFC List类的用法类似于标准C++的STL容器中的vector 类。
它提供了许多方法来添加、删除、访问和操作元素。
下面是一些常用的MFC List类方法:1. `AddTail()`:在列表的末尾添加一个元素。
2. `AddHead()`:在列表的开头添加一个元素。
3. `Insert()`:在指定位置插入一个元素。
4. `Remove()`:删除指定位置的元素。
5. `RemoveHead()`:删除列表的第一个元素。
6. `RemoveTail()`:删除列表的最后一个元素。
7. `GetCount()`:获取列表中元素的数量。
8. `GetAt()`:获取指定位置的元素。
9. `SetAt()`:设置指定位置的元素的值。
10. `GetHead()`:获取列表的第一个元素。
11. `GetTail()`:获取列表的最后一个元素。
使用MFC List类需要包含MFC的头文件,并在代码中定义MFC List对象,然后可以使用上述方法来操作列表。
以下是一个简单的示例:```cpp#include <afx.h> // 包含MFC头文件#include <iostream>int main(){CList<int, int> myList; // 定义一个整数类型的MFC List对象// 添加元素到列表中myList.AddTail(10);myList.AddTail(20);myList.AddTail(30);// 输出列表中的元素POSITION pos = myList.GetHeadPosition();while (pos != NULL){int num = myList.GetNext(pos);std::cout << num << " ";}std::cout << std::endl;// 删除元素并输出剩余元素myList.RemoveAt(1); // 删除第二个元素(索引为1)pos = myList.GetHeadPosition();while (pos != NULL){int num = myList.GetNext(pos);std::cout << num << " ";}std::cout << std::endl;return 0;}```上述示例演示了如何使用MFC List类来添加、删除和访问列表中的元素。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在头文件中加:
public:
CListCtrl *m_listCtrl;//列表控件
CList<CRect,CRect> listRect;//存储控件坐标在链表中
int m_iStartNum;
int m_iPerPageNum; //每页显示记录数
int m_iRecordSum; //总记录数量
int m_iCurPage; //当前第几页
int m_iPageSum; //总页数
CEdit *m_pEdit;
CString m_strContent; //查找内容
CMySqlDb *m_DB;//声明数据库类
MYSQL_ROW m_row;//查询结果行声明
protected:
HICON m_hIcon;
virtual BOOL OnInitDialog();
void SetFooterPageInfo();
void SelectUserData();
afx_msg void OnSize(UINT nType,int cx,int cy);//窗口和列表大小调整
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
在CPP文件中:
先在BOOL QueryDetail::OnInitDialog()中设置初始显示的页数
//-----------------------------------连接数据库-------------------------------------------------
m_DB= new CMySqlDb ();
db_param_t *db=(db_param_t *)malloc(sizeof(db_param_t));//分配数据库结构体空间
db->host="localhost";
db->user="root";
db->password="123456";
db->db="deyiserver";
db->port=3306;
db->unix_socket=NULL;
db->client_flag=0;
m_DB->ConnectDB(db);//连接数据库
//--------------------------------------翻页-----------------------------------------------------
m_iStartNum=0;
m_iPerPageNum=10;//设置初始每页显示记录数
m_iCurPage=1;//设置当前初始第几页
OnBnClickedclear();//清空列表
char buf_query[100]={0};
sprintf(buf_query,"acUserName like \'%%%s%%\'",(LPSTR)(LPCTSTR)m_strContent);//查找相关的语句data_param_t *select_info=(data_param_t *)malloc(sizeof(data_param_t));//分配数据结构体空间
select_info->select_exp="*";
select_info->tab_name="user_detail_info";
select_info->where_def=(LPSTR)(LPCTSTR)buf_query;
m_DB->SelectRecord(select_info);
m_iRecordSum=m_DB->GetRowNum();//计算用户表的总记录数
if(m_iRecordSum%m_iPerPageNum==0)
m_iPageSum=m_iRecordSum/m_iPerPageNum;
}
else
{
m_iPageSum=m_iRecordSum/m_iPerPageNum+1;
}
SetFooterPageInfo();//设置页数信息
SelectUserData();//从数据库获取用户信息表数据
//设置页数信息
void QueryDetail::SetFooterPageInfo()
{
CString strPageFooter;
strPageFooter.Format("第%d页,总共%d页面",m_iCurPage,m_iPageSum);
GetDlgItem(IDC_PageFooter)->SetWindowText(strPageFooter);
}
上一页:
void QueryDetail::OnBnClickedBtnprepage()
{
// TODO: 在此添加控件通知处理程序代码
if(m_iCurPage>1)
{
m_iStartNum=m_iStartNum-m_iPerPageNum;
SelectUserData();
m_iCurPage--;
CString strPageFooter;
strPageFooter.Format("第%d页, 总共%d页",m_iCurPage,m_iPageSum);
GetDlgItem(IDC_PageFooter)->SetWindowText(strPageFooter);
}
else
{
MessageBox("已经是第一页了!","提示",MB_OK);
}
return;
}
下一页:
void QueryDetail::OnBnClickedBtnnexpage()
{
// TODO: 在此添加控件通知处理程序代码
if(m_iCurPage<m_iPageSum)
{
m_iStartNum+=m_iPerPageNum;
SelectUserData();
m_iCurPage++;
CString strPageFooter;
strPageFooter.Format("第%d页, 总共%d页",m_iCurPage,m_iPageSum);
GetDlgItem(IDC_PageFooter)->SetWindowText(strPageFooter);
}
{
MessageBox("已经是最后一页了","提示",MB_OK);
}
return;
}
从数据库中选择表
void QueryDetail::SelectUserData()
{
m_listCtrl->DeleteAllItems();
int iCount=m_listCtrl->GetItemCount();
char buf_query[150]={0};
sprintf_s(buf_query,150," acUserName like '%%%s%%' limit %d
offset %d",(LPSTR)(LPCTSTR)m_strContent,m_iPerPageNum,m_iStartNum);
data_param_t *select_info=(data_param_t *)malloc(sizeof(data_param_t));//分配数据结构体空间select_info->select_exp="*";
select_info->tab_name="user_detail_info";
select_info->where_def=buf_query;
if(m_DB->SelectRecord(select_info))
{
while((m_row=m_DB->GetRecord()))
{
int iCount=m_listCtrl->GetItemCount();
int i;
m_listCtrl->InsertItem(iCount,"");
for (i=0;i<13;i++)
{
m_listCtrl->SetItemText(iCount,i,m_row[i]);
}
}
}
m_DB->FreeRecord();//释放结果集
return;
}。