4.5.3 职工添加的实现(1)
在具体实现之前,首先要进行ADO的初始化工作,具体的细节在前面的章节中已经有了详细的介绍,读者可以参考前面的内容来完成ADO的初始化。接下来连接数据库,可以在应用类的头文件中定义一个_ConnectionPtr型的变量m_pConnection,用来连接数据库和执行相应的SQL语句。
注意:在应用类中定义_ConnectionPtr,这样就可以免去在每个类中都定义变量,应用时只需要在使用的地方声明应用类就可以了。
下面介绍职工添加的具体的实现。添加一个对话框资源,将ID号改为IDD_EMP_ADD_ DLG,在对话框上添加如图4-23所示的控件。
|
| (点击查看大图)图4-23 职工信息添加界面设计 |
双击对话框为对话框资源创建一个新类CEmpAddDlg。在头文件中定义变量。头文件中相应的代码如下:
代码位置:见光盘中本章源代码的CEmpAddDlg类。
- 1 class CEmpAddDlg : public CDialog
- 2 {
- 3 public:
- 4 CEmpAddDlg(CWnd* pParent = NULL); //构造函数
- 5 HBITMAP m_hBitmap; //定义位图的句柄
- 6 DWORD m_nFileLen; //定义双字变量
- 7 char *m_pBMPBuffer; //定义字符指针
- 8 _RecordsetPtr m_pRecordset; //定义记录集指针
- 9 HBITMAP m_hPhotoBitmap; //定义位图的句柄
- 10 ...
- 11 }
第4~9行代码为处理职工照片信息时所需要使用的变量。
上面的代码为CEmpAddDlg类中自定义的成员变量,其中m_hPhotoBitMap保存位图的句柄,m_nFileLen保存位图文件二进制代码的长度,m_pBMPBuffer为位图文件提供存储空间。
通过类向导为控件添加相应的变量。并为对话框添加WM_INITDIALOG消息响应函数。OnInitDialog()中代码如下:
代码位置:见光盘中本章源代码的CEmpAddDlg类。
- 1 BOOL CEmpAddDlg::OnInitDialog()
- 2 {
- 3 CDialog::OnInitDialog();
- 4 CString strSQL; //定义字符串变量
- 5 strSQL.Format("select name from dep"); //格式化SQL语句
- 6 try
- 7 {
- 8 m_pRecordset = theApp.m_pConnection->Execute
((_bstr_t)strSQL, NULL, adCmdText); - 9 while(!m_pRecordset->adoEOF) //如果记录没有到末尾
- 10 {
- 11 m_DepartCtrl.AddString((char*)_bstr_t(m_pRecordset-
>GetCollect (_variant_t((long)0)))); - 12 m_pRecordset->MoveNext(); //移动到下一条记录
- 13 }
- 14 }
- 15 CATCH_ERROR;
- 16 m_SexCtrl.SetCurSel(0); //选中下拉列表第一项
- 17 m_DepartCtrl.SetCurSel(0);
- 18 return TRUE;
- 19 }
第6~14行代码为遍历数据表从数据表中读取数据填充到控件中。
第16~17行代码为控件的初始化,使列表框默认选中第一项。
上面的代码主要完成对话框初始化工作,借助Format()函数构造SQL语句,查询dep表中所有数据的name字段值,再遍历记录集将查询到的所有数据插入组合框中。其中m_SexCtrl与m_DepartCtrl为CComboBox类型的变量,其成员函数AddString()实现了将字符串插入组合框中。
通过类向导为对话框添加WM_PAINT消息响应函数。该函数主要完成职工照片的显示。OnPaint()中代码如下:
代码位置:见光盘中本章源代码的CEmpAddDlg类。
- 1 void CEmpAddDlg::OnPaint()
- 2 {
- 3 CPaintDC dc(this);
- 4 CStatic *pStaic = (CStatic*)GetDlgItem(IDC_PHOTO); //获取控件的指针
- 5 CBitmap bmp; //定义位图变量
- 6 bmp.Attach(m_hPhotoBitmap);
- 7 BITMAP bm; //定义一个位图结构
- 8 bmp.GetBitmap(&bm);
- 9 CDC dcMem;
- 10 dcMem.CreateCompatibleDC(GetDC()); //创建一个兼容的DC
- 11 CBitmap *poldBitmap=(CBitmap*)dcMem.SelectObject(bmp); //将位图选入设备环境
- 12 CRect lRect; //定义一个区域
- 13 pStaic->GetClientRect(&lRect); //获取控件的客户区域
- 14 lRect.NormalizeRect();
- 15 pStaic->GetDC()->StretchBlt(lRect.left ,lRect.top ,lRect.Width(),lRect. Height(),
- 16 &dcMem,0 ,0,bm.bmWidth,bm.bmHeight,SRCCOPY); //显示位图
- 17 dcMem.SelectObject(&poldBitmap); //将句柄选入设备环境
- 18 }
第5~14行代码实现控件区域大小获取,并创建一个兼容的DC。
第15~17行代码实现显示职工的照片。
上述代码主要完成照片的显示,通过GetDlgItem()函数获取Picture控件的指针,并创建一个兼容的DC。借助GetDC()函数获取控件的绘图指针,然后再借助StretchBit()函数来显示位图。
【责任编辑:
云霞 TEL:(010)68476606】