C++编程常用模块.doc

上传人:w****2 文档编号:6638646 上传时间:2020-03-01 格式:DOC 页数:83 大小:160KB
返回 下载 相关 举报
C++编程常用模块.doc_第1页
第1页 / 共83页
C++编程常用模块.doc_第2页
第2页 / 共83页
C++编程常用模块.doc_第3页
第3页 / 共83页
点击查看更多>>
资源描述
1(一):连接SQL数据库 一、连接数据库(SQL):(一)直接写在程序中1、导入动态连接库在StdAfx.h中:#import C:Program FilesCommon FilesSystemadomsado15.dll no_namespace rename(EOF,adoEOF) rename(BOF,adoBOF)2、定义Provider宏在StdAfx.h中:#define Provider Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=HRMS3、初始化a) .h文件中private: HDC m_hDC; DWORD m_CurrentRecord; _RecordsetPtr m_pRecordset; _ConnectionPtr m_pConnection;b) .cpp文件中CADOOperation:CADOOperation() try m_pConnection.CreateInstance(_uuidof(Connection); m_pConnection-Open(_bstr_t(Provider), , , adModeUnknown); catch(_com_error e) AfxMessageBox(e.Description(), MB_OK); exit(0); m_pRecordset.CreateInstance(_uuidof(Recordset); m_CurrentRecord = -1;4、执行5、关闭CADOOperation:CADOOperation() m_pConnection-Close(); (二)通过login.ini文件连接void CBbbApp:IniAdo() try CString temp; char filepathMAX_PATH; GetModuleFileName(NULL,filepath,MAX_PATH); temp = theApp.ExtractFilePath(filepath);/获取可执行文件的路径,也就是程序运行的.exe文件所在路径 /运行后,temp的值为程序文件.exe 所在路径 CString strAdoConn; char temp1100; /* 在同目录下创建login.ini文件,并在其中设置数据库连接字符串,如:DatabaseConfigServer=. / . 表示本机Database=BookManageUser=saPWD=sa*/ GetPrivateProfileString(DatabaseConfig,Server,temp1,100,temp+login.ini); strserver = (TCHAR *)temp1; GetPrivateProfileString(DatabaseConfig,Database,temp1,100,temp+login.ini); strdbName = temp1; GetPrivateProfileString(DatabaseConfig,User,temp1,100,temp+login.ini); strUser = temp1; GetPrivateProfileString(DatabaseConfig,PWD,temp1,100,temp+login.ini); strPassword = temp1; strAdoConn.Format(driver=SQL Server;SERVER=%s;UID=%s;PWD=%s;DATABASE=%s, strserver, strUser, strPassword, strdbName); m_pCon.CreateInstance(_uuidof(Connection); m_pCon-ConnectionString = (_bstr_t)strAdoConn; m_pCon-Open(,NULL); m_pCom.CreateInstance(ADODB.Command); m_pRs.CreateInstance(_uuidof(Recordset); m_pRs1.CreateInstance(_uuidof(Recordset); / ADOFLAG = TRUE; catch(_com_error) /ADOFLAG = FALSE; Flag = FALSE; MessageBox(0,请检查系统配置信息, 数据库连接失败,MB_OK); return; catch(.) AfxMessageBox(SYS Error); return ; C+编程常用模块(二):连接Access数据库 二、连接数据库 (Access 2000)1、在.h文件中导入动态链接库#import C:Program FilesCommon FilesSystemadomsado15.dllno_namespace rename(EOF,adoEOF)rename(BOF,adoBOF) 类定义:class ADOConn public: BOOL ExecuteSQL(_bstr_t bstrSQL); ADOConn(); virtual ADOConn(); /添加一个指向Connection对象的指针 _ConnectionPtr m_pConnection; /添加一个指向Recordset对象的指针 _RecordsetPtr m_pRecordset; _RecordsetPtr& GetRecordSet(_bstr_t bstrSQL); void ExitConnect(); void OnInitADOConn(); 2、建立连接void ADOConn:OnInitADOConn() /初始化OLE/COM库环境 :CoInitialize(NULL); try char filepathMAX_PATH; GetModuleFileName(NULL,filepath,MAX_PATH); CString strdb; strdb = ExtractFilePath(filepath) + sm.mdb; strdb = DBQ= + strdb; /创建connection对象 m_pConnection.CreateInstance(ADODB.Connection); m_pConnection-ConnectionTimeout=3; /设置连接字符串,两种都可以 /_bstr_t strConnect=Provider=Microsoft.Jet.OLEDB.4.0;Data Source=sm.mdb; _bstr_t strConnect=DRIVER=Microsoft Access Driver (*.mdb);uid=;pwd=sm; strConnect = strConnect + strdb; /SERVER和UID,PWD的设置根据实际情况来设置 m_pConnection-Open(strConnect,adModeUnknown); /捕捉异常 catch(_com_error e) /显示错误信息 AfxMessageBox(e.Description(); 3、执行SQL语句/仅执行,无返回BOOL ADOConn:ExecuteSQL(_bstr_t bstrSQL) try /是否已连接数据库 if(m_pConnection=NULL) OnInitADOConn(); m_pConnection-Execute(bstrSQL,NULL,adCmdText); return true; catch(_com_error e) e.Description(); return false; /返回记录集_RecordsetPtr& ADOConn:GetRecordSet(_bstr_t bstrSQL) try if(m_pConnection=NULL) OnInitADOConn(); m_pRecordset.CreateInstance(_uuidof(Recordset); m_pRecordset-Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText); catch(_com_error e) e.Description(); return m_pRecordset; 4、关闭连接void ADOConn:ExitConnect() /关闭记录集和连接 if(m_pRecordset!=NULL) m_pRecordset-Close(); m_pRecordset=NULL; if(m_pConnection!=NULL) m_pConnection-Close(); m_pConnection=NULL; /释放环境 :CoUninitialize();C+编程常用模块(三):窗体操作 三、窗体操作1、显示对话框窗体CDlgLogin login ; login.DoModal(); 若要处理“确定”或“取消”: int nResponse = login.DoModal();if (nResponse = IDOK) / TODO: Place code here to handle when the dialog is / dismissed with OK else if (nResponse = IDCANCEL) / TODO: Place code here to handle when the dialog is / dismissed with Cancel 2、关闭对话框窗体 EndDialog(0); 或 CDialog:OnCancel(); 或CDialog:OnOK();3、退出应用程序 exit(0); 4、登录:P308void CDlgLogin:OnButton1() CString c_user,c_password; m_user.GetWindowText(c_user); m_password.GetWindowText(c_password); if (c_user.IsEmpty() | c_password.IsEmpty() MessageBox(用户名称或密码不能为空, 用户登录信息); return; CString sql; sql.Format(select * from tb_operator where name = %s and password = %s,c_user,c_password); m_pRs-raw_Close(); m_pRs-Open(_variant_t)sql,m_pCon.GetInterfacePtr(),adOpenKeyset,adLockOptimistic,adCmdText); /if (m_pRs-RecordCount0) 或者 if (!myConn.m_pRecordset -adoEOF) Flag = true; /Flag为全局变量 user = m_pRs-GetCollect(name).bstrVal; password = m_pRs-GetCollect(password).bstrVal; EndDialog(0); else user = ; password = ; MessageBox(用户名或密码不正确.,提示,64); return; 在程序启动初始化部分BOOL CBbbApp:InitInstance()函数里完成窗口跳转:if (Flag =true) CBbbDlg dlg; /启动主窗体 m_pMainWnd = &dlg; dlg.DoModal(); 5、动态创建工具栏:P306方法(一):CToolBar m_toolbar;CImageList m_imagelist; m_imagelist.Create(24,24,ILC_COLOR24|ILC_MASK,1,1); m_imagelist.Add(AfxGetApp()-LoadIcon(IDI_ICON4); m_imagelist.Add(AfxGetApp()-LoadIcon(IDI_ICON11); m_imagelist.Add(AfxGetApp()-LoadIcon(IDI_ICON13); m_imagelist.Add(AfxGetApp()-LoadIcon(IDI_ICON5); m_imagelist.Add(AfxGetApp()-LoadIcon(IDI_ICON19); UINT array5; for(int i=0;iLoadIcon(IDI_ICON4); m_ImageList.Add(:AfxGetApp()-LoadIcon(IDI_ICON6); m_ImageList.Add(:AfxGetApp()-LoadIcon(IDI_ICON5); m_ImageList.Add(:AfxGetApp()-LoadIcon(IDI_ICON2); m_ImageList.Add(:AfxGetApp()-LoadIcon(IDI_ICON3); m_ToolBar.Create(WS_CHILD | WS_VISIBLE, CRect(0, 0, 0, 0), this, 0); m_ToolBar.SetImageList(&m_ImageList); for(int j=0; j ICONSUM; j+) tbButtonj.dwData = NULL; tbButtonj.fsState = TBSTATE_ENABLED; tbButtonj.fsStyle = (BYTE)TBSTYLE_FLAT; tbButtonj.iBitmap = j; tbButton0.idCommand = ID_Info; tbButton1.idCommand = ID_MR; tbButton2.idCommand = ID_QS; tbButton3.idCommand = ID_XS; tbButton4.idCommand = ID_HELP; m_ToolBar.AddButtons(ICONSUM, tbButton); m_ToolBar.AutoSize(); m_ToolBar.SetStyle(TBSTYLE_FLAT | CCS_TOP);6、设置菜单有效和失效有效:m_Menu.EnableMenuItem(ID_USER_REGISTER, MF_BYCOMMAND | MF_ENABLED); 失效:m_Menu.EnableMenuItem(ID_USER_REGISTER, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);7、设置状态栏CTime Time; Time = CTime:GetCurrentTime(); CString Str = Time.Format(%Y-%m-%d); UINT Array3; for(int i=0;iGetActiveView(); if (! temp-ispreview) theApp.m_pMainWnd = theApp.m_main; CFrameWnd:OnClose();11、窗体标题栏加上图标先在头文件中声明:HICON m_hIcon;在构造函数中:m_hIcon = AfxGetApp()-LoadIcon(IDI_ICON1); 在OnInitDialog()中: SetIcon(m_hIcon, TRUE); / Set big icon SetIcon(m_hIcon, FALSE); / Set small icon 在OnPaint()中: void CSmDlg:OnPaint() if (IsIconic() CPaintDC dc(this); / device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); / Center icon in client rectangle int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; / Draw the icon dc.DrawIcon(x, y, m_hIcon); else CDialog:OnPaint(); 在OnQueryDragIcon()中:HCURSOR CSmDlg:OnQueryDragIcon() return (HCURSOR) m_hIcon; 12、设置工具栏先添加相应的图标资源再在OnInitDialog()函数中TBBUTTON tbButtonICONSUM = 0; m_ImageList.Create(32, 32, ILC_COLOR32 | ILC_MASK, 0, 0); m_ImageList.Add(:AfxGetApp()-LoadIcon(IDI_ICON8); m_ImageList.Add(:AfxGetApp()-LoadIcon(IDI_ICON4); m_ImageList.Add(:AfxGetApp()-LoadIcon(IDI_ICON6); m_ImageList.Add(:AfxGetApp()-LoadIcon(IDI_ICON5); m_ImageList.Add(:AfxGetApp()-LoadIcon(IDI_ICON2); m_ImageList.Add(:AfxGetApp()-LoadIcon(IDI_ICON3); m_ImageList.Add(:AfxGetApp()-LoadIcon(IDI_ICON7); m_ToolBar.Create(WS_CHILD | WS_VISIBLE, CRect(0, 0, 0, 0), this, 0); m_ToolBar.SetImageList(&m_ImageList); for(int j=0; jm_hWnd,1000,dwStyle);FreeLibrary(hInst); return TRUE; / return TRUE unless you set the focus to a control / EXCEPTION: OCX Property Pages should return FALSE void CAutoMsgDlg:OnbtnCancel() /淡出/ TODO: Add your control notification handler code hereDWORD dwStyle = AW_CENTER;HINSTANCE hInst = LoadLibrary(User32.DLL);typedef BOOL(WINAPI MYFUNC(HWND,DWORD,DWORD);MYFUNC* AnimateWindow;AnimateWindow=(MYFUNC *):GetProcAddress(hInst,AnimateWindow);AnimateWindow(this-GetSafeHwnd(),700,AW_HIDE|dwStyle);FreeLibrary(hInst);CDialog:OnCancel();C+编程常用模块(四):组合框用法 四、组合框用法1、获取控件第一种方法:在向导中添加对应的变量第二种方法: CComboBox * com = (CComboBox*)GetDlgItem(IDC_COMBO5);2、清空m_SGrade.ResetContent();3、添加内容m_S.AddString(GB); m_S.AddString(ZH);4、移动到第一条记录ado.MoveFirst();5、移动到下一条记录ado.MoveNext();6、设置选项m_Department.SetCurSel(0);7、根据内容设值 第一种: if(str.Compare(男) = 0) (CComboBox*)GetDlgItem(IDC_COMBO1)-SetCurSel(0); else (CComboBox*)GetDlgItem(IDC_COMBO1)-SetCurSel(1); 第二种: m_Dept.SetCurSel(m_Dept.FindString(0, str.GetBuffer(0);8、获取索引 int curSel = fieldCom-GetCurSel();9、选择改变严重注意:组合框要设置成Drop List的样式(Styles)void CAddInfo:OnSelchangeCOMBOS() / TODO: Add your control notification handler code here if(m_S.GetCurSel() != 0) m_SGrade.EnableWindow(false); else m_SGrade.EnableWindow(true);10、绑定数据 void CDlgSaleBack2:LoadCounterInfo() m_counter.ResetContent();/删除所有的数据 CString sql; sql = select distinct counter from tb_counterinfo; m_pRs-raw_Close(); m_pRs-Open(_bstr_t)sql,m_pCon.GetInterfacePtr(),adOpenKeyset,adLockOptimistic,adCmdText); while (!m_pRs-adoEOF) m_counter.AddString(TCHAR *)(_bstr_t)m_pRs-GetFields()-GetItem(counter)-Value); m_pRs-MoveNext(); 11、获取数据 严重注意:组合框要设置成Drop List的样式(Styles)m_WhereIsNow.GetWindowText(strWhereIsNow);C+编程常用模块(五):控件操作 五、控件操作1、控件与变量关联起来在函数中:void CAddInfo:DoDataExchange(CDataExchange* pDX) DDX_Control(pDX, IDC_personImage, m_personImage); DDX_Control(pDX, IDC_LIST, m_List); 控件与动作关联起来在域中:BEGIN_MESSAGE_MAP(CAddInfo, CDialog) ON_BN_CLICKED(IDC_btnAdd, OnbtnAdd) ON_BN_CLICKED(IDC_btnModify, OnbtnModify)END_MESSAGE_MAP()2、获取控件(CDateTimeCtrl*)GetDlgItem(IDC_DATETIMEPICKER1)-GetTime(&sysTime)3、设置控件的值SetDlgItemText(IDC_EDIT1, str); /文体框 CTime date = CTime:GetCurrentTime(); /时间控件m_date.SetTime(&date); (CDateTimeCtrl*)GetDlgItem(IDC_DATETIMEPICKER1)-SetTime(&sysTime);/时间控件/设置文体框属性(CEdit*)GetDlgItem(IDC_EDIT1)-SetFocus(); /定焦 (CEdit*)GetDlgItem(IDC_EDIT1)-SetSel(0, -1);/设置框内容选定状态4、从控件中取值m_Name.GetWindowText(strName); /文件框m_Birthday.GetWindowText(strBirthday); /时间控件(CDateTimeCtrl*)GetDlgItem(IDC_DATETIMEPICKER1)-GetTime(&sysTime); /时间控件GetDlgItemText(IDC_COMBO1, str); /组合框5、隐藏控件GetDlgItem(IDC_SEELIST)-ShowWindow(SW_HIDE);6、设置控件有效和失效有效:GetDlgItem(IDC_COMBOSGrade)-EnableWindow(true);失效:GetDlgItem(IDC_COMBOSGrade)-EnableWindow(false);7、移动焦点到编辑框 m_Edit.SetFocus(); m_Edit.SetSel(0,-1);8、使Date Time Picker只显示年月CDateTimeCtrl* pCtrl = (CDateTimeCtrl*) GetDlgItem(IDC_DATETIMEPICKER1); ASSERT(pCtrl != NULL); pCtrl-SetFormat(_T(yyyy-MM); 9、用IP Adress控件编辑IP地址(1)在OnInitDialog()函数中设置IP地址的默认值 CIPAddressCtrl* m_Address=(CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESS1); m_Address-SetAddress(0,0,0,0);(2)输入IP地址,并显示出来CIPAddressCtrl* m_Address=(CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESS1); BYTE nField0; BYTE nField1; BYTE nField2; BYTE nField3; m_Address-GetAddress(nField0,nField1,nField2,nField3); CString str_IP; str_IP.Format(您输入的IP地址是:%d.%d.%d.%d,nField0,nField1,nField2,nField3); AfxMessageBox(str_IP); 10、对编辑框输入内容进行控制(1)限制输入框的内容为数字创建一继承自CEdit类的新类,并在以后使用文本框时用该类定义,在此类中写:void COnlyNumEdit:OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) / TODO: Add your message handler code here and/or call default if(nChar=8) / CEdit:OnChar(nChar, nRepCnt, nFlags); return; if(nChar57) / nChar = 0; else CEdit:OnChar(nChar, nRepCnt, nFlags);(2)对输入的身份证信息进行验证 if(m_IDcard.GetLength() != 18) AfxMessageBox(); return; else int num=0; char ch; for(int i=0;i17;i+)
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 临时分类 > 人文社科


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!