天天看點

MFC常見問題及解決方案

一、MFC中擷取可執行檔案的路徑方法.

GetModuleFileName();

The GetModuleFileNamefunction retrieves the fully qualified path for the specified module.           

檢索到包含可執行檔案所在的全目錄。

DWORD  GetModuleFileName(

  HMODULE hModule,    // handle to module

  LPTSTR lpFilename,    // path buffer

  DWORD nSize         // size of buffer

);           

如果hModule=NULL,則GetModuleFileName 傳回目前Module的路徑。

lpFilename,傳回Module全路徑。

nSize 訓示buffer的大小。

常用方法,自定義一個函數實作:

CString CSourceDlg::GetMyFilePath()
{
         char pro_path[MAX_PATH];
         GetModuleFileName(NULL,pro_path,MAX_PATH);//傳回檔案所在的路徑,含該檔案名。
         CString str_path(pro_path);  //路徑可能是:F:\Temp\DirDemo\Debug\DirDemo.exe
         int x=str_path.ReverseFind('\\')+1; //找到檔案名所在的位置.
         int len_path=str_path.GetLength();
         str_path.Delete(x,len_path-x);     //删除檔案名。
         return str_path; //僅傳回路徑,不含檔案名。 如:F:\Temp\DirDemo\Debug\
}           
此函數用途:便于擴充擷取Debug目錄裡其他檔案的目錄。
擷取方法:通過Debug目錄(上面的函數)+檔案名即可擷取。           

二、VC6使用STL時很多C4786警告的消除方法。

下面的代碼編譯時報告了一大堆4786 編譯警告,:

代碼如下:

#include <list>

using namespace std;

list<string> myList;

void main()

{

}           

再比如, map myMap 。

Answer:

這個警告的意思就是說,list 的構造生成的 Symbols 太長了,超過了255個字元。

你其實不用理會這個警告,因為它隻會影響到 Debugger ,而不會影響到真實的代碼。實際上,如果你編譯一個 Release 版本的話,就會發現這個警告已經完全消失了。

消除這個警告可能有一點難度,因為這屬于預處理器的行為。

一般建議你這麼做:

注意這個 pragma 聲明一定要放在 stl 頭檔案之前!否則不起作用!

這個 pragma 也不是總能夠發生效力的!有時候,并不能消除所有的這種 C4786 警告。

三. VC中打開txt檔案呈現如下的顯示的方法:

方法:

ShellExecute
Performsan operation on a specified file. 對指定的檔案進行操作。
HINSTANCE ShellExecute(
    HWND hwnd,  //
父視窗句柄

    LPCTSTR lpOperation,  //
    LPCTSTR lpFile, 
    LPCTSTR lpParameters, 
    LPCTSTR lpDirectory,
    INT nShowCmd
);           

lpOperation,指向,涉及要執行的動作的以’0’結束的字元串。

MFC常見問題及解決方案

lpFile 指定一個預操作的檔案名。

lpParameters:lpOperation參數有關,且如果lpFile指定了一個文檔名,該參數為NULL。

LpDirectory:指向一個’0’結束的字元串,該字元串指定了預設的路徑。

nShowCmd: 訓示如何顯示,即顯示方式。其中SW_SHOWNORMAL。激活并顯示一個視窗,如果視窗最小化或者最大化,視窗會存儲其初始打開的大小和位置,下一次打開時會顯示上一次打開的方式。當第一次顯示視窗的時候,需要制定該flag。

正确的執行方式如下:

ShellExecute(handle, "open",path_to_folder, NULL, NULL, SW_SHOWNORMAL);           

這隻是近期遇到的一些小問題,後期會做内容擴充,發現更多問題及問題的解決方法,期待大家的關注!希望給大家以幫助!

作者:銘毅天下

原文:

https://blog.csdn.net/laoyang360/article/details/8526523