关于MFC的vs开发学习总结:
主要学习了基于窗体的MFC使用。学习方面如下:
窗体结构分三个栏目:一个是头文件,一个是cpp类文件,一个是窗体文件,头文件包含了类中所用到方法变量的声明,类文件主要写代码执行,窗体文件主要用来添加控件。
基本控件(6个):
1、radiobutton的使用,要点击属性,勾选组,保证了你所有的按钮只有一个能被选中,然后要建立类向导,添加一个按钮的成员变量,变量类型整形,用这个变量来表示按钮,获取想关属性,这个变量可以给其赋值为整数(点击按钮进入方法,给变量赋值),用来判断是否被选中。
2.编辑框的使用:给编辑框添加成员变量,变量类型CString类型,成员变量的值就是填入的值。也可把变量类型写为编辑框类型,然后使用
CString a;
m_a.GetWindowText(a);
提取编辑框的数据。
3.按扭的使用:双击点击,进入后台代码写即可。
4.static静态文本框的使用:点击属性该内容
5.menu的插入,右击工程插入menu,插入后点击想加入的窗体的属性进行选择添加即可
6位图的使用,右击引入位图,添加一个相框选择箱添加的位图即可,注意位图做背景要另加代码防止控件被覆盖。
要在相应的头文件中加入方法声明
void CloginDlg::OnPaint()
{
//给对话框添加背景图片
CPaintDC dc(this);
CBitmap bitmap;
bitmap.LoadBitmap(IDB_BITMAP2);
BITMAP bmp;
bitmap.GetBitmap(&bmp);
CDC dcview;
dcview.CreateCompatibleDC(&dc);
dcview.SelectObject(&bitmap);
CRect rect;
GetClientRect(&rect);
dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcview,
0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);
/////////////////////////////////////////
////////////////////////////////////////
}
数据控件:(vc没有这些控件要百度——adodata,的相关控件安装方法)
1.ado data的使用,这个控件使用了ado进行的数据库连接,要点击第二个框连接数据库,然后点击recordsource选择要选择的查询方式,有sql语句,存储查询,整表查询。选择之后还可以吧这个控件进行变量声明(m_f)调用方法SetRecordSource来结合我们的变量按条件进行查询。
m_f.SetRecordSource("select * from adm where name='"+a+"' or password='"+a+"' ");
m_f.Refresh();
UpdateData(false);
2.datagrid:这个控件配合ado data进行使用,点击属性的全部然后选择adodata数据源即可显示数据,这个控件的属性可以勾选是否允许修改,在general里
3使用odbc进行数据查询,声明 下列代码包含了在静态文本中显示图形的代码
include "afxdb.h"
CDatabase m_Pmydatabase1;//数据库
CRecordset m_set1;//数据集
void Cstudent_info::OnButton1()
{
// TODO: Add your control notification handler code here
//DSN配置的数据源
m_Pmydatabase1.Open ("ODBC;DSN=datasource;username=sa;password=123456;");
m_set1.m_pDatabase =&m_Pmydatabase1;
CString ssql;
ssql="select * from stu where sno='"+username+"'";
m_set1.Open (CRecordset::forwardOnly,ssql,CRecordset::readOnly);
UpdateData(true);
CString str1;
if(!m_set1.IsEOF())
{
m_set1.GetFieldValue("name",str1);
SetDlgItemText(IDC_EDIT1,str1);
m_set1.GetFieldValue("sno",str1);
SetDlgItemText(IDC_EDIT2,str1);
m_set1.GetFieldValue("address",str1);
SetDlgItemText(IDC_EDIT3,str1);
m_set1.GetFieldValue("Sdept",str1);
SetDlgItemText(IDC_EDIT4,str1);
m_set1.GetFieldValue("photo",str1);
this->m_image.ModifyStyle(0,SS_BITMAP|SS_CENTERIMAGE);
HBITMAP hbmp=(HBITMAP)::LoadImage (0,str1,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
this->m_image.SetBitmap (hbmp);
}
UpdateData(true);
m_set1.Close ();
m_Pmydatabase1.Close();
}
4.odbc进行数据插入(插入图片):
include "afxdb.h"
CDatabase m_Pmydatabase1244;
void Cstudentinfo::OnButton1()
{
int nSel;CString strWeb;
nSel=m_comm.GetCurSel();
m_comm.GetLBText(nSel,strWeb);
// TODO: Add your control notification handler code here
CString str1;
// TODO: Add your control notification handler code here
if(!m_Pmydatabase1244.IsOpen())//判断是否进行数据库连接
{
m_Pmydatabase1244.Open ("ODBC;DSN=datasource;UID=sa;PWD=123456;");
}
CFileDialog dlg(true,NULL,NULL,OFN_OVERWRITEPROMPT,"(*.*)|*.*",this);
if(dlg.DoModal()==IDOK)//文件的对话框如果打开(*.*)|*.*||"
{
CString ssql,str;
CString pathname1;
pathname1=dlg.GetPathName();
MessageBox(pathname1);
ssql="update stu set photo='"+pathname1+"' where sno='"+strWeb+"'";//%s是pathname1的值,进行类型的转换
// ssql="insert into Paper(Sno,Pname,Pauthor,Ppath) values('"+username123+"','"+papername+"','"+str+"','"+pathname1+"')";
m_Pmydatabase1244.ExecuteSQL(ssql);//此函数对数据库内容的一系列的操作
MessageBox("文件上传成功!");
UpdateData(true);
}
m_Pmydatabase1244.Close();//关闭基类
}
4下拉列表:
void Cstudentinfo::OnButton3()
{
// TODO: Add your control notification handler code here
CString var1;
// TODO: Add your control notification handler code here
m_mydatabase300.Open ("ODBC;DSN=datasource;username=sa;password=123456;");
m_set300.m_pDatabase =&m_mydatabase300;
CString ssql;
ssql="select * from stu ";
m_set300.Open(CRecordset::forwardOnly,ssql,CRecordset::readOnly);
while(!m_set300.IsEOF())
{
m_set300.GetFieldValue("sno",var1);//Sno是列名
m_comm.AddString (var1);
m_set300.MoveNext ();
}
m_set300.Close ();
}
获取选择值的代码
int nSel;CString strWeb;
nSel=m_comm.GetCurSel();
m_comm.GetLBText(nSel,strWeb);
具体实现请看学生信息管理系统升级版