MFC常见问题及解决方案

简介: 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 编译警告,:

image.png


代码如下:


#include <list>


using namespace std;


list<string> myList;


void main()


{


}


再比如, map<string,int> myMap 。


Answer:


这个警告的意思就是说,list<string> 的构造生成的 Symbols 太长了,超过了255个字符。


你其实不用理会这个警告,因为它只会影响到 Debugger ,而不会影响到真实的代码。实际上,如果你编译一个 Release 版本的话,就会发现这个警告已经完全消失了。


消除这个警告可能有一点难度,因为这属于预处理器的行为。


一般建议你这么做:



注意这个 pragma 声明一定要放在 stl 头文件之前!否则不起作用!


这个 pragma 也不是总能够发生效力的!有时候,并不能消除所有的这种 C4786 警告。



三. VC中打开txt文件呈现如下的显示的方法:


image.png


方法:


ShellExecute

Performsan operation on a specified file. 对指定的文件进行操作。

HINSTANCE ShellExecute(

   HWND hwnd,  //

父窗口句柄

.

   LPCTSTR lpOperation,  //

   LPCTSTR lpFile,

   LPCTSTR lpParameters,

   LPCTSTR lpDirectory,

   INT nShowCmd

);

lpOperation,指向,涉及要执行的动作的以’\0’结束的字符串。


Verb


描述


edit


执行、打开一个文本文件,如果lpFile非文本文件,函数会出错。


explore


Explorers由lpFile指向的文件夹。


find


从指定的目录开始查找。


open


打开由lpFile参数指定的文件,这个文件可以是可执行的文件、文本文件、文件夹。


Print


打印lpFile指定的文档,如果lpFile不是文本文件,函数会调用失败。


lpFile 指定一个预操作的文件名。


lpParameters:lpOperation参数有关,且如果lpFile指定了一个文档名,该参数为NULL。


LpDirectory:指向一个’\0’结束的字符串,该字符串指定了缺省的路径。


nShowCmd: 指示如何显示,即显示方式。其中SW_SHOWNORMAL。激活并显示一个窗口,如果窗口最小化或者最大化,窗口会存储其初始打开的大小和位置,下一次打开时会显示上一次打开的方式。当第一次显示窗口的时候,需要制定该flag。


正确的执行方式如下:


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


      这只是近期遇到的一些小问题,后期会做内容扩充,发现更多问题及问题的解决方法,期待大家的关注!希望给大家以帮助!


相关文章
|
PyTorch 算法框架/工具 计算机视觉
用thop去获得模型参数量和计算量(pytorch)
用thop去获得模型参数量和计算量(pytorch)
899 2
Beyond Compare 4密钥过期解决办法,超实用
Beyond Compare 4密钥过期解决办法,超实用
27314 1
|
SQL 存储 缓存
MySQL是如何保证数据不丢失的?
文章详细阐述了InnoDB存储引擎中Buffer Pool与DML操作的关系。在执行插入、更新或删除操作时,InnoDB为了减少磁盘I/O,会在Buffer Pool中缓存数据页进行操作,随后将更新后的“脏页”刷新至磁盘。为防止服务宕机导致数据丢失,InnoDB采用了日志先行(WAL)机制,通过将DML操作记录为Redo Log并异步刷新到磁盘,结合双写机制和合理的日志刷新策略,确保数据的持久性和一致性。尽管如此,仍需合理配置参数以平衡性能与数据安全性。
358 1
MySQL是如何保证数据不丢失的?
|
10月前
|
安全 算法 网络协议
【网络原理】——图解HTTPS如何加密(通俗简单易懂)
HTTPS加密过程,明文,密文,密钥,对称加密,非对称加密,公钥和私钥,证书加密
|
SQL 资源调度 数据库连接
Hive怎么调整优化Tez引擎的查询?在Tez上优化Hive查询的指南
在Tez上优化Hive查询,包括配置参数调整、理解并行化机制以及容器管理。关键步骤包括YARN调度器配置、安全阀设置、识别性能瓶颈(如mapper/reducer任务和连接操作),理解Tez如何动态调整mapper和reducer数量。例如,`tez.grouping.max-size` 影响mapper数量,`hive.exec.reducers.bytes.per.reducer` 控制reducer数量。调整并发和容器复用参数如`hive.server2.tez.sessions.per.default.queue` 和 `tez.am.container.reuse.enabled`
1263 0
|
机器学习/深度学习 数据采集 算法
实现机器学习算法(如:决策树、随机森林等)。
实现机器学习算法(如:决策树、随机森林等)。
120 0
|
存储 芯片 内存技术
浅析DMA
DMA全程Direct Memory Access,即直接存储器访问。简单来讲,它的功能是把数据从一个地址搬运到另一个地址。通常有三个传输方向,分别是内存到内存,内存到外设和外设到内存。DMA是开发过程中常用到的,但从个人角度来讲,觉得DMA不是很好学。倒不是说他有多难,只是有些寄存器位的含义可能初学时了解的不深刻,很容易出现问题,这里仅代表个人看法。有的DMA也有一些特殊的传输方式,比如回绕传输,这个在第3小节会有详细介绍。
934 0
|
物联网 开发者
蓝牙模块控制功能数据AT指令|学习笔记
快速学习蓝牙模块控制功能数据AT指令
蓝牙模块控制功能数据AT指令|学习笔记