EVC编程经验点滴(一)

来源:互联网 发布:ios sql语句高级 编辑:程序博客网 时间:2024/05/21 06:24

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"");即可