EVC编程经验点滴(一)
1.char *_gcvt( double value, int digits, char *buffer )函数使用问题
功能: 将浮点型数据转换为字符串
digits不能超过16,否则计算精度将出问题.
例如:
double preNum=9.7;
double nextNum=1;
double dblResult=preNum+nextNum;
CString dispText;
dispText=_gcvt(dblResult,20,charBuffer);
理论上dispText为10.7,但实际结果为10.6999999999999999
如果将最后一句改为:
dispText=_gcvt(dblResult,16,charBuffer);
则结果正常.
由此推测,digits参数应该在16以下
2.有段代码:
CFileDialog dlg(FALSE,L"wavtr");
if(dlg.DoModal()==IDOK)
{
AfxMessageBox(dlg.GetPathName());
}
此代码检测出的文件名为××.wav,后面的“tr”不见了,BUG?
3.
我在CE应用程序中使用了如下语句,想在任务栏托盘上显示一个图标,可是怎么都显示不出
来,只是多了一个方框,并且消息都能正常响应,不知道程序错在哪里?
程序在PC上运行正产,在EVC上就不正常,求大虾指点!
m_tnid.cbSize=sizeof(NOTIFYICONDATA);
m_tnid.hWnd=m_hWnd;
m_tnid.uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP;
m_tnid.uCallbackMessage=WM_TRAY_NOTIFY;
//用户定义的回调消息
CString szToolTip=L"托盘图标实例";
_tcscpy(m_tnid.szTip, szToolTip);
m_tnid.uID=IDI_ICON2;
HICON hIcon=NULL;
hIcon=AfxGetApp()->LoadIcon(IDI_ICON2);
m_tnid.hIcon=hIcon;
::Shell_NotifyIcon(NIM_ADD,&m_tnid);
解答:必须使用16*16的ico图标
3.写注册表,关键点在于值的类型不同,转换的也不同
HKEY hOpenKey;
DWORD dwOpenStyle;
long lResult=0;
LPCTSTR keyName;
DWORD dwKeyValue;
LPCTSTR strKeyValue;
LPCTSTR dwKeyName;
keyName=L"ControlPanel//Volume";
lResult=RegCreateKeyEx(HKEY_CURRENT_USER,keyName,0,L"Volume",0,0,NULL,&hOpenKey,&dwOpenStyle);
dwKeyName=L"Volume";
strKeyValue=L"wowo";
dwKeyValue=789;
lResult=RegSetValueEx(hOpenKey,dwKeyName,0,REG_SZ,(BYTE*)strKeyValue,wcslen(dwKeyValue)*2); //写字符串
lResult=RegSetValueEx(hOpenKey,dwKeyName,0,REG_DWORD,(LPBYTE)&dwKeyValue,sizeof(DWORD)); //写DWORD类型
if(lResult!=ERROR_SUCCESS)
{
AfxMessageBox(L"B");
}
RegCloseKey(hOpenKey);
4.把窗口放到最前
HWND hwnd;
if(hwnd = FindWindow( LPCTSTR lpClassName,LPCTSTR lpWindowName ))
{
SetForegroundWindow(hwnd);
}
5.设置窗口标题
直接使用SetWindowText(L"");即可