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);