2008年5月26日

输出文件的设置

   VS2005中输出文件的路径可以在[Project]-[Project Propertys]-[Linker]-[General]选项卡中的Output File处指定。

   前几天突然发现对于DLL项目的LIB文件的输出路径也可以设置,设置位置为:
[Project]-[Project Propertys]-[Linker]-[Advanced]选项卡中的Import library处指定。
看来这个名称不能只看字面意思。

posted @ 2008-05-26 11:51 迷宫の未来 阅读(424) | 评论 (1)编辑 收藏

GSensor的角度计算

   目前负责关于GSensor的模式识别,这里贴出自己的研究成果,供自己备忘。
ACCEL_DIRECTION CGSensorModule::CalDirection(smb380acc_t& a_xyz,const unsigned char nAccelRange, double* pdbAngle)
{
    ACCEL_DIRECTION adNew 
= AD_UNKNOWN;
    
double dbAngle = 0;
    
// expressions: tan(angle) = a_xyz.x / a_xyz.y
    
// angle is start from AD_LAYRIGHT

    
// notice:    1. a_xyz.x and a_xyz.y should not be small together, so we need to give a liminal value
    
//            2. the a_xyz.z should be enough small to ensure the G-Sensor is vertical,
    
//                the degree is 45, means abs(a_xyz.z) should not larger than nAccelRange*sin(45)
    if((abs(a_xyz.x) < nAccelRange/10
        
&& (abs(a_xyz.y) < nAccelRange/10)
        
|| abs(a_xyz.z) > (nAccelRange*0.707))
    
{
        dbAngle 
= nAccelRange;
        
return AD_UNKNOWN;
    }


    
float fTanValue = float(a_xyz.y)/float(a_xyz.x);
    dbAngle 
= atan(fTanValue);
    
// AD_LAYRIGHT or AD_LAYLEFT
    if(fTanValue>-1 && fTanValue<1)
    
{
        
if(a_xyz.x>0)
        
{
            adNew 
= AD_LAYRIGHT;
        }

        
else
        
{
            dbAngle 
+= PI;
            adNew 
= AD_LAYLEFT;
        }

    }

    
else
    
{
        
if(a_xyz.y>0)
        
{
            
if (dbAngle<0)
                dbAngle 
+= PI;
            adNew 
= AD_LAYUP;
        }

        
else
        
{
            
if (dbAngle>0)
                dbAngle 
-= PI;
            adNew 
= AD_LAYDOWN;
        }

    }


    
if(dbAngle<0)
        dbAngle
+=(PI*2);

    
if(pdbAngle != NULL)
        
*pdbAngle = dbAngle;
    
return adNew;
}


BOOL CGSensorModule::GetDirection(ACCEL_DIRECTION
& adNew, double* pdbAngle)
{
    CHECK_GSENSOR_HANDLE();
    smb380acc_t a_xyz;
    unsigned 
char nRange;
    
if(!GetAccelXYZT(a_xyz))
    
{
        
return FALSE;
    }

    
if(!GetRange(nRange))
    
{
        
return FALSE;
    }

    adNew 
= CalDirection(a_xyz,MAX_ACCELRANGE/(2<<nRange),pdbAngle);
    
return TRUE;
}

posted @ 2008-05-26 11:37 迷宫の未来 阅读(3983) | 评论 (4)编辑 收藏

得到最前端AP的名称

   PC上和WCE上对于获取最前端AP的名称方法不同。

   PC上的做法:
TCHAR szApName[MAX_PATH];
TCHAR szExeName[MAX_PATH]
={0};
HWND hWnd 
= ::GetForegroundWindow();
HMODULE hModule 
= (HMODULE)GetClassLong(hWnd, GCL_HMODULE);
if(hModule!=NULL)
{
    
if(GetModuleFileName(hModule, szApName, MAX_PATH))
    
{
        
// here got the ap name: szApName
    }

}



   WCE上的做法:
TCHAR szApName[MAX_PATH];
TCHAR szExeName[MAX_PATH]
={0};
HWND hWnd 
= ::GetForegroundWindow();
DWORD dwProcessID
=0;
::GetWindowThreadProcessId(hWnd,
&dwProcessID);
HANDLE hProcess 
= OpenProcess(00, dwProcessID);
if(hProcess!=NULL)
{
    
if(GetModuleFileName((HMODULE)hProcess, szApName, MAX_PATH))
    
{
        
// here got the ap name: szApName
    }


    CloseHandle(hProcess);
}


   这里可以看出,差别在于获得Process的句柄上,由于PPC上不支持GetClassLong函数对于GCL_HMODULE参数的定义,所以才有这样的差别。

posted @ 2008-05-26 11:29 迷宫の未来 阅读(521) | 评论 (0)编辑 收藏

关于WCE中的LNK文件

     摘要: WCE的[Windows]-[Start Menu]下有很多的LNK文件,这些是AP的快捷方式。很多程序都喜欢遍历出PPC上的AP,然后进行设置操作,在该目录下进行遍历是很常见的一种做法。  阅读全文

posted @ 2008-05-26 11:11 迷宫の未来 阅读(1889) | 评论 (2)编辑 收藏

WM_SIZE处理

   WCE中变化屏幕方向或者输入法伸展收缩时会触发WM_SIZE消息,该消息处理中可以进行控件的位置移动操作。
   
   这里用源码来说明一切:

void CMyDlg::OnSize(UINT nType, int cx, int cy)
{
    CDialog::OnSize(nType, cx, cy);

    
// TODO: Add your message handler code here
    RECT rect, rectTree;
    GetClientRect(
&rect);
    m_MyCtrl.GetWindowRect(
&rectTree);
    ScreenToClient(
&rectTree);
    rectTree.right 
= rect.right-rectTree.left;
    rectTree.bottom 
= rect.bottom;
    m_MyCtrl.MoveWindow(
&rectTree);
}


   所有的RECT都是相对客户区域的位置,m_MyCtrl.GetWindowRect(&rectTree); ScreenToClient(&rectTree);这两行代码不能替换成m_MyCtrl.GetClientRect(&rectTree); 一行代码,因为GetClientRect始终都是得到整个客户区域的位置,而不是控件的位置。

posted @ 2008-05-26 10:35 迷宫の未来 阅读(1845) | 评论 (3)编辑 收藏

WCE下的CPL开发介绍

     摘要: WCE下的控制面板程序(CPL)与PC上的CPL开发有些许的不同,但总体上是一致的。这里总结一下在开发CPL时的思路。  阅读全文

posted @ 2008-05-26 10:15 迷宫の未来 阅读(1638) | 评论 (0)编辑 收藏

2008年1月30日

通用对话框会导致程序CRUSH?

     摘要: 通用对话框会导致程序CRUSH的解决方案  阅读全文

posted @ 2008-01-30 09:19 迷宫の未来 阅读(1563) | 评论 (3)编辑 收藏

2008年1月23日

智能指针的几点错误操作心得

     摘要: ADO操作经常使用到智能指针,这篇文章介绍了使用智能指针时需要注意的几点  阅读全文

posted @ 2008-01-23 16:30 迷宫の未来 阅读(3262) | 评论 (3)编辑 收藏

2008年1月22日

(转贴)C/C++程序内存泄漏检测

     摘要: 检测内存泄露的三种方法  阅读全文

posted @ 2008-01-22 09:48 迷宫の未来 阅读(1610) | 评论 (3)编辑 收藏

2007年12月12日

MFC中一个容易被忽视的问题

     摘要: MFC对话框模式的程序经常有这样一种业务需求:

对话框初始化 --> 取得数据 --> 将数据显示到对话框的控件中

该流程有一个潜在的问题...  阅读全文

posted @ 2007-12-12 10:48 迷宫の未来 阅读(2063) | 评论 (11)编辑 收藏

仅列出标题  下一页
<2024年12月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

导航

统计

常用链接

留言簿(10)

随笔档案

文章档案

最新随笔

搜索

积分与排名

最新随笔

最新评论

阅读排行榜

评论排行榜