杂项小心得

C++超级高手成长之路   http://hi.baidu.com/_%E2d_%B7%B3_%DE%B2%C2%D2/blog/item/d45ba7031ad70b8ed53f7c5b.html   很不错,详细介绍了各种控件的使用

1、cstring to int

      VS2005默认的编码方式是Unicode,Unicode下不能用atoi,而要使用_wtoi
也可以直接使用_ttoi,它在 ANSI 编码系统中被编译成atoi(),而在 Unicode 编码系统中编译成_wtoi()。
     例如:
     CString str = _T("134258");
     int a = _ttoi(str);

 

2、int InsertColumn(  int nCol,
                                    LPCTSTR lpszColumnHeading,
                                    int nFormat = LVCFMT_LEFT,
                                    int nWidth = -1,(宽度)
                                    int nSubItem = -1
                                 );

uafxwced.lib

 

3、VS2005产生6位随机数

SYSTEMTIME systemtime;

GetSystemTime(&systemtime);
CString sztime;


sztime.Format(_T("%d%d%d%d%d%d"),
      systemtime.wYear, systemtime.wMonth, systemtime.wDay, systemtime.wHour,  systemtime.wMinute,systemtime.wSecond);

 

int ntime=_ttoi(sztime); 
srand((unsigned)ntime);

// Usually, you will want to generate a number in a specific range,
int RANGE_MIN = 100000;
int RANGE_MAX = 999999;
int rand6 = (((double) rand() / (double) RAND_MAX) * RANGE_MAX + RANGE_MIN);

 

 

4、CVTRES : fatal error CVT1100的问题

    在使用VC++ 2005 Express版本,利用wxWidgets编译其所提供的范例sample/html/test时,除了针对Unicode编码作了一定的修改之外,编译时,仍然发生了两个在链接期的错误,一个错误的提示为:
CVTRES : fatal error CVT1100: 重复的资源。type:MANIFEST, name:1, language:0x0409
另一个则提示为:
LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
已经到了链接期,应该说,问题就不像编译通不过那么别扭了,而查阅MSDN关于这两个问题的说明,终于找到了解决的方法,现简单的陈述如下:
首先,出现这两个问题的原因都是一个,即文件中的现有资源文件和新资源字符串表 ID 冲突。微软也给出了解决这个问题的方法,但是,在现有的情况下,这个方法是靠不住的,因为,不可能不使用wx.rc资源。所以,一个变通的解决方法就是:
工程属性->配置属性-> 清单工具->输入和输出->嵌入清单,选择[否],即可。

    我在编程中遇到此问题的原因是添加了另外的*111.ppc和resource111.h, 将其从工程中排除即可解决这个错误。

 

5、无法执行添加/移除操作,因为代码元素是只读的

 

在BEGIN_MESSAGE_MAP(。。。)
//这里要删掉你原先已经增加过的消息隐射函数
END_MESSAGE_MAP()
你肯定手动删除过 又没删干净 又重新添加了

1、重启VC
2、打开Resource.h文件看看 一看就知道了 有些定义重复了 可以手动改掉 保存 编辑器重新加载 。。。。。。。。
3、关闭解决方案,删除ncb文件重新添加即可
4、实在不行就手动添加消息处理
5、查看.h和.cpp文件的属性,有可能是只读的,修改属性后就可以了
6、把你要添加事件的对话框相应的类文件(*.h和*.cpp)给关了就可以了

 

推荐第三种

 

6、在程序开始时灰化菜单按钮

  CMainFrame *pFrame = (CMainFrame *)AfxGetApp()->GetMainWnd();
  g_pView->m_bCoordinateChange = TRUE;
  CMenu* mmenu = pFrame->GetMenu();
  //CMenu* submenu = mmenu->GetSubMenu(0);
  mmenu->EnableMenuItem(ID_File_New, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);

 

7、坐标转换后图斑消失的问题

BUG:在对面进行坐标转换时,图斑上的点可以转换过去,但是图斑无法显示。描述和解决方法如下
一、描述
在添加地籍功能“坐标转换”时,刚开始我用以下代码对面进行转换:
//*//
//遍历“建筑物”层,精准土地
OGRShapeLayer *pShapelayer = (OGRShapeLayer *)m_pControlDatasource->GetLayerByName("建筑物");
pLayer = m_pControlDatasource->GetLayerByName("建筑物");
pLayer->ResetReading();
while ( (pFeature = pLayer->GetNextFeature() ) != NULL)
{
OGRLinearRing *pLine = ((OGRPolygon *)pFeature->GetGeometryRef())->getExteriorRing();
if (pFeature->GetFieldAsInteger("是否转换") == 0)
{
OGRPoint linepoint;
for (int i = 0; i<pLine->getNumPoints(); i++)
{
res=para.converse(pLine->getX(i),pLine->getY(i),mid.X,mid.N);
pLine->setPoint(i,res.x,res.y);
}
pFeature->SetField("精度", res.precision);
pFeature->SetField("是否转换",1);
OGRPolygon *ppolygon = new OGRPolygon;
pLine->closeRings();
ppolygon->addRing(pLine);
pFeature->SetGeometryDirectly(ppolygon);
pLayer->SetFeature(pFeature);

if (OGRERR_NONE != pShapelayer->CreateFeatureDyn(pFeature))
{
PostMessage(ERROR_FULLDISK);
}
}
OGRFeature::DestroyFeature(pFeature);

}
pShapelayer = NULL;
*//
但是发现可以把图斑坐标转换过去,但是无法显示(消失了)。
二、原因和解决方法如下:
由于程序对外业调查polygon层创建了动态索引,这种索引存在于内存中,可以随时增加、删除、修改,(底图使用的时静态索引,静态索引序列化到硬盘中,程序关闭了还存在,但是它一旦创建了就无法修改);
因此我在进行过坐标转换之后,应当调用CreateFeatureDyn(),才能使该图斑真正存在于该层中,才能正常显示。

具体代码是:
在每转换过一个图斑后,加上下面代码即可解决问题:
if (OGRERR_NONE != pShapelayer->CreateFeatureDyn(pFeature))
{
PostMessage(ERROR_FULLDISK);
}

 

8、加载Core.dll出现的问题及解决

这是由于我在APP中加载全局参数时出了问题,不小心写成了死循环,因此程序会卡在这里,正确代码如下:

  //是否已经进行过坐标转换? m_nIsConverted=1 是, m_nIsConverted=0 否
  CString szIniJingZhun = g_strPrjPath + _T("//IsCoordinateConverted.ini");

  MIDDATAFile sFileJingZhun;

  if (sFileJingZhun.Open(ceUtility::to_ansi_string(szIniJingZhun), "r") == 0)
  {
   CPLString strBuffer;
   CPLString szTemp; 
   char  *token;
   char  *pszEnd = NULL;
   CPLString strCode; //字段的名字
   CPLString strSeps = ":/t/n";
   const char *szLine;
   int i;

   //
   // 文件格式如下:
   //ISCONVERTED:                  是否转换

   while (szLine = sFileJingZhun.GetLine())
   {
    token = strtok((char *)szLine, strSeps);
    for (i=0; token!=NULL; i++)
    {
     if (i==0)
     { // 地类
      strCode = token;
     }
     if (_stricmp(strCode, "ISCONVERTED") == 0)
     { // 是否转换
      theApp.m_nIsConverted =  strtol(token,&pszEnd,10);

      //CString temp;
      //temp.Format(_T("%d"),theApp.m_nIsConverted);
      //AfxMessageBox(temp);
     }
     token = strtok(NULL, strSeps);
    }
    
   }
   sFileJingZhun.Close();
  }
  else
  { // 配置文件 不存在
  }

 

9、改变DrawText()中字体的颜色(在drawlayer中)

 COLORREF   clrOldUpText  = pDC->SetTextColor(RGB(249,126,68));

 pDC->DrawText(szUpText, &textrect, DT_CENTER|DT_TOP);

 pDC->SetTextColor(clrOldUpText);

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值