设为首页 加入收藏

TOP

4.5.3 职工添加的实现(1)
2013-10-07 00:55:48 来源: 作者: 【 】 浏览:60
Tags:4.5.3 职工 添加 实现

4.5.3  职工添加的实现(1)

在具体实现之前,首先要进行ADO的初始化工作,具体的细节在前面的章节中已经有了详细的介绍,读者可以参考前面的内容来完成ADO的初始化。接下来连接数据库,可以在应用类的头文件中定义一个_ConnectionPtr型的变量m_pConnection,用来连接数据库和执行相应的SQL语句。

注意:在应用类中定义_ConnectionPtr,这样就可以免去在每个类中都定义变量,应用时只需要在使用的地方声明应用类就可以了。

下面介绍职工添加的具体的实现。添加一个对话框资源,将ID号改为IDD_EMP_ADD_ DLG,在对话框上添加如图4-23所示的控件。

 
(点击查看大图)图4-23  职工信息添加界面设计

双击对话框为对话框资源创建一个新类CEmpAddDlg。在头文件中定义变量。头文件中相应的代码如下:

代码位置:见光盘中本章源代码的CEmpAddDlg类。

  1. 1  class CEmpAddDlg : public CDialog  
  2. 2  {  
  3. 3  public:  
  4. 4   CEmpAddDlg(CWnd* pParent = NULL);                       //构造函数  
  5. 5   HBITMAP m_hBitmap;                                  //定义位图的句柄  
  6. 6   DWORD m_nFileLen;                                       //定义双字变量  
  7. 7   char *m_pBMPBuffer;                                 //定义字符指针  
  8. 8   _RecordsetPtr m_pRecordset;                         //定义记录集指针  
  9. 9   HBITMAP m_hPhotoBitmap;                             //定义位图的句柄  
  10. 10      ...  
  11. 11  } 

第4~9行代码为处理职工照片信息时所需要使用的变量。

上面的代码为CEmpAddDlg类中自定义的成员变量,其中m_hPhotoBitMap保存位图的句柄,m_nFileLen保存位图文件二进制代码的长度,m_pBMPBuffer为位图文件提供存储空间。

通过类向导为控件添加相应的变量。并为对话框添加WM_INITDIALOG消息响应函数。OnInitDialog()中代码如下:

代码位置:见光盘中本章源代码的CEmpAddDlg类。

  1. 1  BOOL CEmpAddDlg::OnInitDialog()  
  2. 2  {  
  3. 3   CDialog::OnInitDialog();  
  4. 4   CString strSQL;                                     //定义字符串变量  
  5. 5   strSQL.Format("select name from dep");                  //格式化SQL语句  
  6. 6   try  
  7. 7   {  
  8. 8       m_pRecordset = theApp.m_pConnection->Execute
    ((_bstr_t)strSQL, NULL, adCmdText);  
  9. 9       while(!m_pRecordset->adoEOF)                        //如果记录没有到末尾  
  10. 10          {  
  11. 11          m_DepartCtrl.AddString((char*)_bstr_t(m_pRecordset-
    >GetCollect (_variant_t((long)0))));  
  12. 12              m_pRecordset->MoveNext();                       //移动到下一条记录  
  13. 13          }  
  14. 14      }  
  15. 15      CATCH_ERROR;  
  16. 16      m_SexCtrl.SetCurSel(0);                             //选中下拉列表第一项  
  17. 17      m_DepartCtrl.SetCurSel(0);  
  18. 18      return TRUE;  
  19. 19  } 

第6~14行代码为遍历数据表从数据表中读取数据填充到控件中。

第16~17行代码为控件的初始化,使列表框默认选中第一项。

上面的代码主要完成对话框初始化工作,借助Format()函数构造SQL语句,查询dep表中所有数据的name字段值,再遍历记录集将查询到的所有数据插入组合框中。其中m_SexCtrl与m_DepartCtrl为CComboBox类型的变量,其成员函数AddString()实现了将字符串插入组合框中。

通过类向导为对话框添加WM_PAINT消息响应函数。该函数主要完成职工照片的显示。OnPaint()中代码如下:

代码位置:见光盘中本章源代码的CEmpAddDlg类。

  1. 1  void CEmpAddDlg::OnPaint()  
  2. 2  {  
  3. 3   CPaintDC dc(this);  
  4. 4   CStatic *pStaic = (CStatic*)GetDlgItem(IDC_PHOTO);      //获取控件的指针  
  5. 5   CBitmap bmp;                                            //定义位图变量  
  6. 6   bmp.Attach(m_hPhotoBitmap);  
  7. 7   BITMAP bm;                                          //定义一个位图结构  
  8. 8   bmp.GetBitmap(&bm);  
  9. 9   CDC dcMem;  
  10. 10      dcMem.CreateCompatibleDC(GetDC());                      //创建一个兼容的DC  
  11. 11      CBitmap *poldBitmap=(CBitmap*)dcMem.SelectObject(bmp);  //将位图选入设备环境  
  12. 12      CRect lRect;                                                //定义一个区域  
  13. 13      pStaic->GetClientRect(&lRect);                          //获取控件的客户区域  
  14. 14      lRect.NormalizeRect();  
  15. 15      pStaic->GetDC()->StretchBlt(lRect.left ,lRect.top ,lRect.Width(),lRect. Height(),  
  16. 16          &dcMem,0 ,0,bm.bmWidth,bm.bmHeight,SRCCOPY);        //显示位图  
  17. 17      dcMem.SelectObject(&poldBitmap);                        //将句柄选入设备环境  
  18. 18  } 

第5~14行代码实现控件区域大小获取,并创建一个兼容的DC。

第15~17行代码实现显示职工的照片。

上述代码主要完成照片的显示,通过GetDlgItem()函数获取Picture控件的指针,并创建一个兼容的DC。借助GetDC()函数获取控件的绘图指针,然后再借助StretchBit()函数来显示位图。

【责任编辑:云霞 TEL:(010)68476606】

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇4.5.3 职工添加的实现(2) 下一篇4.5.6 职工查询的实现

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: