首页 > 代码库 > 今天逛VC驿站 的收获

今天逛VC驿站 的收获

1。C++ 如何定义一个定长字符串, 若不足位数,就补字符串"0"?

eg:

CString str1 = “123”;
不足20位,前面补“0”,实现效果为“00000000000000000123”

answer:

str.Format(_T("%020s"),_T("aaa"));

2.vs2010建的单文档程序如何隐藏菜单栏?

answer:

这个是MFC标准的单文档,可以哦。
不知道你选的是什么类型的单文档

然后这个是Visucal Studio 风格的取消方法

首先,来到这里,把这个注释掉


 
然后往下翻。。。
 
第三步!

 

OK 完工

最后一步 也是最关键的一步。。杀他儿子!

其他方法:

在App Instantsh函数最后添加 pMainFrm->SetMenu(NULL),不一定有效,可以试试。

3.本机上测试内网IP可以连接到服务器,外网IP却连接不进来是怎么回事啊

http://www.cctry.com/thread-242540-1-1.html

4.关于CDHtmlDialog使用Navigate

http://www.cctry.com/thread-242570-1-1.html

http://www.cctry.com/thread-242623-1-1.html

http://www.bccn.net/Article/kfyy/vc/jszl/200601/3003_2.html(利用MFC实现浏览器的定制与扩展)

5.

菜鸟级别的问题:关于 char 输出

代码如下、不明白的是
1.变量ch不是一个整体么?怎么输出却是输出%c、而不是ch呢?(我试过ch的、输出的是结果后面加一个h的、显然:h是多余的、)这个有点纳闷、
2.ch被定义了两次、第一次是b、第二次是e、输出的却是:e、那么定义b有什么用呢?

程序代码:
#include <stdio.h>
int main(void)
{
    char ch = A;
       ch =b;
       ch =e;
    printf("%c\n",ch);
    return 0;

}
answer:

printf()是用C编写好的现成函数,但它不是C语言的组成部分,这个函数的用法是它自己定义的,不是C语言定义的。也就是说,不要把学到printf()的用法当成是C语言的知识,不是的!

printf()函数并不直观,写出来难免出现误导性结果,你遇到的就是很典型的一种。%c、%s、%d这种约定的格式转义符,由于可能与后面的不转义符没有间隔,而让读者误以为能够凑成有意义的输出,当输出字符串中夹杂有\这样的转义字符时,尤其混乱,除非你很熟悉各种转义字符,否则很容易绕晕。C++改造过的输出语法,就比C的好一些,等你以后接触到别的语言时,自然能够感受到printf()/scanf()的简陋。不用太执着钻研这类专门函数的用法,更不要使用太复杂的用法,学基本的就够了。

6.今天看到VC驿站的一位网友研究关于如何实现 C 语言中 字符串的 Left、Mid、Right 操作。
相关帖子参见:http://www.cctry.com/thread-242625-1-1.html

//////////////////////////////////////////////////////////////////////////////////
// 备注:本篇文章来自 vc驿站:http://www.cctry.com
// C、C++、VC++ 各种学习资源,免费教程,期待您的加入!
//////////////////////////////////////////////////////////////////////////////////

这三个函数的功能是类似的,Mid 为从中间截取,Left 从左边开始截取,Right 为从右边开始截取。
于是自己便简单实现了一下,发出来提供大家方便使用。

  1. #include <string.h>
  2. #include <stdlib.h>
  3. char * strLeft(const char *src, unsigned int n)
  4. {
  5.         if (!src || n <= 0 || n > strlen(src))
  6.                 return NULL;
  7.         char *retBuffer = (char *)malloc(n+1);
  8.         memset(retBuffer, 0, n+1);
  9.         strncpy(retBuffer, src, n);
  10.         return retBuffer;
  11. }
  12. char * strMid(const char *src, unsigned int startIdx, unsigned int n)
  13. {
  14.         if (!src || startIdx < 0 || startIdx >= strlen(src) || n <= 0 || n >= strlen(src))
  15.                 return NULL;
  16.         char *retBuffer = (char *)malloc(n+1);
  17.         memset(retBuffer, 0, n+1);
  18.         strncpy(retBuffer, src+startIdx, n);
  19.         return retBuffer;
  20. }
  21. //////////////////////////////////////////////////////////////////////////////////
  22. // 备注:本篇文章来自 vc驿站:http://www.cctry.com
  23. // C、C++、VC++ 各种学习资源,免费教程,期待您的加入!
  24. //////////////////////////////////////////////////////////////////////////////////
  25. char * strRight(const char *src, unsigned int n)
  26. {
  27.         if (!src || n <= 0 || n >= strlen(src))
  28.                 return NULL;
  29.         char *retBuffer = (char *)malloc(n+1);
  30.         memset(retBuffer, 0, n+1);
  31.         unsigned int offset = strlen(src)-n;
  32.         strncpy(retBuffer, src+offset, n);
  33.         return retBuffer;
  34. }

因为是malloc之后返回的,所以别忘记了free

8.在MFC中syntax error : missing ‘;‘ before identifier ‘MMVERSION‘这个问题是怎么回事??

是类型么有定义,将头文件包含进来。(举一反三)

9.我想要 编辑框没有输入东西的时候下面的 某个按钮不可用,输入东西了 按钮才可用,怎么搞?

对编辑框在EN_CHANGE事件响应时,去EnableWindow()控件的可用性

10.VS2010:就报错了:LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏?

  我的电脑了原来装了VS 2010了,今天下载VS 2012装了上去,然后建了个MFC工程,运行了一下。然后打开原来VS 2010项目,一运行,就报错了:LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏。

   首先,说明一下报错的原因(微软的解释),地址:http://support.microsoft.com/kb/320216/zh-cn

   然后,在网上找到了不少解决方法,列举一下:

     方法1:发现是嵌入清单的问题,于是对该工程以及所有依赖工程进行如下操作:右键->工程属性->配置属性-> 清单工具->输入和输出->嵌入清单,选择[否]

            或者将项目\属性\配置属性\链接器\清单文件\生成清单:原来是“是”,改成“否”。

     方法2:给VS2010打SP1补丁。这个补丁有500多M。下载地址是:http://www.microsoft.com/en-us/download/details.aspx?id=23691

   但是,我按照方法1的方法去修改,还是不可以,于是,下载了2个小时补丁,安装后发现可以了。希望给遇到相同问题的朋友有一个借鉴。