winCE 常见问题解答(一)

1.怎样在一个控件获得焦点时打开软键盘?

比如一个EditBox获得焦点后,这个时候自动打开软键盘,这样可以方便用户输入——SIPINFO、SHSIPINFO、SIPSETINFO、SIPGETINFO里面有些参数弄不明白

//隐藏输入面板
BOOL LowerSip()
{
BOOL fRes = FALSE;
SIPINFO si;
memset( &si, 0, sizeof( si ) );
si.cbSize = sizeof( si );
if( SHSipInfo( SPI_GETSIPINFO, 0, &si, 0 ) )
{
si.fdwFlags &= ~SIPF_ON;
fRes = SHSipInfo( SPI_SETSIPINFO, 0, &si, 0 );
}
return fRes;
}

//升起输入面板
BOOL RaiseSip( void )
{
BOOL fRes = FALSE;
SIPINFO si;
memset( &si, 0, sizeof( si ) );
si.cbSize = sizeof( si );
if( SHSipInfo( SPI_GETSIPINFO, 0, &si, 0 ) )
{
si.fdwFlags |= SIPF_ON;
fRes = SHSipInfo( SPI_SETSIPINFO, 0, &si, 0 );
}
return fRes;
}
再试试下面这些:
//SHSipPreference(m_hWnd, SIP_UP);//弹出输入面板
//SHSipPreference(m_hWnd, SIP_DOWN);//隐藏输入面板(有一个时延)
//SHSipPreference(m_hWnd, SIP_FORCEDOWN );//隐藏输入面板(立即)
//SHSipPreference(m_hWnd, SIP_UNCHANGED );
//一般只用在调用SIP_DOWN时的的后面,使这个命令无效

--------------------------------------------------------------------------------

2.WinCE下字符串-数字转化的问题!

在VC6.0下,把#include <stdlib.h>、#include <stdio.h>两个文件包括进去后,下面这段代码一点问题没有,
CString str1,str2;
str1="123";
str2="123.4";
int i;
float j;
i=atoi(str1);
j=atof(str2);
但是在EVC3.0里面,却出现了问题:提示atof没有定义,atoi也不能正常转化。

用wcstoi,wcstof, wcstol和wcstod

--------------------------------------------------------------------------------

3. 我新拿了一个Pocket Pc,编了几个程序,但发现对话框都只能全屏显示,这是为什么?

一般在Pocket PC中所有的对话框都是全屏显示,这是操作系统规定的行为。但如使用系统自定义的信息提示框,则不是全屏显示。如: Afxmessagebox所激发的提示框就是如此。
可以重载WM_INITDIALOG消息
MSDN:
The DialogBox macro uses the CreateWindowEx function to create the dialog box. DialogBox then sends a WM_INITDIALOG message to the dialog box procedure. The function displays the dialog box (regardless of whether the template specifies the WS_VISIBLE style), disables the owner window, and starts its own message loop to retrieve and dispatch messages for the dialog box.

就是说当对话框窗口创建完以后,会发出一个WM_INITDIALOG 消息,你只要在自己的窗口消息处理函数里对这个消息进行处理,就可以了
比如:

case WM_INITDIALOG:
// Create a Done button and size it.
shidi.dwMask = SHIDIM_FLAGS;
shidi.dwFlags = SHIDIF_DONEBUTTON | SHIDIF_SIPDOWN | SHIDIF_SIZEDLGFULLSCREEN;
shidi.hDlg = hDlg;
SHInitDialog(&shidi);
InitOptionDlg(hDlg);
return TRUE;

主要就是修改shidi.dwFlags ,看看ABOUT的窗口消息处理吧
补充: SHINITDLGINFO shidi;
SHINITDLGINFO shidi;
上面说的是在纯API的程序中的方法
对于MFC创建的DIALOG程序,可以这样:

BOOL CXXXDlg::OnInitDialog()
{

SHINITDLGINFO shidi;
HWND hDlg = m_hWnd;
// Create a Done button and size it.
shidi.dwMask = SHIDIM_FLAGS;
shidi.dwFlags = SHIDIF_SIPDOWN ;
shidi.hDlg = hDlg;
SHInitDialog(&shidi);
//InitOptionDlg(hDlg);
//CDialog::OnInitDialog();
……

}

--------------------------------------------------------------------------------

4.在eVC基于MFC的程序中如何将ToolBar栏隐藏

关于ToolBar的隐藏:
首先,如果你是用MFC向导创建的工程,则默认会生成ToolBar,我要说的是,干掉它!自己来创建。:)
First,声明CToolBar成员变量:
CToolBar * d_pToolbar2;
然后……
static UINT BASED_CODE Toolbar2Buttons[] =
{
// 下面是工具栏对应菜单的ID,工具栏图标是我弄的一个Bitmap,其ID为IDR_ADD_TOOLBAR
ID_FILE_NEW,
ID_FILE_OPEN,
ID_FILE_SAVE,
ID_SEPARATOR,
ID_EDIT_CUT,
ID_EDIT_COPY,
ID_EDIT_PASTE,
ID_SEPARATOR,
ID_TRANS_DICT,
ID_TOOLBAR_SHOW, //这是新加入的菜单项,点击隐藏工具栏,再点击就显示工具栏
};
然后……
在CMainFrame的OnCreate()中加入:
OnToolbarCreate();
然后……
void CMainFrame::OnToolbarCreate()
{
// Should only get here if we don't have a toolbar.
ASSERT(d_pToolbar2 == 0);
// Create C++ object and WinAPI window.
d_pToolbar2 = new CToolBar();
d_pToolbar2->Create(this, WS_CHILD | CBRS_BOTTOM |
CBRS_SIZE_FIXED | CBRS_FLOATING,
0x9100);
// Get bitmap and connect to tool items.
d_pToolbar2->LoadBitmap(IDR_ADD_TOOLBAR);
d_pToolbar2->SetButtons(Toolbar2Buttons,
sizeof(Toolbar2Buttons)/sizeof(UINT));
// Make toolbar dockable.
d_pToolbar2->EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(d_pToolbar2);
}
然后……
void CMainFrame::OnToolbarShow()
{
ASSERT(d_pToolbar2 != 0);

// Query current visibility.
BOOL bVisible = (d_pToolbar2->GetStyle() & WS_VISIBLE);

// Show or hide.
int nShow = (bVisible) ? SW_HIDE : SW_SHOWNORMAL;
d_pToolbar2->ShowWindow(nShow);

// Reconfigure remaining toolbar items.
RecalcLayout();

// Store visibility state for later.
d_bToolbarVisible = (!bVisible);
}

void CMainFrame::OnUpdateToolbarShow(CCmdUI* pCmdUI)
{
//This function is signed for checking the menu 'Edit|Show Toolbar'
pCmdUI->Enable(d_pToolbar2 != 0);
int nCheck = (d_bToolbarVisible) ? 1 : 0;
pCmdUI->SetCheck(nCheck);
}

OK,默认情况下ToolBar是隐藏的,点击菜单中的新加入的隐藏/显示工具栏命令即可来回切换了。

--------------------------------------------------------------------------------

5.如何制作pocket Pc 下的安装程序?

在C:/Windows CE Tools/wce300/MS Pocket PC/support/ActiveSync/windows ce application installation 下面有例子.
也有其它第三方的安装工具,比如installshield。

--------------------------------------------------------------------------------

6.怎样在主界面中显示一幅图片

我做了一个小程序, 想在主界面中显示一幅图片,我的图片是.JPG格式的,如果需要转换,用什么工具?

把JPG图转为BMP图咯,网上有不少这样的程序。
然后用LoadBitmap、SelectObject、StretchBlt等语句把BMP图显示到VIEW中。


--------------------------------------------------------------------------------

7. 请问,在WinCE下如何截获所有鼠标和键盘的消息?

wince下只能用三种钩子
#define WH_JOURNALRECORD 0
#define WH_JOURNALPLAYBACK 1
#define WH_KEYBOARD_LL 20

--------------------------------------------------------------------------------

8.在Pocket PC下用eVC作的对话框能否做成不是全屏的?

在MFC中

m_bFullScreen = FALSE;


--------------------------------------------------------------------------------

9.如何将char 类型的中文字符串转换成Unicode的字符串?

MultiByteToWideChar,在仿真器中无效;你也可以通过其他方法;用wcsprintf这个函数


--------------------------------------------------------------------------------

10. evc单文档界面中,菜单左边总有一个"new",如何将其去掉?

在MainFrm的OnCreate内找到这个:
m_wndCommandBar.m_bShowSharedNewButton = TRUE;
把TRUE改为FALSE

--------------------------------------------------------------------------------

11.Edit出现上下文菜单问题?

近来我看了一下SDK带的Sample中的Npp,其中它有一个功能就是在EDIT上出现上下文菜单,可是当我仿照它在自己的项目中添加此功能时,即在资源中添加CONTROL "",IDC_STATIC,"SIPPREF",NOT WS_VISIBLE,-10,-10、,6,6,在模拟器中正常,但在PDA中不能显示包含Edit的对话框。而Npp可以在两者正常显示。我又在Npp中增加一个对话框,也相应的改变资源,结果是在模拟器和PDA中都能正常显示。

调用SHInitExtraControls()应该在构造函数,不应在OnInitDialog中。如果在OnInitDialog中调用,包含EDIT的对话框将不显示。
事实上在XXXApp::InitInstance函数中调用更好,这样只需调用一次,就万事大吉。

--------------------------------------------------------------------------------

12. 如何将.mdb数据库转换为.cdb数据库

如何将.mdb数据库转换为.cdb数据库,在没有实际PDA,只有Pocket PC Emuliation和EVB的情况下。
Pocket PC Emuliation运行时为何提示“存储器不足,无法完成操作”?

此问题微软已经给出了答案。
在SDK文档中有一个叫做device的例子程序,它就是将tdb文件转化成cdb文件的,而还有一个desktop的程序,它是将mdb文件转化成tdb文件的。


--------------------------------------------------------------------------------

13.请问如何用EVC建立和调用DLL

我按照帮助中用MFC开发DLL的例子做,但是另外一个程序调用的时候的时候却出现连接错误,说找不到那个函数。后来看了EVC的例子spintest之后也是这样。

和在WINDOWS下的一样
是不是LINK2001 ERROR?
你如果是隐式调用(就是不用LOADLIBRARY()的),要把你的DLL的LIB文件在PROJECT-->SETTINGS--->LINK--->INPUT里指明。

--------------------------------------------------------------------------------

14.编辑框如何自动会换行 ?

请教,Plam中的table控件,在Wince上怎么做?
就是编辑框自动会换行.当你输入的内容超过一行,自动切换到下一行,下面的内容自动往下滚。

勾选编辑控件的MultiLine,如果想输入回车换行,再勾选want renturn

--------------------------------------------------------------------------------

15.是否在adoce,pocket access中的update语句不能执行?

ADOCE不能直接执行UPDATE语句,但ADOCE有Update方法,你可用它实现。


--------------------------------------------------------------------------------

16.请问如何在Windows CE中实现BC++中的inport(...)与outportb(...)函数功能?

CE下,可以用WINDOWS API函数来对端口操作。 比较简单。
API一般只要用到CreateFile(打开端口,串口操作和文件操作只有一点不同就是打开方式不同,所以第三个参数要用 OPEN_EXISTING )
COMMTIMEOUTS、DCB两个结构是存放设置参数的,可以改
WriteFile、WriteFile(读写端口)
因为串口通讯用的是异步通讯,所以下面两句比较重要
SetCommMask(指定监视的端口事件)
WaitCommEvent(等待端口事件)

--------------------------------------------------------------------------------

17. 如何显示一个对话框让用户选择一个目录而不是文件

没有标准的函数处理这个,你只好自己实现活使用第三方的解决方案。


--------------------------------------------------------------------------------

18.有没有办法(API)激活或禁止电源保存模式?

参看SystemIdleTimerReset()的安装文档。创建一个包含象睡眠的无限循环的线程,然后调用SystemIdleTimerReset()。也许有一种中断线程的办法就是程序退出。


--------------------------------------------------------------------------------

19. Windows CE的文件名最小程度是多少?

在windef.h定义了MAX_PATH,普遍应该是260个字符。

20. 我使用CFileDialog创建了一个浏览按钮,默认目录始终是显示"All Folders"和在"/My Device/My do***ents"下。怎样改变初始目录到"/My Device"。使用fileDlg.m_ofn.lpstrInitialDir = TEXT("file://My/ Device");,但是没有改变默认显示的目录。
lpstrInitialDir指向一个指定初始文件目录的字符串。如果为NULL,将使用系统的根目录。尽量尝试一下lpstrInitialDir为NULL。


--------------------------------------------------------------------------------

21.在Pocket PC任务栏上可能有X和OK按钮吗?

不可能,至少没有象WisBar的第三方工具。


--------------------------------------------------------------------------------

22.如何禁止用户改变日期和时间?有可能实现吗?

你可能用自己的程序替代/windows/clock.exe,但是,它们可以通过另外的程序处理这个。同样,在同步时ActiveSync改变设备的时间与PC匹配。


--------------------------------------------------------------------------------

23.  我有一个xscal cpu的ipaq 3970设备,但是在eMbedded Visual C++ 3.0上没有目标类型。我应该在EVC3.0上使用什么类型。这个问题也发生在安装程序Cabwiz.exe上。

你可以使用ARM类型。XScal基于ARM体系。


--------------------------------------------------------------------------------

24.  如何使程序在后台运行?

最小化程序将使程序进入后台,因此只要在程序启动时最小化,那么它将运行在后台。

补充:还可以做成service。
--------------------------------------------------------------------------------

25.  我准备去掉SIP按钮。我在OnInitDialog事件中使用SHFullScreen。然而SIP按钮仍然可见,忘记做什么了吗?

代码如下:

// SHFullScreen fails if dialog box is not foreground.
SetForegroundWindow();
// Go to the full screen mode
SHFullScreen(m_hWnd, SHFS_HIDESIPBUTTON | SHFS_HIDESTARTICON);


不能在OnInitDialog中使用SHFullScreen,因为对话框还没有可见。你应该传递一个自定义消息,在那个消息调用这个函数。

也许下面这段代码会有用:

void PFCSipButtonShow( BOOL bShow )
{
HWND hWnd = ::FindWindow( _T( "MS_SIPBUTTON" ), NULL );
if (hWnd == NULL)
return;

if (bShow)
::ShowWindow( hWnd, SW_SHOW );
else
::ShowWindow( hWnd, SW_HIDE );

} // PFCSipButtonShow


--------------------------------------------------------------------------------

26. 如何在Pocket PC2002模拟器上安装Pocket PC程序?

PPC2002模拟器没有模拟ARM处理器,因此你必须有x86 CPU的二进制文件和相应的安装程序。只需使用文件浏览器复制cab文件到模拟器,然后执行它。商业程序的安装包通常不包含x86的二进制程序。如果你没有x86处理器的程序发布版本,你不能做这个安装。如果程序是你自己的,你可以创建一个x86的版本,之后创建一个安装CAB。


--------------------------------------------------------------------------------

27.  如何在eVC程序中读取普通的图标文件?

在PC程序中使用ExtractIconEx(),但是在Pocket 设备好象不工作。缺少了什么?PC图标文件在Pocket PC环境是非法的?或者需要转换格式?

不幸的是,在Pocket PC上没有API去读取图标。因此,你不得不手工解析图标文件。

--------------------------------------------------------------------------------

28. 如何绘制一个透明的圆呢?

我想使用eVC++和GDI在Pocket PC 2002上绘制一个圆。我使用它绘制了直线,它处理的很好:

hbrOld =(HBRUSH) SelectObject(hDC, CreatePatternBrush(RGB(0,255,0)));
hpnOld =(HPEN) SelectObject(hDC, CreatePen(PS_SOLID, 2, RGB(255,0,0)));
Ellipse( hDC, 10, 10, 20, 20);
DeleteObject( SelectObject (hDC, hbrOld) );
DeleteObject( SelectObject (hDC, hpnOld) );

但是如何绘制一个透明的圆呢?有PS_NULL这样画笔类型吗?

可以使用GetStockObject()得到一个NULL_BRUSH或HOLLOW_BRUSH(这两个是相同的)。然后用SelectObject选择它,就象你已经做的那样。

--------------------------------------------------------------------------------

29.  假定我知道程序的名称,关闭运行着的eVC的程序使用什么API?

如果你知道程序的名称,并且假定与主窗口的名称相同,那么你可以使用FindWindow得到那个窗口的句柄,然后传送WM_CLOSE消息到那个窗口。

HWND hwnd = FindWindow(NULL, _T("APPLICATION NAME"));
if ( hwnd)
PostMessage(hwnd, WM_DESTROY, 0, 0);


--------------------------------------------------------------------------------

30.  如何从PC设置PDA的时间?

最简单的办法是写一个自定义的RAPI函数,通过CeRapi调用设备的SetSystemTime.


--------------------------------------------------------------------------------

31.  怎样使用WriteBinary,我不明白第二个参数(LPBYTE):

BOOL CVORegistry::WriteBinary(LPCTSTR pcszKey, LPBYTE pData, DWORD cbData)

第二个参数是指向包含你想写到注册表的二进制数据的缓冲。

BYTE data[] = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef };
extern CVORegistry reg;
reg.WriteData(_T("BinaryData"), data, sizeof(data));

--------------------------------------------------------------------------------

32.  Windows CE支持钩子API吗?这样我们可以监视需要的时间。如果支持,用法也象Windows 2000那样吗?

坏消息:CE不支持钩子。
系统不支持,我们还是可以想其他办法的……

--------------------------------------------------------------------------------

33.  我不能使用Pocket PC上CDialog的TitleBar,我能用静态文本框控件替代,使之与TitleBar相似。有办法显示TitleBar吗?

大多数Pocket PC上的对话框是全屏的,没有自己的主题栏,而是使用系统任务栏。你可以创建一个非全屏对话框(象消息框那样)。


--------------------------------------------------------------------------------

34.  如何在程序中关闭(suspend)Pocekt PC?

方法1:虚拟关机键
::keybd_event(VK_OFF, 0, 0, 0);
::keybd_event(VK_OFF, 0, KEYEVENTF_KEYUP, 0);

方法2:调用未公开函数PowerOffSystem()
extern "C" __declspec(dllimport) void PowerOffSystem();


--------------------------------------------------------------------------------

35.  如何在程序中重启(soft reset)Pocket PC?

#include
#define IOCTL_HAL_REBOOT CTL_CODE(FILE_DEVICE_HAL, 15, METHOD_BUFFERED, FILE_ANY_ACCESS)
extern "C" __declspec(dllimport) BOOL KernelIoControl(
DWORD dwIoControlCode,
LPVOID lpInBuf,
DWORD nInBufSize,
LPVOID lpOutBuf,
DWORD nOutBufSize,
LPDWORD lpBytesReturned);
BOOL ResetPocketPC()
{
return KernelIoControl(IOCTL_HAL_REBOOT, NULL, 0, NULL, 0, NULL);
}


--------------------------------------------------------------------------------

36. 如何在程序中硬启动(hardware reset)Pocekt PC?

注意:使用此段代码会将您的Pocket PC的用户数据全部清空。

#include
#define IOCTL_HAL_REBOOT CTL_CODE(FILE_DEVICE_HAL, 15, METHOD_BUFFERED, FILE_ANY_ACCESS)
extern "C" __declspec(dllimport)void SetCleanRebootFlag(void);
extern "C" __declspec(dllimport) BOOL KernelIoControl(
DWORD dwIoControlCode,
LPVOID lpInBuf,
DWORD nInBufSize,
LPVOID lpOutBuf,
DWORD nOutBufSize,
LPDWORD lpBytesReturned);
BOOL HardResetPocketPC()
{
SetCleanRebootFlag();
return KernelIoControl(IOCTL_HAL_REBOOT, NULL, 0, NULL, 0, NULL);
}


--------------------------------------------------------------------------------

37.  以下方法信息不全,无法使用:

1.系统不认识VK_OFF
2.使用哪个dll 和 lib文件?


·  如何在程序中关闭(suspend)Pocekt PC?

方法1:虚拟关机键
::keybd_event(VK_OFF, 0, 0, 0);
::keybd_event(VK_OFF, 0, KEYEVENTF_KEYUP, 0);

方法2:调用未公开函数PowerOffSystem()
extern /"C/" __declspec(dllimport) void PowerOffSystem();

关闭(suspend)
方法1:
//虚拟关机键
::keybd_event(VK_OFF, 0, 0, 0);
::keybd_event(VK_OFF, 0, KEYEVENTF_KEYUP, 0);

方法2:
//调用未公开函数PowerOffSystem()
extern "C" __declspec(dllimport) void PowerOffSystem();

 

收集整理好资料和大家共同学习......

已标记关键词 清除标记
相关推荐
Virace GPS Simulator V0.3.1 自述文件 2009.6.7 ====================================================================== Virace GPS Simulator是什么? ====================================================================== Virace GPS Simulator(以下简称为Virace)用软件模拟GPS接收器输出的GPS语 句,通过串行口输出到GPS应用软件。用鼠标或键盘控制Virace而模拟实际GPS接 收器的运动,或者重播已有的GPS航迹文件,从而在室内测试GPS导航软件等。 Virace具有手动实时控制及航迹重播两种方式。为了控制灵活方便,Virace定义 了许多鼠标及键盘动作。经过少许试用,就可以对照一个大比例尺的导航地图以 超过正常驾车速度行驶在市区及郊区路上。 ====================================================================== Virace运行在什么操作系统下? ====================================================================== Windows ====================================================================== Virace运行的方式 ====================================================================== 1. Windows下的GPS软件可通过Virace的虚拟串口直接测试。 2. Windows下有微软的Device Emulator,因此部分与Device Emulator兼容的 PPC、CE、SP软件可以在Device Emulator中模拟测试,由Virace提供GPS信号。 3. 可以将Virace输出到蓝牙的输出COM口,测试使用蓝牙GPS模块的PPC、SP及 Symbian S60等GPS软件。 4. Virace输出到PC的物理COM口,测试任何与PC物理串口连接的GPS设备 5. 用Virace将plt、gpx、kml、gpssim、trk格式的航迹文件,转为带速度、方 位角,及卫星状态的nmea文件,再在GpsGate内播放。 ====================================================================== Virace的特点 ====================================================================== 四种模式:自由驾驶模式 + 三种航迹重播模式(逐点重放航迹模式,手控速度 航迹模式,比例速度航迹模式)。运行中根据需要可在四种模式间无缝自由切换。 航迹文件支持plt、gpx(含gpx航迹及Garmin详细航线)、kml、gpssim、trk。 可将航迹文件另存为带速度、方位角,及卫星状态的nmea文件。 航迹重播时具有丰富的控制项,可快进、快退,选择某个段,反序,循环,亦可 人为加入左右偏移。 载入航迹时可选过滤掉点数少或距离小的段。 可选与PC版OziExplorer交互运行。通过Ozi API,在Ozi中双击地图上的某点, Virace就立即跳跃至该点(自由驾驶模式),或跳至离该点最近的航迹(航迹 重播模式);单击地图上的某点,则以当前速度向该点行驶(自由驾驶模式)。 最多3路COM口输出,加1路Ozi输出。每路的参数是独立选择的,且可以独立启停。 支持虚拟串口。与Eltima Virtual Serial Port ActiveX Control V2.5及对应的 Eltima Virtual Serial Port Driver兼容。注:Eltima Virtual Serial Port 是共享软件,一切权利归其所有人。Virace的发行包内不包括该虚拟串口驱动及 控件,请自行购买或下载试用版。 多种转向方式。鼠标滚轮,Ozi中单击,键盘左右箭头等。另有键盘45度及10度转 向键。键盘左右箭头及鼠标滚轮的转向灵敏度可自定义。 多个预设的速度键及上下箭头加减速,另外可随时暂停(速度为0,但依然输出GPS 信号)。 在退出时自动保存当前位置(经纬度、速度、方位角等)及所有选择的参数,下次 运行时自动恢复上次退出时的状态。 Virace是绿色软件,不写注册表,无需安装,不向其他目录安装文件。但所支持的 虚拟串口软件需要安装才能运行,在安装过程中会访问注册表。 支持3种经纬度显示及输入方式(度、度分、度分秒)。 随时向粘贴板复制当前经纬度,3种格式任选(度、度分、度分秒)。 支持常用的6种NMEA语句:RMC、GGA、GSA、GSV、GLL、VTG。 可选总在最前。 与Microsoft Device Emulator兼容。 超小的尺寸,极低的CPU资源占用。 GPS信号输出周期可调,最多可模拟10Hz的GPS。 运行状态及4路输出(Ozi+3路串口)状态显示。对虚拟串口,可显示对方是否 已打开该串口。 输出到GPS的速度可设立上下限。 输出到GPS的时间可提前、延后、压缩、扩张。 20个收藏点(经纬度、海拔、方位角)。 ====================================================================== Virace能做什么? ====================================================================== 测试GPS软件。比如不按规划路径行驶时的情况,转向提示,锁路(吸路)阈值, 昼夜转换,测速报警,熟悉目的地地图情况等。 制作航迹。输出到可记录NMEA语句或航迹的GPS软件,即可把行驶的航迹记录下 来,用于Virace或其他航迹播放软件以后重播。 同时多路输出,从而比较不同的GPS软件在同一地点的情况。 转换航迹文件为nmea文件。 ====================================================================== Virace不能做什么? ====================================================================== 目前版本不能自己记录航迹。需借助其他软件记录。 目前版本不支持Garmin协议。但可通过GPSGate转接仿真Garmin协议。 对CE一体机上的GPS软件,若其GPS软件无法在Device Emulator中运行,则无法借 助Virace测试,除非能把PC的物理串口接到CE一体机的CPU串口上(若有的话)。 ====================================================================== 文件列表 ====================================================================== Virace0.3.0chs.exe 简体中文版主程序 Readme0.3.0chs.txt 本自述文件 OziAPI.dll Ozi API的接口,需要与Virace在同一目录,或放入 Windows的System32目录下 Virace0.3.0chs.ini 配置文件(发行的压缩包内无,运行后自动生成),总 是与主程序具有相同的基本文件名,且在同一目录下 Virace0.3.0chs.chm 简体中文版帮助文件(暂缺) ====================================================================== 安装运行 ====================================================================== Virace无需安装,解压压缩包后直接运行Virace即可,退出时在相同的目录下生 成.ini配置文件,所有的配置改变都记录在.ini文件中。若想恢复缺省配置,删 除.ini文件即可。 但所支持的虚拟串口软件需要安装才能运行。 ====================================================================== 主要操作 ====================================================================== 绝大部分参数设置的是最常见值,一般无需改变。若想恢复初始设置,先退出 Virace,删除.ini文件,再次启动Virace即可。 运行后右键点击面板,出现菜单,选“选项”,在“输出1~3”之一或多个勾选 “启用”,设置为自己的COM口号,并根据需要决定是否勾选“虚拟串口”,并 确认RMC、GGA等已勾选,按确定后回到面板按Run按钮即可。 若与Ozi交互,需Ozi已处于运行状态并已调入地图。右键点击面板,出现菜单, 选“选项”,在“输出0(Ozi)”勾选“启用”,并确认RMC、GGA等已勾选,按确 定后回到面板按Run按钮即可。其后可在Ozi中单击地图某点,Virace将驶向该点; 在Ozi中双击地图某点,Virace直接跳跃至该点。 按Run按钮(就是一般媒体播放器中的Play按钮样子的那个)将启动目前已 “启用”,但未启动的输出。Run按钮为灰色时表示当前没有待启动的输出。 按Pause按钮暂时将速度置0,但依然将当前坐标通过选择的串口及Ozi输出,再次 按Pause按钮将恢复原速度。 按Stop按钮停止输出GPS语句,若当前启动了多路输出,则弹出一个对话框询问要 停止哪些路输出。 面板上的状态指示: 输出:代表输出0~3 端口:n表示COMn;Vn表示虚拟COMn。输出0总是显示OZI 状态:黑色指示灯:未在选项中启用 灰色指示灯:已在选项中启用,但未启动,按Run按钮将会启动该路输出 红色指示灯:出错 蓝色指示灯:虚拟串口的输出表示已启动,但对方未打开; Ozi表示已启动,但不向Ozi输出NMEA语句; 非虚拟串口不会显示蓝色 绿色指示灯:虚拟串口的输出表示已启动,且对方已打开; Ozi表示已启动,且向Ozi输出NMEA语句; 非虚拟串口表示已启动(非虚拟串口无法感知对方是否打开) ====================================================================== 鼠标及键盘 ====================================================================== 右击面板:菜单,选其中的“快速帮助”会显示鼠标及键盘操作 双击面板:视双击的位置,按当前经纬度格式调出输入当前位置的对话框,或输 出1~3及Ozi选项 鼠标滚轮:转向(自由驾驶模式),或快进快退(航迹重播模式)。灵敏度可在 “选项->杂项”中定义,负值则反转方向 鼠标左键+滚轮:加减速 鼠标右键+滚轮:视光标的位置,改变经纬度、高度、速度、方位角、航迹段、航 迹点、偏移等 单击鼠标滚轮:Pause Ozi中单击地图某点,驶向该点(自由驾驶模式) Ozi中双击地图某点,跳跃至该点(自由驾驶模式),或跳至离该点最近的航迹 (航迹重播模式) Enter:快速帮助 F1:chm帮助(暂无对应的chm文件) F2:Run 空格:Pause Esc:Stop 左右箭头:转向,可按住连续转向,在“选项->杂项”中可按3段设置灵敏度(自由 驾驶模式) Z或<:左转向45度(自由驾驶模式) X或>:右转向45度(自由驾驶模式) Q或O:左转向10度(自由驾驶模式) W或P:右转向10度(自由驾驶模式) F5、F6、F7、F8:方向设置为正北、正东、正南、正西(自由驾驶模式) 上下箭头:加减速(不含逐点重放模式) ~ 1 2 3 4 5 6 7 8 9 0:速度分别设为 5 10 20 30 40 50 60 80 100 120 0 Km/h (自由驾驶模式、手控速度航迹重播模式) ~ 1 2 3 4 5 6 7 8 9 0:速度比例分别设为 0.2 0.3 0.5 0.75 1 1.5 2 3 5 10 0 (比例速度航迹重播模式) A或L:向左跳跃一步,方向不变,可按住拍发。步长可在“选项->杂项”中定义 S或分号:向右跳跃一步,方向不变 Y H B G:向北、东、南、西跳跃一步,方向不变(自由驾驶模式) U N V T:向东北、东南、西南、西北跳跃一步,方向不变(自由驾驶模式) 按住Ctrl再按跳跃键:轻度加速鼠标及键盘的控制 按住Shift再按跳跃键:中度加速鼠标及键盘的控制 按住Ctrl及Shift再按跳跃键:重度加速鼠标及键盘的控制 Ctrl + 1~0:跳至收藏点1~10 ====================================================================== 常见问题解答 ====================================================================== ---------------------------------------------------------------------- 运行时弹出对话框:“由于应用程序配置不正确,应用程序未能启动。重新安装 应用程序可能会纠正这个问题。”,如何解决? ---------------------------------------------------------------------- 电脑里缺少某些VC8.0的运行库文件。 下载并安装这个网页里的安装包即可: http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=32bc1bee-a3f9-4c13-9c99-220b62a191ee ---------------------------------------------------------------------- 何时需要勾选“选项”中的“虚拟串口”? ---------------------------------------------------------------------- 要从PC真正存在的物理串口输出,不选“虚拟串口”。 被测软件为虚拟串口(比如GPSGate的Virtual COM,蓝牙的输出串口等),不选 “虚拟串口”。 被测软件要打开的是已存在的串口,选“虚拟串口”。比如Virace输出到Device Emulator、GPSMapEdit、GlobalMapper、GPSGate的普通COM口等。 ---------------------------------------------------------------------- 被测软件与Virace运行顺序有何要求? ---------------------------------------------------------------------- 若Virace用虚拟串口输出,则Virace先Run,再运行被测软件。结束时先停止被 测软件,再退出Virace,否则Virace退出时被测软件尚未关闭串口,Virace无法 释放自己创建的虚拟串口,在退出时显示警告信息。 若被测软件负责创建虚拟串口,则先运行被测软件。 ---------------------------------------------------------------------- 感觉在“选项”中改变某路输出的“启用”、COM口号等时不起作用 ---------------------------------------------------------------------- 需要下次Run时才起作用。 但改变某路输出的“时间间隔”及NMEA语句的选择是立即起作用的。 ---------------------------------------------------------------------- 三种航迹重播模式的介绍 ---------------------------------------------------------------------- 逐点重放:不插值,把航迹文件内的坐标点逐个重播; 手控速度:根据手控速度沿航迹行驶,坐标插值 比例速度:根据航迹文件内的时间码计算速度,再乘上可以控制的速度比例(缺 省为1.00,也就是当前速度等于航迹内的原始速度),按得到的速度沿道路行驶, 坐标插值 ---------------------------------------------------------------------- 自由驾驶模式如何沿道路行驶? ---------------------------------------------------------------------- 若被测软件是不锁定道路的,比如GPSMapEdit、Ozi等,且地图比例尺足够大, 直接看被测软件窗口即可。 否则需要借助其他软件的显示。若有大比例尺定位又准的Ozi地图,首选Ozi,因 为可以与Ozi交互。或者使用mp文件在GPSMapEdit中显示也可(用Level0显示)。 ---------------------------------------------------------------------- 感觉被测软件屏幕显示与Virace操作间有较大延迟 ---------------------------------------------------------------------- 操作时观看的显示软件的那路输出的“时间间隔”选小一些,比如200ms,当然 要求显示软件的刷新率能跟上。Device Emulator非常耗CPU资源,不建议作为操 作时观看的显示。 ---------------------------------------------------------------------- 到Ozi的“时间间隔”已选为200ms,但感觉Ozi中的箭头好像1秒才动一次 ---------------------------------------------------------------------- 在Ozi中将Configuration->Moving Map->Screen Update Rate选为0即可。 ---------------------------------------------------------------------- 为什么在有的软件中当GPS速度为0或很小时Virace改变座标或方位角不起作用? ---------------------------------------------------------------------- 有些GPS软件在收到的GPS速度很小时,为了防止真实GPS的静态漂移现象,而做 出的过滤措施。对这种软件,在用真实GPS时,需要你动起来。在Virace中,如 果你确实需要停下来时改变座标等,可以这样做: 在“选项->GPS”中设“下限”为10左右,再在面板按数字0键,将速度设为0。这样 你的位置不再自动改变,而输出到GPS软件的速度是10Km/h。再在Virace中改变 座标等就可以在GPS软件中更新了。 ---------------------------------------------------------------------- 如何配置Device Emulator的串口映射? ---------------------------------------------------------------------- 在配置->外围设备->串行端口0中选择Virace创建的虚拟COM口号即可,注意不要 选带NULL字样的那个。此时被模拟的WM/CE GPS软件用COM1. ---------------------------------------------------------------------- 为什么Virace经GPSGate输出到Device Emulator不工作? ---------------------------------------------------------------------- 这是GPSGate虚拟串口与Device Emulator之间的兼容性问题,用Virace的虚拟串 口直接输出到Device Emulator即可。 ---------------------------------------------------------------------- 为什么Virace输出到CE ROM的Device Emulator不工作? ---------------------------------------------------------------------- Device Emulator模拟某些CE版的ROM时,其串口映射有问题。下载正确的Win CE ROM即可解决此问题。 ---------------------------------------------------------------------- 为什么输出到Garmin nRoute不工作? ---------------------------------------------------------------------- Garmin nRoute需要Garmin协议,请用GPSGate的Virtual COM / Garmin Emulator 输出转接。 ---------------------------------------------------------------------- “速度”与“GPS速度”有何区别? ---------------------------------------------------------------------- 速度是运动的真实速度,GPS速度是输出到被测软件的速度,两者可以相同,也 可以不同。比如想以200Km/h的速度驾驶,又不想听被测软件频繁的超速报警声, 可以将GPS速度上限定在50。一般GPS导航软件使用GPS输出的速度,而不是通过 经纬度的变化自己计算速度。 上下限的设置在“选项->GPS”中 GPS速度与上下限的关系: 若 下限>上限,则 GPS速度=上限; 否则 下限<=GPS速度<=上限(即若速度介于上下限之间,则GPS速度=速度, 否则受上下限约束) ---------------------------------------------------------------------- 为什么Virace显示的座标与被测GPS软件显示的座标有时有小差距? ---------------------------------------------------------------------- 这可能是一下几个原因的组合: 1- 大部分用于国内的GPS导航软件工作在伪经纬度座标,会把接收到的GPS座标 偏移几百米; 2- GPS导航软件工作在锁路状态,会自动把位置调整到附近的路上。某些导航软 件就没有非锁路状态; 3- Virace在开启多路输出时,面板显示的刷新速率有可能比输出到某一路输出 的速率快,因此两者显示的有时不是同一个时刻的位置。在Run前通过将4路 输 出的“时间间隔”设为完全一致,可以避免这一原因。 ---------------------------------------------------------------------- 如何“创造”出航迹文件,用于Virace? ---------------------------------------------------------------------- 办法很多,比如: 1. MapSource或Garmin Mobile中规划航线,存为gpx,即可在Virace中播放; 2. 中国电子地图导出路书,详细过请程参阅网上有关帖子; 3. Google Earth中划线,另存为kml文件; 4. GPSInfoShare转换mp文件中的道路为plt文件。 ====================================================================== 已知问题 ====================================================================== 暂无chm帮助文档 不支持kmz文件,需手工解压出kml文件 暂不支持Garmin协议 ====================================================================== 版本历史 ====================================================================== V0.3.1 2009.6.7 修正载入kml文件时海拔的bug 改进kml文件载入,使得能正确载入经纬度逗号后含多余空格的非正规kml文件 V0.3.0 2009.6.6 增加航迹文件(plt、gpx、kml、gpssim、trk)重播功能 航迹文件转为nmea文件 增加NMEA语句支持:GLL, VTG 20个收藏点 鼠标左键+滚轮:加减速或快进、快退 鼠标右键+滚轮:位置相关的控制 解决选项中先输入非法值,确定后再取消,结果已输入的问题 根据双击位置弹出当前位置或选项 其他小的调整 V0.02 2008.8.8 各路输出分别启停 可选连接Ozi但不向Ozi输出NMEA语句 增加GPS速度下限 增加时间缩放因子 改善界面状态指示。对虚拟串口,可显示对方是否已打开该串口 界面美化 V0.01 2008.7.21 初始版本 ====================================================================== 版权及分发 ====================================================================== Virace是免费软件,可自由使用。 可通过网络等手段自由分发Virace,但需要保持Virace包的完整性,请勿自行改 变压缩包内已有文件的任何内容。 Virace的作者对使用Virace的用户不承担任何责任。 ====================================================================== Bug报告及建议 ====================================================================== virace@sina.com
DirectX修复工具(DirectX Repair)是一款系统级工具软件,简便易用。本程序为绿色版,无需安装,可直接运行。 本程序的主要功能是检测当前系统的DirectX状态,如果发现异常则进行修复。程序主要针对0xc000007b问题设计,可以完美修复该问题。本程序中包含了最新版的DirectX redist(Jun2010),并且全部DX文件都有Microsoft的数字签名,安全放心。 本程序为了应对一般电脑用户的使用,采用了易用的一键式设计,只要点击主界面上的“检测并修复”按钮,程序就会自动完成校验、检测、下载、修复以及注册的全部功能,无需用户的介入,大大降低了使用难度。在常规修复过程中,程序还会自动检测DirectX加速状态,在异常时给予用户相应提示。 本程序适用于多个操作系统,如Windows XP(需先安装.NET 2.0,详情请参阅“致Windows XP用户.txt”文件)、Windows Vista、Windows 7、Windows 8、Windows 8.1、Windows 8.1 Update、Windows 10,同时兼容32位操作系统和64位操作系统。本程序会根据系统的不同,自动调整任务模式,无需用户进行设置。 本程序的V4.0版分为标准版、增强版以及在线修复版。所有版本都支持修复DirectX的功能,而增强版则额外支持修复c++的功能。在线修复版功能与标准版相同,但其所需的数据包需要在修复时自动下载。各个版本之间,主程序完全相同,只是其配套使用的数据包不同。因此,标准版和在线修复版可以通过补全扩展包的形式成为增强版。本程序自V3.5版起,自带扩展功能。只要在主界面的“工具”菜单下打开“选项”对话框,找到“扩展”标签,点击其中的“开始扩展”按钮即可。扩展过程需要Internet连接,扩展成功后新的数据包可自动生效。扩展用时根据网络速度不同而不同,最快仅需数秒,最慢需要数分钟,烦请耐心等待。如扩展失败,可点击“扩展”界面左上角小锁图标切换为加密连接,即可很大程度上避免因防火墙或其他原因导致的连接失败。 本程序自V2.0版起采用全新的底层程序架构,使用了异步多线程编程技术,使得检测、下载、修复单独进行,互不干扰,快速如飞。新程序更改了自我校验方式,因此使用新版本的程序时不会再出现自我校验失败的错误;但并非取消自我校验,因此程序安全性与之前版本相同,并未降低。 程序有更新系统c++功能。由于绝大多数软件运行时需要c++的支持,并且c++的异常也会导致0xc000007b错误,因此程序在检测修复的同时,也会根据需要更新系统中的c++组件。自V3.2版本开始使用了全新的c++扩展包,可以大幅提高工业软件修复成功的概率。修复c++的功能仅限于增强版,标准版及在线修复版在系统c++异常时(非丢失时)会提示用户使用增强版进行修复。除常规修复外,新版程序还支持C++强力修复功能。当常规修复无效时,可以到本程序的选项界面内开启强力修复功能,可大幅提高修复成功率。请注意,请仅在常规修复无效时再使用此功能。 程序有两种窗口样式。正常模式即默认样式,适合绝大多数用户使用。另有一种简约模式,此时窗口将只显示最基本的内容,修复会自动进行,修复完成10秒钟后会自动退出。该窗口样式可以使修复工作变得更加简单快速,同时方便其他软件、游戏将本程序内嵌,即可进行无需人工参与的快速修复。开启简约模式的方法是:打开程序所在目录下的“Settings.ini”文件(如果没有可以自己创建),将其中的“FormStyle”一项的值改为“Simple”并保存即可。 新版程序支持命令行运行模式。在命令行中调用本程序,可以在路径后直接添加命令进行相应的设置。常见的命令有7类,分别是设置语言的命令、设置窗口模式的命令,设置安全级别的命令、开启强力修复的命令、设置c++修复模式的命令、控制Direct加速的命令、显示版权信息的命令。具体命令名称可以通过“/help”或“/?”进行查询。 程序有高级筛选功能,开启该功能后用户可以自主选择要修复的文件,避免了其他不必要的修复工作。同时,也支持通过文件进行辅助筛选,只要在程序目录下建立“Filter.dat”文件,其中的每一行写一个需要修复文件的序号即可。该功能仅针对高级用户使用,并且必须在正常窗口模式下才有效(简约模式时无效)。 本程序有自动记录日志功能,可以记录每一次检测修复结果,方便在出现问题时,及时分析和查找原因,以便找到解决办法。 程序的“选项”对话框中包含了7项高级功能。点击"常规”选项卡可以调整程序的基本运行情况,包括日志记录、安全级别控制、调试模式开启等。只有开启调试模式后才能在C
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页