最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

VC小技巧匯總之5則實用小技巧

 更新時間:2014年07月21日 12:12:05   投稿:shichen2014  
這篇文章主要介紹了VC小技巧匯總之5則實用小技巧,需要的朋友可以參考下

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

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

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

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)的默認(rèn)路徑就發(fā)生了改變,有可能使你原定的數(shù)據(jù)文件打不開了,如果采用以下方法就可以沒問題了:

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

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

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

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

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

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

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

WinExec(m_PathName,SW_SHOWNORMAL);

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

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

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

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書上都有介紹。現(xiàn)在的問題是我不使用串行化,而是自己動手保存,當(dāng)點擊窗口的關(guān)閉按鈕時,如何提示并保存文檔。
用ClassWizard在文檔類(CxxDoc)中添加函數(shù)CanCloseFrame(),再在其中加入保存文件的語句就可以了。
例:

//退出程序
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ù)訪問列表時,都是采用迭代法,一般格式為:

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

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

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值。

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

如:

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

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

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

從路徑中分離文件名:

CString GetFileName(CString pathname) 
{ 
  for( int i=pathname.GetLength()-1; i>=0; i-- ) 
  { 
    if( pathname[i]=='\' ) 
      break; 
  } 
  return pathname.Mid( i+1 ); 
}

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

CString GetPath(CString pathname) 
{ 
  int i = 0, j; 
  while( i<pathname.GetLength() ) 
  { 
    if( pathname[i]=='\' ) 
      j = i; 
    i++; 
  } 
  return pathname.Left( j+1 ); 
}

相關(guān)文章

  • C++名稱空間特性

    C++名稱空間特性

    這篇文章主要介紹了C++名稱空間特性,文章圍繞C++名稱空間特性的相關(guān)資料展開詳細內(nèi)容,需要的小伙伴可以參考一下下文具體內(nèi)容,希望對你的學(xué)習(xí)有所幫助
    2022-01-01
  • 在vscode中快速新建html文件的2種方法總結(jié)

    在vscode中快速新建html文件的2種方法總結(jié)

    這篇文章主要給大家介紹了關(guān)于在vscode中快速新建html文件的2種方法,以及如何快速打開HTML文件查看編輯效果的方法,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2022-04-04
  • Qt中CQGUI框架之陰影圓角窗口實現(xiàn)

    Qt中CQGUI框架之陰影圓角窗口實現(xiàn)

    這篇文章主要介紹了Qt中CQGUI框架之陰影圓角窗口實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 詳解C++中的數(shù)據(jù)抽象

    詳解C++中的數(shù)據(jù)抽象

    這篇文章主要介紹了詳解C++中的數(shù)據(jù)抽象,數(shù)據(jù)抽象是指,只向外界提供關(guān)鍵信息,并隱藏其后臺的實現(xiàn)細節(jié),即只表現(xiàn)必要的信息而不呈現(xiàn)細節(jié),需要的朋友可以參考下
    2023-05-05
  • C++中訪問字符串的三種方法總結(jié)

    C++中訪問字符串的三種方法總結(jié)

    以下是對C++中訪問字符串的三種方法進行了詳細的總結(jié)介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2013-10-10
  • c/c++ 奇技淫巧(一些c語言的技巧)

    c/c++ 奇技淫巧(一些c語言的技巧)

    這篇文章主要介紹了c/c++ 奇技淫巧,需要的朋友可以參考下
    2017-03-03
  • C++實現(xiàn)圖書管理系統(tǒng)課程設(shè)計(面向?qū)ο?

    C++實現(xiàn)圖書管理系統(tǒng)課程設(shè)計(面向?qū)ο?

    這篇文章主要為大家詳細介紹了C++實現(xiàn)圖書管理系統(tǒng)課程設(shè)計,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 深入了解C++11中promise和future的使用

    深入了解C++11中promise和future的使用

    C++11中promise和future機制是用于并發(fā)編程的一種解決方案,用于在不同線程完成數(shù)據(jù)傳遞(異步操作)。Promise和Future提供了訪問異步操作結(jié)果的機制,可以在線程之間傳遞數(shù)據(jù)和異常消息。本文就來聊聊二者的使用,希望對大家有所幫助
    2022-11-11
  • QT中刪除信號于槽的連接的實現(xiàn)

    QT中刪除信號于槽的連接的實現(xiàn)

    本文主要介紹了QT中刪除信號于槽的連接的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • C++ const限定符以及頂層const和底層const的案例詳解

    C++ const限定符以及頂層const和底層const的案例詳解

    這篇文章主要介紹了C++ const限定符以及頂層const和底層const的案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-09-09

最新評論

宣威市| 普兰店市| 桦南县| 德庆县| 邻水| 吴桥县| 清新县| 盐池县| 吉水县| 永宁县| 安平县| 河池市| 交口县| 宁化县| 永春县| 许昌市| 无棣县| 灌阳县| 楚雄市| 武强县| 金昌市| 中宁县| 嘉鱼县| 新密市| 玉屏| 广南县| 荔浦县| 湘乡市| 公主岭市| 左云县| 西乡县| 遵义市| 安达市| 久治县| 景德镇市| 浦县| 鸡东县| 泸水县| 兖州市| 临安市| 临高县|