论坛部分帖子回答集锦

读高中的时候,我的数学老师经常对我说“花很短的时间总结一下,你往往会有很大的收获”。虽然10多年过去了,老师的这句话我还依然记在心头。于是我也时常对自己说“花个时间总结一下,你会有很大的收获”。09年底时本打算在春节期间抽个时间把以往有用的东西好好整理一下,结果过年的时候发现自己大部分时间在外地。也罢,我就在平时抽个空写点东西吧。

 

1.OnPaint里用CTime::GetCurrentTime获取到系统时间不随系统时间变化的原因是什么?

答:程序是不会自动刷新的,需要在OnTimer中进行处理。

 

2.请问如何用edit自动转换输入的进制数,比如我输入16进制的数字,按确定后就转成10进制。

1CString str;

int iVal;

GetDlgItemText(IDC_EDIT1, str);

sscanf(str, _T("%x"), &iVal);

 

2CString str;

int iVal;

GetDlgItemText(IDC_EDIT1, str);

iVal = _tcstoul(str, NULL, 16);

 

str.Format(_T("%d"), iVal);

SetDlgItemText(IDC_EDIT1, str);

 

3.使用Image image(L"sunflower.jpg");,程序报错是怎么回事?

答:一、确认一下文件路径;2.需要对gdi+环境初始化:

定义成员变量

GdiplusStartupInput m_gdiplusStartupInput;

ULONG_PTR m_pGdiToken;

 

程序启动时:

GdiplusStartup(&m_pGdiToken,&m_gdiplusStartupInput,NULL);

 

程序退出时:

GdiplusShutdown(m_pGdiToken);

 

4.链接错误

答:链接错误是因为链接器找不到相应符号的实现,一般是缺少c/cpp文件,或缺少lib.对于缺少c/cpp文件的,把文件加入到工程中;对于缺少lib库的,在链接选项中添加相应lib或加入预处理指令 #pragma comment(lib, "yourlib.lib")

 

5.如何判断字符串中有多少个字?一个字母,空格,一个汉字都算一个字。

答:使用下面的代码试试

int GetTotal(CString   Feedback) 

{ 

    char*  buf  = new char[Feedback.GetLength()+1];       

    int i=0, n=0;      

    unsigned  char p; 

    memset(buf, 0, Feedback.GetLength()+1); 

    sprintf(buf, Feedback); 

    while(n<Feedback.GetLength()) 

    { 

        p = buf[n]; 

        if(p>0x7f)

            i+=1; 

        n++; 

    } 

    delete [] buf; 

    return Feedback.GetLength()-i+i/2; 

}

 

6.VS2008,如何才能不使用#include “stdafx.h”

答:可以在工程属性中设置,选择不使用预编译头.

 

7.vc2005中找不到msflexgrid控件.

答:工程->右键->添加类->activex 中的mfc->combobox列表中选 microsoft flexgrid control v6.0

 

8.vc2008CTime::Format函数的问题.

CTime t = CTime::GetCurrentTime();

CString str1=t.Format("%Y%m%d 星期%w);

VC2008中,str1为空,去掉中文就得到正确值,VC6中没这问题,怎么回事?

答:#include <locale.h>

_tsetlocale(LC_ALL,   _T( "Chinese-simplified"));

CTime t=CTime::GetCurrentTime();

CString str1=t.Format("%Y%m%d日星期%w");

 

9.浏览文件对话框如何创建?

答:CString str;

BROWSEINFO bi;

char name[MAX_PATH];

ZeroMemory(&bi,sizeof(BROWSEINFO));

bi.hwndOwner=GetSafeHwnd();

bi.pszDisplayName=name;

bi.lpszTitle="Select folder";

bi.ulFlags=BIF_USENEWUI;

LPITEMIDLIST idl=SHBrowseForFolder(&bi);

if(idl==NULL)

    return;

SHGetPathFromIDList(idl,str.GetBuffer(MAX_PATH));

str.ReleaseBuffer();

 

10.exe形式的com组件在.net下可以调用吗?如何调用?

答:添加引用,然后在对象浏览器中可以看到.net为我们生成的包装类。

AxcomnameClass obj = new AxcomnameClass();

如果是clr的话,使用托管指针comnameClass^ obj = gcnew comnameClass();

 

11.Wince下不支持GetModuleFileNameEx,如何获取其他程序的路径?

答:据说GetModuleFileName可以得到,用Process ID作为参数,调用 GetModuleFileName((HMODULE) dwProcessID, tzPath, MAX_PATH) ,要不你试试?

 

12.电脑一直都能注册debug版的xx.ocx,但突然现在就不行了。出现LoadLibrary(xx.ocx)失败 - 一个或数个参数无效。为何出现这种情况?

答:查看一下依赖库

 

13.MFC如何显示各种常见格式图片?

答:使用gdi+ImageATLCImage(vc6不支持)

 

14.vc9(vc2008)中如何添加组件和控件?

答:一、可以在工具箱中点击右键->选择项,然后可把相应的组件放置到工具箱中,

使用的时候像常规控件那样拖拽就行了;二、解决方案视图->添加类->tlb中的mfc类,或activex中的mfc类。

 

15.如何把彩色图像变成灰度图像?

答:参看http://blog.csdn.net/sjdev/archive/2010/01/23/5249373.aspx

 

16.有什么方法可以在桌面上像桌面歌词一样textout出文字来?

答:桌面歌词不是直接在桌面上画的,应该是在一个透明的窗体上绘制的。

参看代码http://download.csdn.net/source/1707118

 

17.如何将61秒让,以000101的格式输出?

我使用代码

CString str;

str.Format("%d:%d:%d"hour,minute,second)

pDC->TextOut(str);

这样做的话输出  011 和标准格式不一样

答:给你个标准答案,一般人我不告诉他:

CTime tm(61);

CString tmp = tm.FormatGmt(_T("%H:%M:%S"));

 

18:在mfc扩展dll中使用::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP1))加载失败。

答:不要使用AfxGetInstanceHandle,把DllMain中的hInstance缓存一下传递过去。

 

19vc2008如何打开内存查看窗口?我在调试->窗口菜单中没找到。

答:在调试状态下,找找看。

 

20:char ans[128]; 被赋值后如何再次初始化?

答:方法很多,memsetstrcpy等。如果你只是想简单地把它置空,可以 *ans = 0;

 

注:只选取了一部分论坛回复。部分回复答案的正确性有待验证,希望这些东西能对你有帮助。如果哪个地方有错误,可以在我的博客上留言,我会及时修正。

 

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值