MFC控件及功能實現(xiàn)分析_第1頁
MFC控件及功能實現(xiàn)分析_第2頁
MFC控件及功能實現(xiàn)分析_第3頁
MFC控件及功能實現(xiàn)分析_第4頁
MFC控件及功能實現(xiàn)分析_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、目錄1、表格控件的使用 CListCtrl 12、CString 轉(zhuǎn) Char 數(shù)組和指針、 Int 等數(shù)據(jù)類型 13、消息窗口的使用 MessageBox() AfxMessageBox() 24 、編輯框 CEdit 使用 25、按鈕的使用 36、Flash 控件的使用 57、為VC界面加載ssk皮膚 58、窗口菜單的使用 59、窗口添加右擊菜單 510、為靜態(tài)文本添加動態(tài)顯示時間 611、狀態(tài)欄的使用 612、改變VC對話框的顏色實現(xiàn) 713、為MFC寸話框添加背景圖片 914、進度條的使用 915、下拉列表框 CComboBoX勺使用 1016、使用Vc讀取數(shù)據(jù)庫中的數(shù)據(jù)實現(xiàn) 1117

2、、VC下刪除、復(fù)制和移動文件實現(xiàn) 1218、VC與MFC組合鍵的使用 1519、VC中線程的使用 1620、MFC實現(xiàn)打開和連接一個文件、一個程序、一個網(wǎng)頁 1721、VC中常用文件操作 1722、MFC中畫直線和曲線 1823、將十進制數(shù)轉(zhuǎn)化為指定長度的二進制數(shù) 2024、實現(xiàn)VC程序打包201、 表格控件的使用 CListCtrl將表格控件托到窗口后,將properies中style中的view改為report,在classwizard中的 menber variables添加對應(yīng)的 con troll變量 m_list,在 On I ni tDialog()中初始化表格:/初始化 Lis

3、tctrl 表頭m_list.SetBkColor(RGB(255, 255, 255);/ 設(shè)置背景顏色 m_list.SetTextColor(RGB(0,0,0);/ 設(shè)置文本顏色 m_list.SetTextBkColor(RGB(255, 151, 240); / 設(shè)置文本背景顏色m_list.SetExtendedStyle(LVS_EX_FLATSB|LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP|LVS_EX_ONECLICKACTIVm_list.InsertColumn(0,_T(m_list.InsertColumn(1,_T(m_l

4、ist.InsertColumn(2,_T(ATE|LVS_EX_GRIDLINES);/ 設(shè)置表格風(fēng)格序號 ),LVCFMT_IMAGE|LVCFMT_LEFT);/設(shè)置列名信源符號 );/ 設(shè)置列名概 率 );m_list.SetColumnWidth(0,60); / 設(shè)置列寬 m_list.SetColumnWidth(1,120);往表格中插入數(shù)據(jù):for(i=0;iGetDlgCtrlID()=IDC_EDIT1)pDC-SetTextColor(RGB(255,125,0);/ 設(shè)置字體顏色設(shè)置編輯框和靜態(tài)框為透明效果:HBRUSH CloginDlg:OnCtlColor(CD

5、C* pDC, CWnd* pWnd, UINT nCtlColor)HBRUSH hbr = CDialog:OnCtlColor(pDC, pWnd, nCtlColor); if(nCtlColor=CTLCOLOR_STATIC)/ 對所有的 STATIC 控件的屬性進行設(shè)定 pDC-SetBkMode(TRANSPARENT); return (HBRUSH):GetStockObject(NULL_BRUSH); if(nCtlColor=CTLCOLOR_EDIT) / 對所有的 STATIC 控件的屬性進行設(shè)定 pDC-SetBkMode(TRANSPARENT); retur

6、n (HBRUSH):GetStockObject(NULL_BRUSH);return hbr; 將文件內(nèi)容讀入到編輯框:在打開文件按鈕添加代碼CFileDialog dlg(true,NULL,*.txt,OFN_FILEMUSTEXIST|OFN_HIDEREADONLY,/ 構(gòu)造文Text Files (*.txt;*.doc;*.docx)|*.txt;*.doc;*.docx|All CompressFiles (*.*)|*.*|,this); 件打開對話框CString strPath,strText=,s; if(dlg.DoModal() = IDOK) strPath =

7、 dlg.GetPathName();/ 獲得文件路徑CStdioFile file2;if(!file2.Open( strPath,CFile:modeRead) / 打開文件 return;while(true)/ 按行循環(huán)讀取文件內(nèi)容存入 s if(!file2.ReadString(s) break;strText=strText+s; m_edit1=strText;UpdateData(false);5、按鈕的使用按鈕添加圖片:第一種:Button 屬性頁里 Style 的 Bitmap 點上CBitmap Bitmap;Bitmap.LoadBitmap(IDB_BITMAP1

8、);HBITMAP hBitmap=(HBITMAP)Bitmap.Detach();CButton *pButton=(CButton*)GetDlgItem(IDCANCEL); pButton-SetBitmap(hBitmap); 感覺效果不是很好。因為圖片不會自動拉伸。第二種:可以采用 CButtonST 控件,挺好用的,比 MFC 的那些封裝好用。 第三種:把 button 按鈕屬性設(shè)置為 ower draw 然后映射 onDrawItem 消息 在 ondraw 函數(shù)內(nèi)自己繪制就可以了void CUi6Dlg:OnDrawItem(int nIDCtl, LPDRAWITEMST

9、RUCT lpDrawItemStruct)if(nIDCtl = IDC_HELLO_CFAN)/繪制按鈕框架UINT uStyle = DFCS_BUTTONPUSH;/是否按下去了?if (lpDrawItemStruct-itemState & ODS_SELECTED) uStyle |= DFCS_PUSHED;CDC dc; dc.Attach(lpDrawItemStruct-hDC); dc.DrawFrameControl(&lpDrawItemStruct-rcItem, DFC_BUTTON, uStyle);/輸出文字 dc.SelectObject(&m_Font)

10、;dc.SetTextColor(RGB(0, 0, 255);dc.SetBkMode(TRANSPARENT);CString sText;m_HelloCFan.GetWindowText(sText);dc.TextOut(lpDrawItemStruct-rcItem.left + 20, lpDrawItemStruct-rcItem.top + 20, sText); /是否得到焦點if(lpDrawItemStruct-itemState & ODS_FOCUS)/畫虛框CRect rtFocus = lpDrawItemStruct-rcItem; rtFocus.Defla

11、teRect(3, 3);dc.DrawFocusRect(&rtFocus);return;CDialog:OnDrawItem(nIDCtl, lpDrawItemStruct);第四種:1, 按鈕屬性 Onwer Drew 選上,按鈕 ID: IDC_BUTTON12,定義 private 變量:CBitmapButton m_button;3,在初始化里邊m_button.LoadBitmaps(IDB_BITMAP1, IDB_BITMAP2);/IDB_BITMAP1: 平時; IDB_BITMAP2 :按下 m_button.SubclassDlgItem(IDC_BUTTON1

12、, this);m_button.SizeToContent();設(shè)置按鈕顯示的文字代碼:GetDlgItem(IDC_BUTTON2)-SetWindowText( 開始編碼 );6、 Flash 控件的使用工具(T)-ActiveX Control Test Container- 彈出對話框File-Register Controls- 彈出對話框 找到 C:WINDOWSsystem32MacromedlashFlash10e.ocx ,打開 彈出MFC ClassWizard框里為 FLASH 的 ID 添加映射:選擇 IDC_SHOCKWA VEFLASH1、FSCommand、Ad

13、d Function,彈出Add Member Function選OK在MFC ClassWizard框里第2頁Member Variables,為FLASH的ID添加類,彈出提示對話框選擇確定, 我們定義類名字,為 m_flash ,基類為 CShockwaveFlash播放按鈕 代碼:為視圖資源里的 播放 按鈕消息響應(yīng)函數(shù)修改代碼void CTest0407Dlg:OnOK() / 對應(yīng) 播放 按鈕/ TODO: Add extra validation here/CDialog:OnOK();m_flash.LoadMovie(0,c:VCtu12.swf); / 播放 FLASH 文件

14、,路徑 C:VCtu12.swf m_flash.Play();7、為VC界面加載ssk皮膚到網(wǎng)上下載這三個文件 skinppwtl.dll , SkinPPWTL.h , SkinPPWTL.lib 放到工程下,我的百度網(wǎng)盤下載連接 (http://netdisk/singlepublic?fid=564282_89891 9684 )在界面的 .cpp 中添加頭文件 SkinPPWTL.h ,在 InitInstance() 中添加 skinppLoadSkin(skinxp_corona.ssk);/ 初始化皮膚xp_corona.ssk,按Alt+F7,選擇連

15、接,添加 SkinPPWTL.lib確認(rèn)即可。8、窗口菜單的使用在資源框中選中工程,右擊選擇 insert-menu 創(chuàng)建菜單,右擊窗口,選擇 properties-general-menu ; 為子菜單添加事件:右擊子菜單選擇 - MFC ClassWizard, 彈出一個對話框, -select a exist class- 選擇創(chuàng)建的類如 CMyDlg ;在 Message maps 中選擇對應(yīng)子菜單的 ID ,在 Messages 選擇 command-add function- 確定 -edit code 即可 二級菜單的使用:選擇一個子菜單右擊選擇 -properties-gene

16、ral-Pop-up 即可9、窗口添加右擊菜單按照上面的方法添加一個菜單, MFC ClassWizard 中 Messages 添加 WM_OnRButtonDown 事件,在 OnRButtonDown(UINT nFlags, CPoint point) 函數(shù)中添加代碼:void CMyDlg:OnRButtonDown(UINT nFlags, CPoint point)CMenu menu;menu.LoadMenu(IDR_MENU2);/ 載入剛才創(chuàng)建的菜單CMenu*pContextMenu=menu.GetSubMenu(0);CPoint point1;GetCursorP

17、os(&point1);/ 獲得鼠標(biāo)焦點 pContextMenu-TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point1.x,point1.y,this);/AfxG etMainWnd()CDialog:OnRButtonDblClk(nFlags, point);10、為靜態(tài)文本添加動態(tài)顯示時間在窗口拖入一個靜態(tài)框, ID 改為 IDC_time, 在 OnInitDialog() 中添加 SetTimer(1,1000,NULL); 在 MFC ClassWizard 中 Messages 添加 WM_TIMER 事件,在 OnTimer

18、(UINT nIDEvent) 函數(shù)中添加代碼: void CMyDlg:OnTimer(UINT nIDEvent)CString str;CTime t;t=CTime:GetCurrentTime();str.Format(%02d-%02d-%02d %02d:%02d:%02d,t.GetYear(),t.GetMonth(),t.GetDay(),t.GetHour(),t.GetMi nute(),t.GetSecond();GetDlgItem(IDC_time)-SetWindowText(str);CDialog:OnTimer(nIDEvent);11、狀態(tài)欄的使用1)

19、添加字符串在工作區(qū)中選擇 Resource View標(biāo)簽,轉(zhuǎn)到資源編輯窗口,雙擊String Table“ String Table”項條目打開打開串表資源的編輯器。選擇最下面的空白項并雙擊,或選擇某個串后按In sert”鍵,將彈出String Properties ”對話框。在ID”框中輸入串標(biāo)識符IDS_limin和IDS_TIME和值,在“ Caption ”框內(nèi)輸入標(biāo)題字符的內(nèi)容,串值為系統(tǒng)自 動設(shè)定。為 Dlg 類添加成員變量 CStatusBar m_Bar;在 Dlg 類中添加 static UINT indicators=IDS_limin,IDS_TIME;2) .在 Dl

20、g 類 OnInitDialg 中添加如下代碼/* 創(chuàng)建狀態(tài)欄 */m_StatusBar.Create(this);默認(rèn) ID/設(shè)置狀態(tài)欄m_bar.Create(this);在當(dāng)前窗口創(chuàng)建狀態(tài)欄m_bar.SetIndicators(indicators,2);/ 將狀態(tài)欄分成兩列 m_bar.SetPaneInfo(0,IDS_limin,SBPS_NORMAL,rect.Width()-150);m_bar.SetPaneInfo(1,IDS_TIME,SBPS_STRETCH,0);/* 顯示狀態(tài)欄 */RepositionBars(AFX_IDW_CONTROLBAR_FIRST,

21、AFX_IDW_CONTROLBAR_LAST,0);/ 顯示狀態(tài)欄/* 狀態(tài)欄隨對話框窗口大小而變化*/關(guān)于此方法請查閱 界面技巧 之 控件大小隨窗口而調(diào)整 m_Bar.SetOwner(this);m_Bar.SetResize(AFX_IDW_STATUS_BAR,PK_BOTTOM_LEFT,PK_BOTTOM_RIGHT);/AFX_IDW_STAT US_BAR 為狀態(tài)欄默認(rèn)的 ID 【思路總結(jié)】創(chuàng)建CStatusBar類變量;創(chuàng)建狀態(tài)欄create ;添加面板set In dicators ;設(shè)置面板寬度 SetPa nel nfo;設(shè)置面板文本 SetPaneText;顯示狀態(tài)

22、欄 RepositionBars ;狀態(tài)欄顯示時間:為 CMainFrame 類的 OnTimer() 函數(shù)添加如下代碼:語 句 “ tmCurr=CTime:GetCurrentTime(); ” 用 于 獲 取 系 統(tǒng) 當(dāng) 前 時 間 , 再 通 過 語 句 “ strTime= tmCurr.Format(%H:%M:%S); ”將時間格式化后賦給字符串 strTime 。最后通過狀態(tài)欄類 CStatusBar 成員函 數(shù) SetPaneText()將字符串 strTime 顯示到 ID_INDICATOR_TIME 所指示的窗格中。 m_bar.SetPaneText(1, strTi

23、me);12、改變VC對話框的顏色實現(xiàn) 新建一個基于 Dialog 的 MFC AppWizard 應(yīng)用程序 ExampleDlg 。 在 CExampleDlgApp :InitInstance() 中添加如下代碼:BOOL CExampleDlgApp: : InitInstance ( )CExampleDlgDlg dlg; m_pMainWnd = &dlg;/先于 DoModal() 調(diào)用,將對話框設(shè)置為藍(lán)色背景、紅色文本SetDialogBkColor(RGB(0,0,255),RGB(255,0,0);int nResponse = dlg.DoModal(); 編譯并運行,此

24、時對話框的背景色和文本色已發(fā)生了改變。值得注意的 是:在調(diào)用 DoModal() 之前必須先調(diào)用 SetDialogBkColor ,且此方法是將改變 應(yīng)用程序中所有的對話框顏色,并不能針對某一個指定的對話框。-方法二:重載 On Pa int(),即WM_PAINT消息。有關(guān)代碼如下(以上例工程為準(zhǔn)):void CExampleDlgDlg:OnPaint()if (IsIconic()elseCRect rect;CPaintDC dc(this);GetClientRect(rect); dc.FillSolidRect(rect,RGB(0,255,0); / 設(shè)置為綠色背景CDial

25、og:OnPaint(); 方法三:重載 OnCtlColor (CDC* pDC, CWnd* pWnd, UINT nCtlColor) ,即 WM_CTLCOLOR 消息。具體步驟如下(以上例工程為準(zhǔn)) : 在 CExampleDlgDlg 的頭文件中,添加一 CBrush 的成員變量:class CExampleDlgDlg : public CDialogprotected:CBrush m_brush; 在 OnInitDialog() 函數(shù)中添加如下代碼:BOOL CExampleDlgDlg:OnInitDialog()/ TODO: Add extra initializat

26、ion herem_brush.CreateSolidBrush(RGB(0, 255, 0); / 生成一綠色刷子-利用 ClassWizard 重載 OnCtlColor(),即 WM_CTLCOLOR 消息:HBRUSH CExampleDlgDlg:OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)/* 這里不必編寫任何代碼!* 下行代碼要注釋掉* HBRUSH hbr = CDialog:OnCtlColor(pDC, pWnd, nCtlColor);*/return m_brush; / 返加綠色刷子 方法四:還是重載 OnCtlCo

27、lor (CDC* pDC, CWnd* pWnd, UINT nCtlColor) ,即 WM_CTLCOLOR 消息。具體步驟如下(以上例工程為準(zhǔn)) :-步驟、同上方法三中的步驟、。 步驟利用 ClassWizard 重載 OnCtlColor( )(即 WM_CTLCOLOR 消息)時則有 些不同:HBRUSH CExampleDlgDlg:OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)HBRUSH hbr = CDialog:OnCtlColor(pDC, pWnd, nCtlColor);/在這加一條是否為對話框的判斷語句if(nCt

28、lColor =CTLCOLOR_DLG)return m_brush; / 返加綠色刷子return hbr;13、為MFC對話框添加背景圖片先在資源框中加載一張 bmp 的位圖,在 OnPaint() 函數(shù)中添加代碼void CMyView:OnPaint()CPaintDC dc(this); / device context for paintingCRect rect;GetClientRect(&rect);CDC dcMem;dcMem.CreateCompatibleDC(&dc);CBitmap bmpBackground;bmpBackground.LoadBitmap(I

29、DB_pic1);/ 選擇的背景圖片的 IDBITMAP bitmap;bmpBackground.GetBitmap(&bitmap);CBitmap *pbmpOld=dcMem.SelectObject(&bmpBackground);dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);/ Do not call CRecordView:OnPaint() for painting messages14 、進度條的使用(一)進度條的主要功能進度條控制

30、( Progress Control )主要用來進行數(shù)據(jù)讀寫、文件拷貝和磁盤格式等操作時的工作進度提 示情況,如安裝程序等,伴隨工作進度的進展,進度條的矩形區(qū)域從左到右利用當(dāng)前活動窗口標(biāo)題條的顏 色來不斷填充。進度條控制在 MFC 類庫中的封裝類為 CProgressCtrl ,通常僅作為輸出類控制,所以其操作主要是設(shè) 置進度條的范圍和當(dāng)前位置,并不斷地更新當(dāng)前位置。進度條的范圍用來表示整個操作過程的時間長度, 當(dāng)前位置表示完成情況的當(dāng)前時刻。SetRange()函數(shù)用來設(shè)置范圍,初始范圍為0-100 , SetPos()函數(shù)用來設(shè)置當(dāng)前位置,初始值為0, SetStep()函數(shù)用來設(shè)置步長,

31、初始步長為10,Steplt()函數(shù)用來按照當(dāng)前步長更新位置,OfsetPos()函數(shù)用來直接將當(dāng)前位置移動一段距離。如果范圍或位置發(fā)生變化,那么進度條將 自動重繪進度區(qū)域來及時反映當(dāng)前工作的進展情況。進度條的對象結(jié)構(gòu)進度條控制的建立方法CProgressCtrl &ProgressCtrl 建立進度條控制對象結(jié)構(gòu)Create 建立進度條控制對象并綁定對象進度條控制類 CprogressCtrl:Create 的調(diào)用格式如下:BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UlNT nlD);其中參數(shù)dwStyle

32、用來確定進度條控制的控制風(fēng)格;參數(shù)rect用來確定進度條控制的大小和位置;參數(shù) pParentWnd 用來確定進度條父窗口指針;參數(shù) nlD 用來確定進度條控制的控制符 lD 值。2、進度條控制的類屬性進度條控制的類屬性包括設(shè)置進度條最大最小控制范圍SetRange、設(shè)置進度條當(dāng)前位置 SetPos、設(shè)置進度條當(dāng)前位置偏移值 OffsetPos 和設(shè)置進度條控制增量值SetStep。3、進度條控制的操作方法 進度條控制的操作方法主要是使進度條控制并重繪進度條的 StepIt 函數(shù)。 進度條控制的應(yīng)用技巧示例1、利用應(yīng)用程序向?qū)?AppWizard 生成基于對象框的應(yīng)用程序 CProgDlg ;

33、2、在對話框中設(shè)置進度條和靜態(tài)文本控制,其 ID 分別為 IDC_PROG 和 IDCPERCENT ; 在對話框初始代碼中增加控制的范圍和位置:在 ProgDlg.h 中設(shè)置兩個數(shù)據(jù)成員,用來表示進度條的最大值和步長:/ProgDlg.hclass CProgDlg:public Cdialog /其它代碼public:int m_nMax,m_nStep; /其它代碼(2)在 ProgDlg.cpp 中設(shè)置初始狀態(tài)BOOL CProgDlg:OnInitDialog() Cdialog:OnInitDialog();/其它代碼/TODO:Add extra initialization h

34、ereCProgressCtrl *pProgCtrl=(CProgressCtrl*)GetDlgItem(IDC_PROG);pProgCtrl-SetRange(0,200);/ 設(shè)置進度條范圍/其它代碼 m_nMax=200;m_nStep=10;SetTimer(1,1000,NULL);/ 設(shè)置進度條更新時鐘return TRUE;m_progress.SendMessage(PBM_SETBKCOLOR, 0, RGB(rand()%255,rand()%255,rand()%255);/ 設(shè)置進度條 的顏色(3) 完善 WM_TIMER 消息處理,使進度條按照當(dāng)前步長進行更新,

35、同時完成進度條的百分比顯示:void CProgDlg:OnTimer(UINT nIDEvent) /TODO:Add your message handler?CProgressCtrl *pProgCtrl=(CProgressCtrl*)GetDlgItem(IDC_PROG);int nPrePos=pProgCtrl-StepIt();/ 取得更新前位置char test10;int nPercent=(int)(nPrePos+m_nStep)/m_nMax*100+0.5); wsprintf(test,?%d%?,nPercent);GetDlgItem(IDC_PERCEN

36、T)-SetWindowText(text);Cdialog:OnTimer(nIDEvent);15、下拉列表框CComboBo的使用將 Combo Box 拖入窗口,在 MFC ClassWizard 中 Member Varibles 添加變量 m_combo, 在 OnInitDialog() 中 添加 m_combo.SetCurSel(0); 使其顯示第一個數(shù)據(jù); 往列表中添加數(shù)據(jù):1) 選擇 properties-Data 輸入一個數(shù)據(jù),按 Ctrl+Enter 換行繼續(xù)添加下移個數(shù)據(jù);2) 在代碼中動態(tài)添加, (CComboBox*)GetDlgItem(IDC_COMBO)-

37、InsertString(i,str); 獲取列表選中的數(shù)據(jù)所在位置: int in=m_combo.GetCurSel();16、使用 Vc 讀取數(shù)據(jù)庫中的數(shù)據(jù)實現(xiàn)CDatabase 對象表示到數(shù)據(jù)源的連接, 通過它可以操作數(shù)據(jù)源。 數(shù)據(jù)源是位于一些數(shù)據(jù)庫管理系統(tǒng)(DBMS)的數(shù)據(jù)的指定實例,包括MicrosoftSQLServer, MicrosoftAccess , BorlanddBASE和 XBASE 在應(yīng)用中可以同時使一個或多個CDatabase對象活動。如果在處理數(shù)據(jù)訪問對象(DAO)類而不是開放數(shù)據(jù)庫連接(ODBC)類,可使用類CDaoDatabaseo為使用CDatabase

38、,構(gòu)造一個CDatabase對象并調(diào)用它的 OpenEx成員函數(shù)。這打開了一個連接。在接著構(gòu)造 CRecordset對象以操縱連接的數(shù)據(jù)源時,向CDatabase對象傳遞記錄集構(gòu)造程序指針。完成使用連接時調(diào)用Close成員函數(shù)并銷毀 CDatabase對象。Close關(guān)閉以前沒有關(guān)閉的任何記錄集。#include1. 建立連接:要建立與數(shù)據(jù)源的連接,首先應(yīng)構(gòu)造一個CDatabase對象,然后再調(diào)用 CDatabase的Open成員函數(shù) Open 函數(shù)負(fù)責(zé)建立連接,其聲明為:virtual BOOL Open( LPCTSTRlpszDSN, BOOL bExclusive = FALSE,BO

39、OL bReadOnly = FALSE,LPCTSTR lpszConnect = ODBC; , BOOL bUseCursorLib = TRUE ); throw( CDBException, CMemoryException );說明:1) 參數(shù)lpszDSN指定了數(shù)據(jù)源名(構(gòu)造數(shù)據(jù)源的方法將在后面介紹) ,在lpszConnect參數(shù)中 也可包括數(shù)據(jù)源名,此時 lpszDSN必需為NULL,若在函數(shù)中未提供數(shù)據(jù)源名且使 lpszDSN為NULL,則 會顯示一個數(shù)據(jù)源對話框,用戶可以在該對話框中選擇一個數(shù)據(jù)源。2) 參數(shù)bExclusive說明是否獨占數(shù)據(jù)源,由于目前版本的類庫還不支

40、持獨占方式,故該參數(shù)的值應(yīng)該是FALSE這說明數(shù)據(jù)源是被共享的。3) 參數(shù)bReadOnly若為TRUE則對數(shù)據(jù)源的連接是只讀的。4) 參數(shù)lpszConnect指定了一個連接字符串,連接字符串中可以包括數(shù)據(jù)源名、用戶帳號(ID)和口令等信息,字符串中的“ODBC表示要連接到一個 ODBC數(shù)據(jù)源上。5) 參數(shù)bUseCursorLib若為TRUE,則會裝載光標(biāo)庫,否則不裝載,快照需要光標(biāo)庫,動態(tài)集 不需要光標(biāo)庫。6) 若連接成功,函數(shù)返回TRUE,若返回FALSE則說明用戶在數(shù)據(jù)源對話框中按了Cancel按鈕。若函數(shù)內(nèi)部出現(xiàn)錯誤,則框架會產(chǎn)生一個異常。例子:1) CDatabase m_db;

41、 /在文檔類中嵌入一個 CDatabase對象2) / 連接到一個名為 Student Registration 的數(shù)據(jù)源m_db.Open(Student Registration);3) /在連接數(shù)據(jù)源的同時指定了用戶帳號和口令m_db.Open(NULL,FALSE,FALSE,ODBC;DSN=Student Registration;UID=ZYF;PWD=1234);4) m_db.Open(NULL); / 將彈出一個數(shù)據(jù)源對話框2. 要從一個數(shù)據(jù)源中脫離,可調(diào)用函數(shù)Close。在脫離后,可以再次調(diào)用 Open函數(shù)來建立一個新的連接。3. 調(diào)用IsOpen可判斷當(dāng)前是否有一個連接

42、。4. 調(diào)用 GetConnect 可返回當(dāng)前的連接字符串。5. 相關(guān)函數(shù)聲明:virtual void Close( );BOOL IsOpe n( ) con st; /返回TRUE則表明當(dāng)前有一個連接 const CString& GetConnect( ) const;6. CDatabase的析構(gòu)函數(shù)會調(diào)用Close,所以只要刪除了CDatabase對象就可以與數(shù)據(jù)源脫離。代碼實現(xiàn):CDatabase database;/ 定義數(shù)據(jù)對象database.Open(liminlist,FALSE,FALSE,ODBC;,FALSE)打開 ODBC數(shù)據(jù)源 CRecordset set(&

43、database);CString str1,str2,str3,str4,str5,str6,str7,str8,str9,str10,str11;str.Format(select * from 聯(lián)系人 );if(set.IsOpen()/ 判斷數(shù)據(jù)源是否打開set.Close(); set.Open(CRecordset:dynaset,str);while(!setsEOF()循環(huán)讀取數(shù)據(jù)到表格m_list.InsertItem(i,);si.Format(%d,i+1); m_list.SetItemText(i,0,si);set.GetFieldValue(bianhao,str

44、1); m_list.SetItemText(i,1,str1);set.GetFieldValue(sname,str2); m_list.SetItemText(i,2,str2);set.MoveNext();i+;set.Close();/ 關(guān)閉數(shù)據(jù)17、VC下刪除、復(fù)制和移動文件實現(xiàn)bool DeleteFile(char * lpszPath)SHFILEOPSTRUCT FileOp=0;FileOp.fFlags = FOF_ALLOWUNDO |/ 允許放回回收站FOF_NOCONFIRMATION; /不/ 出現(xiàn)確認(rèn)對話框FileOp.pFrom = lpszPath;Fi

45、leOp.pTo = NULL;/ 一定要是 NULL FileOp.wFunc = FO_DELETE;/ 刪除操作return SHFileOperation(&FileOp) = 0;/ 復(fù)制文件或文件夾bool CopyFile(char *pTo,char *pFrom) SHFILEOPSTRUCT FileOp=0;FileOp.fFlags = FOF_NOCONFIRMATION| / 不出現(xiàn)確認(rèn)對話框FOF_NOCONFIRMMKDIR ; /需要時直接創(chuàng)建一個文件夾 ,不需用戶確定FileOp.pFrom = pFrom; FileOp.pTo = pTo;FileOp.

46、wFunc = FO_COPY; return SHFileOperation(&FileOp) = 0; / 移動文件或文件夾 bool MoveFile(char *pTo,char *pFrom) SHFILEOPSTRUCT FileOp=0;FileOp.fFlags = FOF_NOCONFIRMATION| / 不出現(xiàn)確認(rèn)對話框FOF_NOCONFIRMMKDIR ; /需要時直接創(chuàng)建一個文件夾 ,不需用戶確定 FileOp.pFrom = pFrom;FileOp.pTo = pTo; FileOp.wFunc = FO_MOVE;return SHFileOperation(

47、&FileOp) = 0;/ 從命名文件或文件夾 bool ReNameFile(char *pTo,char *pFrom) SHFILEOPSTRUCT FileOp=0; FileOp.fFlags = FOF_NOCONFIRMATION;/ 不出現(xiàn)確認(rèn)對話框 FileOp.pFrom = pFrom; FileOp.pTo = pTo; FileOp.wFunc = FO_RENAME; return SHFileOperation(&FileOp) = 0;應(yīng)用舉例 : DeleteFile(d:PID00);/ 刪除一個文件夾 DeleteFile(d:PID.dsp0d:PID

48、.dsw00); / 刪除多個文件臨時程序 00);/ 把臨時程序 文件夾放到 d 盤下面臨 時程 序 臨時 程序 PID.dsw0); / 把 PID.dsp和PID.dsw倆個文件放到 d盤下面把PID文件夾從命名為 NewName注意:,如果你想把臨時程序00的文件夾復(fù)制到 D盤下,并從命名為NewName,應(yīng)該這臨時程序 *.*00); / 把 臨時程序 文件夾復(fù)制到 d 盤下并從命名為 NewName下面這個類方便你復(fù)制多個文件或文件夾,僅作參考/ 連接多個路徑的類class JOINFILEPATHprivate:int pos;char* MultipleFilePath;pub

49、lic:JOINFILEPATH()pos=0;MultipleFilePath=new charMAX_PATH*10;memset(MultipleFilePath,0,MAX_PATH*10);JOINFILEPATH() delete MultipleFilePath; void join(char *FilePath)while(*FilePath!=0)MultipleFilePathpos+=*FilePath+;pos+;char * GetMultipleFilePath() return MultipleFilePath;/ 應(yīng)用舉例 :JOINFILEPATH FilePath;臨時程序 PIDPID.dsp);臨時程序 PIDPID.dsw);CopyFile(d:00,FilePath.GetMultipleFilePath();1 pFrom和pTo最好以00結(jié)尾(把存放路徑的字符串初始化為0),不然有可能會出錯,中間的每一個路徑用 0 隔開2 pFrom所指向的文件或文件夾

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論