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

下載本文檔

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

文檔簡(jiǎn)介

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

2、、VC下刪除、復(fù)制和移動(dòng)文件實(shí)現(xiàn) 1218、VC與MFC組合鍵的使用 1519、VC中線(xiàn)程的使用 1620、MFC實(shí)現(xiàn)打開(kāi)和連接一個(gè)文件、一個(gè)程序、一個(gè)網(wǎng)頁(yè) 1721、VC中常用文件操作 1722、MFC中畫(huà)直線(xiàn)和曲線(xiàn) 1823、將十進(jìn)制數(shù)轉(zhuǎn)化為指定長(zhǎng)度的二進(jìn)制數(shù) 2024、實(shí)現(xiàn)VC程序打包201、 表格控件的使用 CListCtrl將表格控件托到窗口后,將properies中style中的view改為report,在classwizard中的 menber variables添加對(duì)應(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)格序號(hào) ),LVCFMT_IMAGE|LVCFMT_LEFT);/設(shè)置列名信源符號(hào) );/ 設(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)框?yàn)橥该餍Ч篐BRUSH CloginDlg:OnCtlColor(CD

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

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

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

8、);HBITMAP hBitmap=(HBITMAP)Bitmap.Detach();CButton *pButton=(CButton*)GetDlgItem(IDCANCEL); pButton-SetBitmap(hBitmap); 感覺(jué)效果不是很好。因?yàn)閳D片不會(huì)自動(dòng)拉伸。第二種:可以采用 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); /是否得到焦點(diǎn)if(lpDrawItemStruct-itemState & ODS_FOCUS)/畫(huà)虛框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: 平時(shí); IDB_BITMAP2 :按下 m_button.SubclassDlgItem(IDC_BUTTON1

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

13、d Function,彈出Add Member Function選OK在MFC ClassWizard框里第2頁(yè)Member Variables,為FLASH的ID添加類(lèi),彈出提示對(duì)話(huà)框選擇確定, 我們定義類(lèi)名字,為 m_flash ,基類(lèi)為 CShockwaveFlash播放按鈕 代碼:為視圖資源里的 播放 按鈕消息響應(yīng)函數(shù)修改代碼void CTest0407Dlg:OnOK() / 對(duì)應(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)上下載這三個(gè)文件 skinppwtl.dll , SkinPPWTL.h , SkinPPWTL.lib 放到工程下,我的百度網(wǎng)盤(pán)下載連接 (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, 彈出一個(gè)對(duì)話(huà)框, -select a exist class- 選擇創(chuàng)建的類(lèi)如 CMyDlg ;在 Message maps 中選擇對(duì)應(yīng)子菜單的 ID ,在 Messages 選擇 command-add function- 確定 -edit code 即可 二級(jí)菜單的使用:選擇一個(gè)子菜單右擊選擇 -properties-gene

16、ral-Pop-up 即可9、窗口添加右擊菜單按照上面的方法添加一個(gè)菜單, 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)焦點(diǎn) pContextMenu-TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point1.x,point1.y,this);/AfxG etMainWnd()CDialog:OnRButtonDblClk(nFlags, point);10、為靜態(tài)文本添加動(dòng)態(tài)顯示時(shí)間在窗口拖入一個(gè)靜態(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”項(xiàng)條目打開(kāi)打開(kāi)串表資源的編輯器。選擇最下面的空白項(xiàng)并雙擊,或選擇某個(gè)串后按In sert”鍵,將彈出String Properties ”對(duì)話(huà)框。在ID”框中輸入串標(biāo)識(shí)符IDS_limin和IDS_TIME和值,在“ Caption ”框內(nèi)輸入標(biāo)題字符的內(nèi)容,串值為系統(tǒng)自 動(dòng)設(shè)定。為 Dlg 類(lèi)添加成員變量 CStatusBar m_Bar;在 Dlg 類(lèi)中添加 static UINT indicators=IDS_limin,IDS_TIME;2) .在 Dl

20、g 類(lèi) 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)欄隨對(duì)話(huà)框窗口大小而變化*/關(guān)于此方法請(qǐng)查閱 界面技巧 之 控件大小隨窗口而調(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類(lèi)變量;創(chuàng)建狀態(tài)欄create ;添加面板set In dicators ;設(shè)置面板寬度 SetPa nel nfo;設(shè)置面板文本 SetPaneText;顯示狀態(tài)

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

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

24、時(shí)對(duì)話(huà)框的背景色和文本色已發(fā)生了改變。值得注意的 是:在調(diào)用 DoModal() 之前必須先調(diào)用 SetDialogBkColor ,且此方法是將改變 應(yīng)用程序中所有的對(duì)話(huà)框顏色,并不能針對(duì)某一個(gè)指定的對(duì)話(huà)框。-方法二:重載 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)/* 這里不必編寫(xiě)任何代碼!* 下行代碼要注釋掉* 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 消息)時(shí)則有 些不同:HBRUSH CExampleDlgDlg:OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)HBRUSH hbr = CDialog:OnCtlColor(pDC, pWnd, nCtlColor);/在這加一條是否為對(duì)話(huà)框的判斷語(yǔ)句if(nCt

28、lColor =CTLCOLOR_DLG)return m_brush; / 返加綠色刷子return hbr;13、為MFC對(duì)話(huà)框添加背景圖片先在資源框中加載一張 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 、進(jìn)度條的使用(一)進(jìn)度條的主要功能進(jìn)度條控制

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

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

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

33、2、在對(duì)話(huà)框中設(shè)置進(jìn)度條和靜態(tài)文本控制,其 ID 分別為 IDC_PROG 和 IDCPERCENT ; 在對(duì)話(huà)框初始代碼中增加控制的范圍和位置:在 ProgDlg.h 中設(shè)置兩個(gè)數(shù)據(jù)成員,用來(lái)表示進(jìn)度條的最大值和步長(zhǎng):/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è)置進(jìn)度條范圍/其它代碼 m_nMax=200;m_nStep=10;SetTimer(1,1000,NULL);/ 設(shè)置進(jìn)度條更新時(shí)鐘return TRUE;m_progress.SendMessage(PBM_SETBKCOLOR, 0, RGB(rand()%255,rand()%255,rand()%255);/ 設(shè)置進(jìn)度條 的顏色(3) 完善 WM_TIMER 消息處理,使進(jìn)度條按照當(dāng)前步長(zhǎng)進(jìn)行更新,

35、同時(shí)完成進(jìn)度條的百分比顯示: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); 使其顯示第一個(gè)數(shù)據(jù); 往列表中添加數(shù)據(jù):1) 選擇 properties-Data 輸入一個(gè)數(shù)據(jù),按 Ctrl+Enter 換行繼續(xù)添加下移個(gè)數(shù)據(jù);2) 在代碼中動(dòng)態(tài)添加, (CComboBox*)GetDlgItem(IDC_COMBO)-

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

38、,構(gòu)造一個(gè)CDatabase對(duì)象并調(diào)用它的 OpenEx成員函數(shù)。這打開(kāi)了一個(gè)連接。在接著構(gòu)造 CRecordset對(duì)象以操縱連接的數(shù)據(jù)源時(shí),向CDatabase對(duì)象傳遞記錄集構(gòu)造程序指針。完成使用連接時(shí)調(diào)用Close成員函數(shù)并銷(xiāo)毀 CDatabase對(duì)象。Close關(guān)閉以前沒(méi)有關(guān)閉的任何記錄集。#include1. 建立連接:要建立與數(shù)據(jù)源的連接,首先應(yīng)構(gòu)造一個(gè)CDatabase對(duì)象,然后再調(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 );說(shuō)明:1) 參數(shù)lpszDSN指定了數(shù)據(jù)源名(構(gòu)造數(shù)據(jù)源的方法將在后面介紹) ,在lpszConnect參數(shù)中 也可包括數(shù)據(jù)源名,此時(shí) lpszDSN必需為NULL,若在函數(shù)中未提供數(shù)據(jù)源名且使 lpszDSN為NULL,則 會(huì)顯示一個(gè)數(shù)據(jù)源對(duì)話(huà)框,用戶(hù)可以在該對(duì)話(huà)框中選擇一個(gè)數(shù)據(jù)源。2) 參數(shù)bExclusive說(shuō)明是否獨(dú)占數(shù)據(jù)源,由于目前版本的類(lèi)庫(kù)還不支

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

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

42、。4. 調(diào)用 GetConnect 可返回當(dāng)前的連接字符串。5. 相關(guān)函數(shù)聲明:virtual void Close( );BOOL IsOpe n( ) con st; /返回TRUE則表明當(dāng)前有一個(gè)連接 const CString& GetConnect( ) const;6. CDatabase的析構(gòu)函數(shù)會(huì)調(diào)用Close,所以只要?jiǎng)h除了CDatabase對(duì)象就可以與數(shù)據(jù)源脫離。代碼實(shí)現(xiàn):CDatabase database;/ 定義數(shù)據(jù)對(duì)象database.Open(liminlist,FALSE,FALSE,ODBC;,FALSE)打開(kāi) 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ù)源是否打開(kāi)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ù)制和移動(dòng)文件實(shí)現(xiàn)bool DeleteFile(char * lpszPath)SHFILEOPSTRUCT FileOp=0;FileOp.fFlags = FOF_ALLOWUNDO |/ 允許放回回收站FOF_NOCONFIRMATION; /不/ 出現(xiàn)確認(rèn)對(duì)話(huà)框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)對(duì)話(huà)框FOF_NOCONFIRMMKDIR ; /需要時(shí)直接創(chuàng)建一個(gè)文件夾 ,不需用戶(hù)確定FileOp.pFrom = pFrom; FileOp.pTo = pTo;FileOp.

46、wFunc = FO_COPY; return SHFileOperation(&FileOp) = 0; / 移動(dòng)文件或文件夾 bool MoveFile(char *pTo,char *pFrom) SHFILEOPSTRUCT FileOp=0;FileOp.fFlags = FOF_NOCONFIRMATION| / 不出現(xiàn)確認(rèn)對(duì)話(huà)框FOF_NOCONFIRMMKDIR ; /需要時(shí)直接創(chuàng)建一個(gè)文件夾 ,不需用戶(hù)確定 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)對(duì)話(huà)框 FileOp.pFrom = pFrom; FileOp.pTo = pTo; FileOp.wFunc = FO_RENAME; return SHFileOperation(&FileOp) = 0;應(yīng)用舉例 : DeleteFile(d:PID00);/ 刪除一個(gè)文件夾 DeleteFile(d:PID.dsp0d:PID

48、.dsw00); / 刪除多個(gè)文件臨時(shí)程序 00);/ 把臨時(shí)程序 文件夾放到 d 盤(pán)下面臨 時(shí)程 序 臨時(shí) 程序 PID.dsw0); / 把 PID.dsp和PID.dsw倆個(gè)文件放到 d盤(pán)下面把PID文件夾從命名為 NewName注意:,如果你想把臨時(shí)程序00的文件夾復(fù)制到 D盤(pán)下,并從命名為NewName,應(yīng)該這臨時(shí)程序 *.*00); / 把 臨時(shí)程序 文件夾復(fù)制到 d 盤(pán)下并從命名為 NewName下面這個(gè)類(lèi)方便你復(fù)制多個(gè)文件或文件夾,僅作參考/ 連接多個(gè)路徑的類(lèi)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;臨時(shí)程序 PIDPID.dsp);臨時(shí)程序 PIDPID.dsw);CopyFile(d:00,FilePath.GetMultipleFilePath();1 pFrom和pTo最好以00結(jié)尾(把存放路徑的字符串初始化為0),不然有可能會(huì)出錯(cuò),中間的每一個(gè)路徑用 0 隔開(kāi)2 pFrom所指向的文件或文件夾

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論