-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMFC-use.txt
214 lines (169 loc) · 7.93 KB
/
MFC-use.txt
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
1. libcurld.dll libcurl.dll 区别: 一个是调试版本。
2. 添加依赖:
属性->连接器->常规->附加库目录
./lib
属性->连接器->输入->附加依赖项
libcurl.lib;json.lib;%(AdditionalDependencies)
属性->C/C++->常规->附加包含目录
./include;./include/curl;./include/json;
解决:__invoke_watson 已经在 msvcrtd.lib(MSVCR100D.dll) 中定义 问题
属性->连接器->输入->忽略特定默认款
libcmt.lib
DLL存放位置
程序可执行文件位置
DLL搜索顺序:
当前进程的可执行模块所在的目录。
当前目录。
Windows 系统目录。GetSystemDirectory 函数检索此目录的路径。
Windows 目录。GetWindowsDirectory 函数检索此目录的路径。
PATH 环境变量中列出的目录。
因此,放到以上任意一个目录下都可以。最简单的是第1个,放到exe文件所在的目录下
3. 显示行号
菜单里工具->选项->文本编辑器->c/c++里 显示行号勾选。
4. 打包发布
参考:http://blog.csdn.net/luoshixian099/article/details/49766051
5. 获取程序运行的目录
GetModuleFileName(NULL,strPath.GetBufferSetLength(MAX_PATH+1), MAX_PATH+1);
方便将文件写入程序运行的目录。
6. MFC 工程内存泄露检测
用vs(此时我使用的是2010)建MFC对话框程序。
程序退出的时候输出窗口会提示是否有内存泄露,
对于开发c/c++程序非常有用。
7. fatal error C1853 预编译头文件来自编译器的早期版本号,或者预编译头为 C++ 而在 C 中使用它(或相反)
解决方法: 右击提示出错的文件 属性->配置属性->c/c++->预编译头配置
预编译头:不使用预编译头
8. 定时消息
BEGIN_MESSAGE_MAP(CUpdate, CPlayerDlg)
ON_WM_TIMER()
// ...
END_MESSAGE_MAP()
SetTimer(3, 1000, NULL); // nIDEvent=3, 1000 定时1秒
BOOL CWnd::KillTimer(UINT_PTR nIDEvent)
void CUpdate::OnTimer(UINT_PTR nIDEvent)
http://blog.csdn.net/dijkstar/article/details/8761481
9. 2010 不支持 c++11的多线程函数库<thread>
C1083: 无法打开包括文件:“thread”
10. MFC里面RC资源编辑器不能打开的解决办法
关闭所有打开的.h .cpp 文件就可以解决
11. 解决回车键 ESC 默认关闭窗口的一般方法
原因: 回车消息默认调用了 确定按钮事件
ESC调用了 取消按钮事件
解决:对话框.h 增加virtual BOOL CUpdate::PreTranslateMessage(MSG* pMsg);
.cpp 重载函数 处理消息
BOOL CUpdate::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_ESCAPE) return TRUE;
if(pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_RETURN){
OnBnClickedOk();
return TRUE;
}
return CDialog::PreTranslateMessage(pMsg);
}
http://blog.csdn.net/xiliang_pan/article/details/7069802
12. 内存泄露定位方法
MFC: 代码运行入口(建议对话框初始化InitInstance出)_CrtSetBreakAlloc(2006)
2006是Detected memory leaks! {number}中的number 第几次分配的内存泄露。
#define _CRTDBG_MAP_ALLOC 定义此宏 代码会断点到内存泄露的地方#define _CRTDBG_MAP_ALLOC
非MFC:
#include "crtdbg.h"
//添加该头文件
_CrtSetDbgFlag(_CrtSetDbgFlag(_CRTDBG_REPORT_FLAG)|_CRTDBG_LEAK_CHECK_DF);
//运行时添加该语句,在内存泄露前添加,一般加到程序的入口函数中。
//在头文件下面添加下面宏定义
#ifdef _DEBUG
#define new new(_NORMAL_BLOCK, __FILE__, __LINE__)
#endif
#define _CRTDBG_MAP_ALLOC 定义此宏 代码会断点到内存泄露的地方#define _CRTDBG_MAP_ALLOC
http://blog.csdn.net/xuleisdjn/article/details/53100572
13. vs c c++ 输出窗口输出信息
方便查看,调试,复制。
#ifdef DEBUG
#define print(str) {char sOut[2048]; sprintf(sOut,"%s\r\n",str); OutputDebugStringA(sOut);}
#endif
http://blog.csdn.net/charlesprince/article/details/3522342
14. 字符编码 (待验证)
VS 2013 新创建的cpp和h文件默认是GB2312的,为适应国际化需求,现在都使用UTF-8格式,下面教大家设置为默认UTF-8
进入vs安装目录的 Microsoft Visual Studio 12.0\VC\vcprojectitems
用 VS2013打开 newc++file.cpp 和 hfile.h 文件,
在里边加入如下内容:
#pragma once
#pragma execution_character_set("utf-8") // 设置执行的编码为utf-8 可以避免转码问题
// 本文件为utf-8 编码格式
然后在VS顶部点击 文件 -> 高级保存选项 -> Unicode (UTF-8无签名) - 代码页 65001
然后点击 确定 保存即可。
http://blog.csdn.net/maxwoods/article/details/44828295
注意: vs编译器(2013)要支持暂时只支持带BOM的utf-8.
所以使用utf-8的工程 可以修改新建文件为utf-8带BOM的模板。 针对纯c c++的项目我觉得可以。
针对不带BOM的 utf-8文件方式, 此时需要加上#pragma execution_character_set("utf-8")
使执行为utf-8的环境,可以此时 输出汉子会乱码。不过针对 纯C, C++ 的项目我觉得还是可以的。
linux 下utf bom 去除
https://www.cnblogs.com/Mach-he/p/6683074.html?utm_source=itdadao&utm_medium=referral
http://blog.sina.com.cn/s/blog_50ebb8ad0102vkg3.html
15. 调试常用
* vs的Debug模式定义了_DEBUG 宏,开发的时候可以使用。
* 在MFC下 添加如下代码 控制台可以同时输出
#pragma comment( linker, "/subsystem:console" )
#pragma comment( linker, "/entry:\"WinMainCRTStartup\"" )
16. MFC 任务栏点击
// 任务栏点击 最小化和回复切换设置
ModifyStyle(0, WS_MINIMIZEBOX);
17. dll lib 介绍
http://www.cppblog.com/amazon/archive/2009/09/04/95318.html
附录:
* MFC教程
http://blog.sina.com.cn/s/blog_671f486a0102voqr.html
http://www.jizhuomi.com/software/153.html
不错的入门教程:
http://www.jizhuomi.com/school/c/151.html
* dll下载地址
用于dll缺失的搜索下载地址
https://www.dll-files.com
* 目录、附加依赖项、库目录及具体设置
http://blog.csdn.net/xiaorenwukechi/article/details/39249401
常见错误:
1.::{ctor}”: 构造函数不能有返回类型
原因头文件里的class后面忘记加 “ ; ”了
从一个MFC工程移植对话框类到另一个MFC工程
http://blog.csdn.net/wowoandlyn/article/details/2937785
MFC webview 网页开发
使用MFC自带的CDHtmlDialog类。
可以行弹出对话框一样操作。
视图资源添加 右键 类导向添加CDHtmlDialog类
http://www.moon-soft.com/program/bbs/readelite919494.htm
CDHtmlDialog类 微软文档
https://technet.microsoft.com/zh-cn/library/8bed8k60.aspx#CDHtmlDialog::Navigate
参考
CEF嵌入基于chrome内核浏览器
http://blog.csdn.net/mfcing/article/details/43953433
16. 文件下载
* 启动线程
// 介绍了下载进度 实现方式
https://www.cnblogs.com/lidabo/p/6405369.html
// 下载进度 断点续载
http://www.linuxidc.com/Linux/2014-10/107509.htm
// 取消下载 未验证
http://bbs.csdn.net/topics/390779255
// curl c++ 封装 未验证
http://blog.csdn.net/mfcing/article/details/50775164
// curl c++ 封装断点续传 未验证
http://blog.csdn.net/xiaojun111111/article/details/53032126
* 停止 退出
使用清除curl_easy_cleanup(curl);curl==NULL; // 验证有效
传递指针 需要指向指针的指针。 如: void *p; fun(void **para){*para=(void*);}
两种方式来暂停下载:
方法一:CURLcode curl_easy_pause(CURL *handle , int bitmask); 调用这个函数
或者
方法二:让读或写操作的回调函数返回 CURL_READFUNC_PAUSE 或 CURL_WRITEFUNC_PAUSE 来暂停连接
17 文件输出
标准错误输出:void perror ( const char * str );
标准输入 输出
可以使用freopen 重定向 stdin stdout stderr
日志 错误信息 调试信息。
备注:重定向错误输出后 perror("error redirecting stderr\n");输出找不到了
所以错误输出建议:fprintf(stderr, "stderr after : hello world\n");
原因应该是并没有发生系统错误 perror会把错误号errorno输出。
https://www.cnblogs.com/Jason9988/p/4755692.html
18 zip 解压压缩
参考:
http://blog.csdn.net/wangshubo1989/article/details/52847891
http://www.codeproject.com/Articles/7530/Zip-Utils-clean-elegant-simple-C-Win