WINCE常见问题解答.docx
《WINCE常见问题解答.docx》由会员分享,可在线阅读,更多相关《WINCE常见问题解答.docx(10页珍藏版)》请在冰豆网上搜索。
WINCE常见问题解答
WindowsCE开发常见问题解答(转载)
1.怎么在一个控件获得焦点时打开软键盘?
比如一个EditBox获得焦点后,这(huodejiaodianhou_zhe)个时分自动打开软键盘,这样可以方便用户输入——SIPINFO、SHSIPINFO、SIPSETINFO、SIPGETINFO里面有些参数弄(li3mian4you3xie1can1shu3nong4)不明白
//隐藏输入面板
BOOLLowerSip()
{
BOOLfRes=FALSE;
SIPINFOsi;
memset(&si0sizeof(si));
si.cbSize=sizeof(si);
if(SHSipInfo(SPI_GETSIPINFO0&si0))
{
si.fdwFlags&=~SIPF_ON;
fRes=SHSipInfo(SPI_SETSIPINFO0&si0);
}
returnfRes;
}
//升起输入面板
BOOLRaiseSip(void)
{
BOOLfRes=FALSE;
SIPINFOsi;
memset(&si0sizeof(si));
si.cbSize=sizeof(si);
if(SHSipInfo(SPI_GETSIPINFO0&si0))
{
si.fdwFlags|=SIPF_ON;
fRes=SHSipInfo(SPI_SETSIPINFO0&si0);
}
returnfRes;
}
再试试下面这些:
//SHSipPreference(m_hWndSIP_UP);//弹出输入面板
//SHSipPreference(m_hWndSIP_DOWN);//隐藏输入面板(有一个时延)
lunwenck@
//SHSipPreference(m_hWndSIP_FORCEDOWN);//隐藏输入面板(立刻)
//SHSipPreference(m_hWndSIP_UNCHANGED);
//一般只用在调用SIP_DOWN时的的后面,使这个命令无效
--------------------------------------------------------------------------------
2.WinCE下字符串-数字转化的问题!
在VC6.0下,把#include、#include两个文件包括进去后,下面这段待码一点问题没有
CStringstr1str2;
str1="123";
str2="123.4";
inti;
floatj;
i=atoi(str1);
j=atof(str2);
但是在EVC3.0里面,却出现了问题:
提示atof没有定义,atoi也不能正常转化。
用wcstoiwcstofwcstol和wcstod
--------------------------------------------------------------------------------
3.我新拿了一个PocketPc,编了几个程序,但发现(_bian1le0ji3ge4cheng2xu4_dan4fa1xian4)对话框都只能全屏显示,这是为什么?
一般在PocketPC中所有的对话框都是全屏显示,这是操作系统规定的行为。
但如使用系统自定义的信息提示框,则不是全屏显示。
如:
Afxmessagebox所激发的提示框就是如此。
可以重载WM_INITDIALOG音讯
MSDN:
TheDialogBoxmacrousestheCreateWindowExfunctiontocreatethedialogbox.DialogBoxthensendsaWM_INITDIALOGmessagetothedialogboxprocedure.Thefunctiondisplaysthedialogbox(regardlessofwhetherthetemplatespecifiestheWS_VISIBLEstyle)disablestheownerwindowandstartsitsownmessagelooptoretrieveanddispatchmessagesforthedialogbox.
lunwenck@
就是说当对话框窗口创建完以后,会发出一个WM_INITDIALOG音讯,你只要在自己的窗口音讯处理函数里对这个音讯进行处理,就可以了
比如:
caseWM_INITDIALOG:
//CreateaDonebuttonandsizeit.
shidi.dwMask=SHIDIM_FLAGS;
shidi.dwFlags=SHIDIF_DONEBUTTON|SHIDIF_SIPDOWN|SHIDIF_SIZEDLGFULLSCREEN;
shidi.hDlg=hDlg;
SHInitDialog(&shidi);
InitOptionDlg(hDlg);
returnTRUE;
主要就(zhuyaojiu)是修改shidi.dwFlags,看看ABOUT的窗口音讯处理吧
补充:
SHINITDLGINFOshidi;
SHINITDLGINFOshidi;
上面说的是在纯API的程序中的方法
对于MFC创建的DIALOG程序,可以这样:
BOOLCXXXDlg:
:
OnInitDialog()
{
SHINITDLGINFOshidi;
HWNDhDlg=m_hWnd;
//CreateaDonebuttonandsizeit.
shidi.dwMask=SHIDIM_FLAGS;
shidi.dwFlags=SHIDIF_SIPDOWN;
shidi.hDlg=hDlg;
SHInitDialog(&shidi);
//InitOptionDlg(hDlg);
//CDialog:
:
OnInitDialog();
……
}
--------------------------------------------------------------------------------
4.在eVC基于MFC的程序中如何将ToolBar栏隐(lan2yin3)藏
关于ToolBar的隐藏:
首先,假如你是用MFC导游创建的工程,则默认会生成ToolBar,我要说的是,干掉它!
自己来创建。
:
)
First,声明CToolBar成员变量:
[精神到处文章在学问深时意气平]
CToolBar*d_pToolbar2;
然后…(ran2hou4_)…
staticUINTbaseD_CODEToolbar2Buttons[]=
{
//下面是工具栏对应菜单的ID,工具栏图标是我弄(_gong1ju4lan2tu2biao1shi4wo3nong4)的一个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//这是新加入的(zheshixinjiarude)菜单项,点击隐藏工具栏,再点击就显示工具栏
};
然后……
在CMainframe的OnCreate()中加入:
OnToolbarCreate();
然后……
voidCMainframe:
:
OnToolbarCreate()
{
//Shouldonlygethereifwedon'thaveatoolbar.
ASSERT(d_pToolbar2==0);
//CreateC++objectandWinAPIwindow.
d_pToolbar2=newCToolBar();
d_pToolbar2->Create(thisWS_CHILD|CBRS_BOTTOM|
CBRS_SIZE_FIXED|CBRS_FLOATING
0x9100);
//Getbitmapandconnecttotoolitems.
d_pToolbar2->LoadBitmap(IDR_ADD_TOOLBAR);
d_pToolbar2->SetButtons(Toolbar2Buttons
sizeof(Toolbar2Buttons)/sizeof(UINT));
ADOCE
//Maketoolbardockable.
d_pToolbar2->EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(d_pToolbar2);
}
然后……
voidCMainframe:
:
OnToolbarShow()
{
ASSERT(d_pToolbar2!
=0);
//Querycurrentvisibility.
BOOLbVisible=(d_pToolbar2->GetStyle()&WS_VISIBLE);
//Showorhide.
intnShow=(bVisible)?
SW_HIDE:
SW_SHOWNORMAL;
d_pToolbar2->ShowWindow(nShow);
//Reconfigureremainingtoolbaritems.
RecalcLayout();
//Storevisibilitystateforlater.
d_bToolbarVisible=(!
bVisible);
}
voidCMainframe:
:
OnUpdateToolbarShow(CCmdUI*pCmdUI)
{
//Thisfunctionissignedforcheckingthemenu'Edit|ShowToolbar'
pCmdUI->Enable(d_pToolbar2!
=0);
intnCheck=(d_bToolbarVisible)?
1:
0;
pCmdUI->SetCheck(nCheck);
}
OK,默认情况下ToolBar是隐藏的,点击菜单中的新加入的隐藏/显示工具栏命令即可往返切换了。
--------------------------------------------------------------------------------
5.如何制作pocketPc下的安装程序?
在C:
\WindowsCETools\wce300\MSPocketPC\support\ActiveSync\windowsceapplicationinstallation下面有例子.
论文参考网
也有其它第三方的安装工具,比如installshield。
--------------------------------------------------------------------------------
6.怎么在主界面中显示一幅图片
我做了一个小程序,想在主界面中显示一幅图片,我的图片是.JPG格式的,假如需要转换,用什么工具?
把JPG图转为BMP图咯,网上有不少这样的程序。
然后用LoadBitmap、Selectobject、StretchBlt等语句把BMP图显示辰VIEW中。
--------------------------------------------------------------------------------
7.请问,在WinCE下如何截获所有鼠标和键盘的音讯?
wince下只能用三种钩子
#defineWH_JOURNALRECORD0
#defineWH_JOURNALPLAYBACK1
#defineWH_KEYBOARD_LL20
--------------------------------------------------------------------------------
8.在PocketPC下用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"NOTWS_VISIBLE-10-10、66,在模仿器中正常(_zaimoniqizhongzhengchang),但在PDA中不能显示包含Edit的对话框。
而Npp可以在两者正常显示。
我又在Npp中增加一个对话框,也相应的改变资源,结果是在模仿器和PDA中都能正常(zhong1dou1neng2zheng4chang2)显示。
调用SHInitExtraControls()应该在构造函数,不应在OnInitDialog中。
如果在OnInitDialog中调用,包含EDIT的对话框将不显示。
事实上在XXXApp:
:
InitInstance函数中调用更好,这样只需调用一次,就万事大吉。
--------------------------------------------------------------------------------
12.如何将.mdb数据库转换为.cdb数据库
如何将.mdb数据库转换为.cdb数据库,在没有实际PDA只有PocketPCEmuliation和EVB的情况下。
PocketPCEmuliation运行时为何提示“存储器不足,无法完成操作”?
此问题微软已经给出了答案。
在SDK文档中有一个叫做device的例子程序,它就是将tdb文件转化成cdb文件的,而还有一个desktop的程序,它是将mdb文件转化成tdb文件的。
--------------------------------------------------------------------------------
13.请问如何用(qingwenruheyong)EVC建立和调用DLL
我按照帮助中用MFC开发DLL的例子做,但是另外一个程序调用的时分的时分却出现连接错误,说找不到那个函数。
后来看了EVC的例子spintest之后也是这样。
和在WINDOWS下的一样
是不是LINK2001ERROR?
你如果是隐式调用(就是不用LOADLIBRARY()的),要把你的DLL的LIB文件在PROJECT-->SETTINGS--->LINK--->INPUT里指明。
--------------------------------------------------------------------------------
14.编辑框如何自动会换行?
请教Plam中的table控件在Wince上怎么(shangzenme)做?
就是编辑框自动会换行.当你输入的内容超过一行自动切换到下一行下面的内容自动往下滚。
勾选编辑控件的MultiLine,如果想输入回车换行,再勾选wantrenturn
--------------------------------------------------------------------------------
15.是否在adocepocketaccess中的update语句不能执行?
ADOCE不能直接执行UPDATE语句,但ADOCE有Update方法,你可用它实现。
lunwenck@
--------------------------------------------------------------------------------
16.请问如何(qingwenruhe)在WindowsCE中实现BC++中的inport(...)与outportb(...)函数功能?
CE下,可以用WINDOWSAPI函数来对端沮操作。
比较简朴。
API一般只要用到CreateFile(打开端沮,串口操作和文件操作只有一点不同就是打开方式不同,所以第三个参数要用OPEN_EXISTING)
COMMTIMEOUTS、DCB两个结构是寄存设置参数的,可以改
WriteFile、WriteFile(读写端沮(_duxieduanju))
因为串口通讯用的是异步通讯,所以下面两句比较重要
SetCommMask(指定监视的端沮事件)
WaitCommEvent(等待端沮事件)
--------------------------------------------------------------------------------
17.如何显示一个对话框让用户选择一个目录而不是文件
没有标准的函数处理这个,你只好自己实现活使用第三方的解决方案。
--------------------------------------------------------------------------------
18.有没有办法(API)激活或禁止电源保存形式?
参看SystemIdleTimerReset()的安装文档。
创建一个包含象睡眠的无限循环的线程,然后调用SystemIdleTimerReset()。
也许有一种中断线程的办法就是程序退出。
--------------------------------------------------------------------------------
19.WindowsCE的文件名最小程度是多少?
论文参考网
在windef.h定义了MAX_PATH,普遍应该是260个字符。
20.我使用CFileDialog创建了一个浏览按钮,默认目录始终颓显示"AllFolders"和在"\MyDevice\Mydo***ents"下。
怎么改变初始目录到"\MyDevice"。
使用fileDlg.m_ofn.lpstrInitialDir=TEXT("file:
//My/Device");,但是没有改变默认显示衬目录。
lpstrInitialDir指向一个指定初始文件目录的字符串。
如果为NULL,将使用系统的根目录。
尽量尝试一下lpstrInitialDir为NULL。
--------------------------------------------------------------------------------
21.在PocketPC工作栏上可能有X和OK按钮吗?
不可能,至少没有象WisBar的第三方工具。
--------------------------------------------------------------------------------
22.如何禁止用户改变日期和时间?
有可能实现吗?
你可能用自己的程序替待\windows\clock.exe,但是,它们可以通过另外的程序处理这个。
同样,在同步时ActiveSync改变设备的时间与PC匹配。
--------------------------------------------------------------------------------
23.我有一个xscalcpu的ipaq3970设备,但是在eMbeddedVisualC++3.0上没有目标类型。
我应该在EVC3.0上使用什么类型。
这个问题也发生在安装程序Cabwiz.exe上。
论文参考网
你可以使用ARM类型。
XScal基于ARM体系。
--------------------------------------------------------------------------------
24.如何使程序在后台运行?
最小化程序将使程序进入后台,因此只要在程序启动时最小化,那么它将运行在后台。
补充:
还可以做成service。
--------------------------------------------------------------------------------
25.我预备去掉SIP按钮。
我在OnInitDialog事件中使用SHFullScreen。
然而SIP按钮仍旧可见,忘记做什么了吗?
待码如下:
//SHFullScreenfailsifdialogboxisnotforeground.
SetForegroundWindow();
//Gotothefullscreenmode
SHFullScreen(m_hWndSHFS_HIDESIPBUTTON|SHFS_HIDESTARTICON);
不能在OnInitDialog中使用SHFullScreen,因为对话框还没有可见。
你应该传递一个自定义音讯,在那个音讯调用这个函