日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

VC小技巧汇总之对话框技巧

發(fā)布時間:2025/3/12 c/c++ 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 VC小技巧汇总之对话框技巧 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

這篇文章主要介紹了VC小技巧匯總之對話框技巧,非常實用!對于進行VC開發(fā)有一定的參考借鑒價值,需要的朋友可以參考下

本文搜集匯總了VC中關(guān)于對話框常用的一些技巧,對于進行VC開發(fā)由于一定的參考借鑒價值。

1.如何修改對話框的背景色:

在對話框的OnPaint()函數(shù)中加入下面語句:

1 2 3 CRect rect; GetClientRect(&rect);?? //計算對話框的尺寸 dc.FillSolidRect(&rect,RGB(192,248,202));? //繪制對話框背景色

?

3.如何讓打開文件對話框能進行多項選擇:

在定制打開文件對話框時,增加OFN_ALLOWMULTISELECT屬性,就可以使打開文件對話框進行多選了。
如:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 CFileDialog m_Dlg( TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT ????| OFN_ALLOWMULTISELECT, NULL, NULL ); 之后,用GetStartPosition()函數(shù)獲取選擇的起始文件位置,用GetNextPathName()函數(shù)獲取各位置上的文件名。 如: if( m_Dlg.DoModal() == IDOK ) { ???POSITION pos; ???pos = m_Dlg.GetStartPosition(); ???while( pos ) ???{ ?????m_Path = m_Dlg.GetNextPathName(pos); ?????………… ???} }

4.為什么用打開文件對話框選擇多個文件到一定數(shù)目時,文件沒有打開?

CFileDialog為文件列表設(shè)置有緩沖區(qū),當(dāng)選擇文件過多時,會造成緩沖區(qū)溢出,造成一些文件沒有被打開。可以采用自定義大緩沖區(qū)代替系統(tǒng)緩沖區(qū)的方法解決。
如:

?
1 2 3 4 5 6 7 8 CFileDialog m_Dlg( TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT ????| OFN_ALLOWMULTISELECT, NULL, NULL );//定制打開文件對話框 char* pBuf = new char[20480];??? //申請緩沖區(qū) m_Dlg.m_ofn.nMaxFile = 20480;??? //讓pBuf代替CFileDialog緩沖區(qū) m_Dlg.m_ofn.lpstrFile = pBuf; m_Dlg.m_ofn.lpstrFile[0] = NULL; ………… delete []pBuf;??? //回收緩沖區(qū)

5.提示對話框(MessageBox)

在視類和對話框類中可使用MFC函數(shù)中用的MessageBox()函數(shù)彈出提示對話框。這個函數(shù)原型為:

?
1 int MessageBox(LPCTSTR lpszText,LPCTSTR lpsCaption=NULL,UINT nType=MB_OK);

參數(shù):
lpszText 顯示的字符串
lpsCaption 對話框的標(biāo)題
nType 風(fēng)格,可為如下值的組合:
指定下列標(biāo)志中的一個來顯示消息框中的按鈕,標(biāo)志的含義如下。
MB_ABORTRETRYIGNORE:消息框含有三個按鈕:Abort,Retry和Ignore。
MB_OK:消息框含有一個按鈕:OK。這是缺省值。
MB_OKCANCEL:消息框含有兩個按鈕:OK和Cancel。
MB_RETRYCANCEL:消息框含有兩個按鈕:Retry和Cancel。
MB_YESNO:消息框含有兩個按鈕:Yes和No。
MB_YESNOCANCEL:消息框含有三個按鈕:Yes,No和Cancel。
指定下列標(biāo)志中的一個來顯示消息框中的圖標(biāo):標(biāo)志的含義如下。
MB_ICONEXCLAMATION:
MB_ICONWARNING:一個驚嘆號出現(xiàn)在消息框。
MB_ICONINFORMATION:
MB_ICONASTERISK:一個圓圈中小寫字母i組成的圖標(biāo)出現(xiàn)在消息框。
MB_ICONOUESTION:一個問題標(biāo)記圖標(biāo)出現(xiàn)在消息框。
MB_ICONSTOP:
MB_ICONERROR:
MB_ICONHAND:一個停止消息圖標(biāo)出現(xiàn)在消息框。

指定下列標(biāo)志中的一個來指定缺省的按鈕:標(biāo)志的含義如下。

MB_DEFBUTTON1:第一個按鈕為缺省按鈕。如果MB_DEFBUTTON2,MB_DEFBUTTON3,MB_DEFBUTTON4沒有被指定,則MB_DEFBUTTON1為缺省值。
MB_DEFBUTTON2;第二個按鈕為缺省按鈕。
MB_DEFBUTTON3:第三個按鈕為缺省按鈕。
MB_DEFBUTTON4:第四個按鈕為缺省按鈕。

例:提示文件是否存盤:

?
1 2 3 4 5 6 int t; t=MessageBox(m_PathName+"的文字已經(jīng)改變,要存盤嗎?","警告",MB_YESNOCANCEL | MB_ICONWARNING); if(t==0 || t==IDCANCEL) ??return; if(t==IDYES) ??OnFileSave();

在文檔類等其它類中不能使用MFC中的MessageBox()函數(shù),只能使用API函數(shù)中的MessageBox()函數(shù):

?
1 int MessageBox(HWND hWnd,LPCTSTR lpszText,LPCTSTR lpCaption,UINT UType);

hWnd:標(biāo)識將被創(chuàng)建的消息框的擁有窗口。如果此參數(shù)為NULL,則消息框沒有擁有窗口。
后三個參數(shù)與視類的MessageBox相同,但沒有缺省值,必須設(shè)置。
例:

?

本文搜集匯總VC的5則小技巧,非常實用,對于VC程序設(shè)計有很好的參考借鑒價值,詳情如下:

1.如何獲取程序所在的路徑

也就是獲取你這個程序本身所在的路徑。
在應(yīng)用程序類CxxApp的頭文件中定義一個變量CString m_exePath;用來放置程序的路徑名,在應(yīng)用程序類CxxApp的InitInstance()函數(shù)中加入如下語句:

?
1 2 3 4 5 6 7 8 9 10 11 TCHAR m_Path[MAX_PATH]; GetModuleFileName( NULL, m_Path, MAX_PATH ); //獲取程序路徑(包括程序名) int i = 0, j; while( m_Path[i]!=0 ) { ??if( m_Path[i]=='\' ) ????j = i; ??i++; } m_Path[j+1] = ''; m_exePath.Format( "%s", m_Path );? //分離路徑名(去掉程序名)

這段程序執(zhí)行后,字符串變量m_exePath中放置的就是程序所在路徑,其中不包括程序名。
獲取程序的位置有什么用呢?

(1)打開與應(yīng)用程序在一起放置的數(shù)據(jù)文件:
如果你運行程序過程中使用過打開文件對話框打開過其它路徑下的文件,這時系統(tǒng)的默認路徑就發(fā)生了改變,有可能使你原定的數(shù)據(jù)文件打不開了,如果采用以下方法就可以沒問題了:

?
1 2 CFile file; file.Open( m_exePath+"數(shù)據(jù)文件名", CFile::modeRead );

(2)放置程序運行中的臨時文件:
同樣,當(dāng)系統(tǒng)的默認路徑發(fā)生改變后,程序中生成的臨時文件就會放得到處都是,成了一個個垃圾文件,采用以下方法可使臨時文件只放在程序所在路徑下:

?
1 2 3 CFile file; file.Open( m_exePath+"臨時文件名", CFile::modeCreate | CFile::modeWrite ); ……

程序結(jié)束時,用下面的方法刪除臨時文件:

?
1 CFile::Remove( m_exePath+"臨時文件名" );

2.如何在你的程序中執(zhí)行其它程序

在自己的程序中調(diào)用其它程序的方法有好幾種,這里我介紹我用過的兩種:
(1)WinExec()函數(shù):
一般用法:

?
1 WinExec(m_PathName,SW_SHOWNORMAL);

m_PathName為執(zhí)行程序的路徑名,必須為可執(zhí)行文件。
如:

?
1 WinExec("C:\Program Files\Internet Explorer\iexplore.exe",SW_SHOWNORMAL);//為打開IE瀏覽器

(2)ShellExecute()函數(shù):
一般用法:

?
1 ShellExecute(NULL,NULL,m_PathName,NULL,_T("c:\temp"),SW_SHOWNORMAL);

m_PathName為打開的程序路徑名;
_T("c:\temp")為工作目錄;
與WinExec()不同的是ShellExecute()函數(shù)也可以打開非可執(zhí)行文件,比如你指定的文件為.txt,結(jié)果會打開記事本裝入該文件。我用這種方法調(diào)用自己制作的幫助文件(.chm)效果很好。

3.如果不使用串行化,如何在程序結(jié)束時保存文件?

在文檔-視圖結(jié)構(gòu)中,用串行化自動保存文件在各種VC書上都有介紹?,F(xiàn)在的問題是我不使用串行化,而是自己動手保存,當(dāng)點擊窗口的關(guān)閉按鈕時,如何提示并保存文檔。
用ClassWizard在文檔類(CxxDoc)中添加函數(shù)CanCloseFrame(),再在其中加入保存文件的語句就可以了。
例:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 //退出程序 BOOL CEditDoc::CanCloseFrame(CFrameWnd* pFrame)? { ??CFile file; ??if(b_Flag)? //b_Flag為文檔修改標(biāo)志,在修改文檔時將其置為True ??{ ????int t; ????t=::MessageBox(NULL,"文字已經(jīng)改變,要存盤嗎?","警告", ??????MB_YESNOCANCEL | MB_ICONWARNING);? //彈出提示對話框 ????if(t==0 || t==IDCANCEL) ??????return false; ????if(t==IDYES) ????{ ??????CString sFilter="Text File(*.txt)|*.txt||"; ??????CFileDialog m_Dlg(FALSE,"txt",NULL,OFN_HIDEREADONLY |???????? OFN_OVERWRITEPROMPT,(LPCTSTR)sFilter,NULL); //定制文件對話框 ??????int k=m_Dlg.DoModal(); //彈出文件對話框 ??????if(k==IDCANCEL || k==0) ????????return false; ??????m_PathName=m_Dlg.GetPathName(); //獲取選擇的文件路徑名 ?? ??????file.Open(m_PathName,CFile::modeCreate | CFile::modeWrite); ??????file.Write(m_Text,m_TextLen); //數(shù)據(jù)寫入文件 ??????file.Close(); ????} ??} ??return CDocument::CanCloseFrame(pFrame); }

這樣當(dāng)你單擊窗口上的關(guān)閉按鈕時,如果數(shù)據(jù)已修改了,就會彈出一個提示保存數(shù)據(jù)的對話框,提示你保存數(shù)據(jù)。
程序中的b_Flag是數(shù)據(jù)修改標(biāo)志,應(yīng)該在修改數(shù)據(jù)時進行設(shè)置,m_Text是準(zhǔn)備保存的數(shù)據(jù),放在文檔內(nèi)。

4.POSITION怎么用?

POSITION類型數(shù)據(jù)用于表征各種列表中元素的位置,它類似于數(shù)組的下標(biāo),但又有所不同。主要區(qū)別是:
我們不能訪問POSITION型數(shù)據(jù)的值,也不能對POSITION數(shù)據(jù)型數(shù)據(jù)進行加減、比較等運算。
用POSITION型數(shù)據(jù)訪問列表時,都是采用迭代法,一般格式為:

?
1 2 3 4 5 6 POSITION pos;??? //定義pos型變量 pos = GetHeadPosition();? //獲取列表起始元素位置 while( pos ) { ??x = GetNext(pos);? //獲取pos處的列表值,同時修改pos為下一個元素位置 }

GetNext()就是一種迭代,其格式為:

?
1 TYPE GetNext(POSITION& rPosition);

首先,它返回當(dāng)前pos位置處的元素;再就是把pos值修改為下一個元素位置。這樣循環(huán)時,可依次取得列表中各元素的值;當(dāng)?shù)竭_列表尾時,pos為NULL,循環(huán)結(jié)束。
所以使用POSITION型數(shù)據(jù)時,你不要試圖用加減等操作去修改它,只能用GetNext()(向后迭代)或GetPrev()(向前迭代)反復(fù)迭代來修改它的值。
如果你想直接到達指定值,還可以用Find()函數(shù)或FindIndex()函數(shù)獲得指定值的POSITION值。

?
1 2 POSITION Find(TYPE Value);//用于在列表中查找值為Value的元素的POSITION值; POSITION FindIndex(int nIndex);//用于獲取列表中第nIndex個元素的POSITION值,nIndex從0開始。

如:

?
1 2 pos = FindIndex(5);? //求列表中第5個元素的位置 x = GetNext(pos);?? //讀取元素的值

總之,POSITION類型在多種涉及列表的類中提供,不同的類提供的函數(shù)有所不同,但用法都是類似的。

5.如何從完整的文件路徑中分離文件名和路徑名?

從路徑中分離文件名:

?
1 2 3 4 5 6 7 8 9 CString GetFileName(CString pathname)? {? ??for( int i=pathname.GetLength()-1; i>=0; i-- )? ??{? ????if( pathname[i]=='\' )? ??????break;? ??}? ??return pathname.Mid( i+1 );? }

從路徑中分離路徑名(去除文件名):

?
1 2 3 4 5 6 7 8 9 10 11 CString GetPath(CString pathname)? {? ??int i = 0, j;? ??while( i<pathname.GetLength() )? ??{? ????if( pathname[i]=='\' )? ??????j = i;? ????i++;? ??}? ??return pathname.Left( j+1 );? }

?

http://www.jb51.net/article/52459.htm

總結(jié)

以上是生活随笔為你收集整理的VC小技巧汇总之对话框技巧的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美综合亚洲图片综合区 | 色偷偷免费费视频在线 | 国产无套内射又大又猛又粗又爽 | 操操干干 | 五月婷婷爱 | 91视频免费在观看 | 国产性爱精品视频 | 中文字幕avav | 日韩欧美三级 | 久久中文字幕无码 | 亚洲啊v在线 | 麻豆偷拍 | 久久久久久久网 | 亚洲色图另类小说 | 亚洲精品一区二区三区蜜桃 | 婷婷色在线播放 | 一区二区三区啪啪啪 | 黄色成人免费观看 | 九九在线观看高清免费 | 一区二区三区中文字幕在线观看 | 久久久久久久影院 | 99国产精品一区 | 色屁屁一区二区三区视频 | 日韩在线一区二区 | 日韩在线不卡av | 男女曰逼视频 | 国产精品久久久久久久一区二区 | 少妇一级淫免费放 | 国产情侣激情 | 国产午夜一区 | 天天摸天天操 | 亚洲人成电影一区二区在线 | 成人女同av免费观看 | 天堂网va| cao在线视频 | 国产v亚洲v天堂无码 | 九九热在线视频免费观看 | 久久久久久一区 | 中国黄色a级 | 日本wwww色| 黄站在线观看 | 日韩一区二区影视 | 亚州春色 | 亚洲a级精品 | 日韩不卡高清 | 亚洲人视频在线 | 二级黄色片 | 日韩精品一区二 | 精品国产一区在线观看 | 成人毛片视频在线观看 | 久久亚洲AV无码专区成人国产 | 亚洲区一区二区三区 | 人妻一区二区三区四区五区 | aaa成人| 免费三片在线播放 | 免费在线观看av网站 | 97蜜桃网| 韩国一区二区视频 | 天堂а√在线中文在线 | 亚洲一区二区三区在线免费观看 | 成人国产精品一区二区 | 最新av网址在线观看 | jvid在线| 欧美日韩亚洲成人 | 蜜臀久久99精品久久久久宅男 | 欧美性狂猛xxxxxbbbbb | 亚洲精品日韩欧美 | 中国av一区 | 久久久亚洲av波多野结衣 | 亚洲乱色熟女一区二区三区 | av一区二区三区 | 秋霞欧美一区二区三区视频免费 | 三级欧美韩日大片在线看 | 99一区二区 | 葵司av电影 | 国产午夜精品一区二区三区欧美 | 亚洲一区视频在线播放 | 国产精品av免费观看 | 国产在线视频资源 | 午夜色婷婷 | 国产乱码久久久久 | 131美女爱做视频 | av大片免费 | 午夜视频在线网站 | 日日舔夜夜操 | 在线免费观看www | 亚州精品国产精品乱码不99按摩 | 91精品人妻互换一区二区 | 丰满人妻一区二区三区四区53 | 亚洲精品18在线观看 | 欧美少妇一区二区 | 岛国精品 | 香蕉视频网站在线 | 在线不卡日韩 | 亚洲av成人一区二区国产精品 | 日韩和一区二区 | 久久香蕉精品视频 | 欧美视频免费在线观看 | 精品999久久久一级毛片 |