天天看点

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