wince应用程序开发技巧

上传人:xzh****18 文档编号:35440731 上传时间:2018-03-15 格式:DOC 页数:34 大小:110.50KB
返回 下载 相关 举报
wince应用程序开发技巧_第1页
第1页 / 共34页
wince应用程序开发技巧_第2页
第2页 / 共34页
wince应用程序开发技巧_第3页
第3页 / 共34页
wince应用程序开发技巧_第4页
第4页 / 共34页
wince应用程序开发技巧_第5页
第5页 / 共34页
点击查看更多>>
资源描述

《wince应用程序开发技巧》由会员分享,可在线阅读,更多相关《wince应用程序开发技巧(34页珍藏版)》请在金锄头文库上搜索。

1、WINCEWINCE 禁止禁止 MFCMFC 程序窗口上的程序窗口上的 OKOK 按钮按钮 复制链接复制链接 打开资源文件(*.rc)(我用记事本),找到这行:EXSTYLE WS_EX_APPWINDOW | 0x80000000L.只要将这一句删除或者注释,就可以去掉“OK“按钮.同理,如果要添加“OK“键,在 其后添上 EXSTYLE WS_EX_APPWINDOW | 0x80000000L 即可.WinCEWinCE 与与 PCPC 机的机的 USBUSB 同步蓝屏解决方法同步蓝屏解决方法方法 1 在安装 USB 驱动的时候,不使用官方的驱动,而是使用Microsoft Active

2、Sync 下有个 drivers文件夹的 usb 驱动。就不会蓝屏了。方法 2 WIN XP SP3,笔记本电脑(主要还不清楚是否有那些硬件不兼容) 安装 USB 下载驱动正常,但启动 CE 后,连接 USB 线到电脑无法自动安装驱动,使用提供的 CE 连接驱动安装完成即电脑系统蓝屏 若 USB 线一直连接电脑,电脑重启直接蓝屏 经过多次实验后,最终解决 1.先连接电脑,并安装驱动,蓝屏后关机,然后拔掉 USB 线启动进入系统,将 INF 目录下的 wceusbsh.inf,wceusbsh.PNF 删除,将 system32driverswceusbsh.sys 删除 2. 不用重启,连接

3、USB 线,同步工具将会显示连接, 具体不太清楚怎么回事,有空再想想,不过问题得以解决 有同样情况的可以试试用回车键实现用回车键实现 MFCMFC 对话框中对话框中 TABTAB 键控件输入焦点在控件中跳转的效果键控件输入焦点在控件中跳转的效果近日在为一个数据应用写数据输入界面,大量的编辑框要想实现快速的输入就是有设计 良好的符合工作流程的 tab 键序。相信,不少的人在使用具有大量编辑框的程序时都有这 样的想法和感概。而我这个对话框界面主要输入的是数字,因此如果使用 tab 键作编辑框 之间的跳转会在使用数字键盘时不方便。因此,就考虑了用回车键来实现 tab 键的功能。 因为 mfc 对话框

4、的特点,基于 mfc 对话框的对话框按下回车键会调用框架内的的 onok 成 员函数导至退出。即使你去掉 idc_ok 按键的 bs_defpushbutton 属性也是不行的。 必须重载 wm_getdefid,因为当用户按下回车键时,windows 发送 wm_getdefid 消息来获得 缺省的命令 id,windows 再将它作为 wm_command 发送,所以重载这个消息必须在高位字 中返回 dc_hasdefid。 如下所例: begin_message_map(cmydlg, cdialog)on_message(dm_getdefid, ongetdefid). end_me

5、ssage_map() lresult cmydlg:ongetdefid(wparam wp, lparam lp) return makelong(0,dc_hasdefid); 这是一种方法,另外一种方法是在消息循环处着手处理。重载 pretranslatemessage 这 个虚函数,将消息队列中有关键盘按下的消息给拦载下来,在框架之前处理 wm_keydown 消息。判断是按下回车键后,我们可以用 getnextdlgtabitem 函数获得 tab 键序中下一个或 上一个接受 tab 键的控件句柄。示例代码如下: bool ckeydowndlg:pretranslatemessa

6、ge(msg* pmsg) if (pmsg-message = wm_keydown /取得当前焦点控件的下一个控件的 句柄if (mwnd)mwnd-setfocus(); /设置下一件控件得到输入焦点return true;return cdialog:pretranslatemessage(pmsg); 但是,各位有没有注意到。这样处理之后,虽然可以在各个控件之进行输入焦点的转 移。可是当一个按钮控件获得了焦点之后,也是按下回车键。以前我们习惯中或者说预料 中按下该按钮的后应该执行的功能没有被执行,而焦点又跑到按钮之后的控件上去了。这 就是上面代码的不足之处,虽然实现了焦点由回车键控件

7、转移,但是按钮却不能用回车键 来操作了。只以用鼠标,这和大家习惯不合。而且,在快速的数据输入中不能用回车键来 按下这个按钮却要用鼠标来点击也有违当初我们要快速这样一个目的。所以,还得对以上 代码做适当的修改。代码如下。在这里增加了对当前焦点控件类的判断,即如果当前控件是按钮(button)那么就不执 行焦点跳转而是构造一条 wm_command 消息发送给程序,让程序以为是鼠标点击了该按钮。 从而执行了这个按钮具有的功能而不是什么也不做的焦点转移。 bool ckeydowndlg:pretranslatemessage(msg* pmsg) if (pmsg-message = wm_key

8、down if (wnd != null)char str256;cstring classname = _t(“button“);getclassname (wnd-m_hwnd, str, 256);if (classname = str)uint i = wnd-getdlgctrlid ();sendmessage (wm_command, i, (lparam)wnd-m_hwnd);return true;cwnd *mwnd = getnextdlgtabitem (wnd);if (mwnd)mwnd-setfocus();return true;return cdialog:

9、pretranslatemessage(pmsg); Windows CE/Windows Mobile 开发常见问题解答1.怎样在一个控件获得焦点时打开软键盘?比如一个 EditBox 获得焦点后,这个时候自动打开软键盘,这样可以方便用户输入SIPINFO、SHSIPINFO、SIPSETINFO、SIPGETINFO 里面有些参数弄不明白/隐藏输入面板 BOOL LowerSip() BOOL fRes = FALSE; SIPINFO si; memset( si.cbSize = sizeof( si ); if( SHSipInfo( SPI_GETSIPINFO, 0, fRes

10、= SHSipInfo( SPI_SETSIPINFO, 0, return fRes; /升起输入面板 BOOL RaiseSip( void ) BOOL fRes = FALSE; SIPINFO si; memset( si.cbSize = sizeof( si ); if( SHSipInfo( SPI_GETSIPINFO, 0, fRes = SHSipInfo( SPI_SETSIPINFO, 0, return fRes; 再试试下面这些: /SHSipPreference(m_hWnd, SIP_UP);/弹出输入面板 /SHSipPreference(m_hWnd, S

11、IP_DOWN);/隐藏输入面板(有一个时延) /SHSipPreference(m_hWnd, SIP_FORCEDOWN );/隐藏输入面板(立即) /SHSipPreference(m_hWnd, SIP_UNCHANGED ); /一般只用在调用 SIP_DOWN 时的的后面,使这个命令无效-2.WinCE 下字符串-数字转化的问题!在 VC6.0 下,把#include 、#include 两个文件包括进去后,下面这段代码一点问题没有, CString str1,str2; str1=“123“; str2=“123.4“; int i; float j; i=atoi(str1);

12、 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 CreateW

13、indowEx 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 di

14、spatch 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; SHInitDial

15、og( 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( /InitOptionDlg(hDlg); /CDialog:OnInitDialog(); -4.在 eVC 基于 MFC 的程序中如何将 ToolBar 栏隐藏关于 T

展开阅读全文
相关资源
相关搜索

当前位置:首页 > IT计算机/网络 > 多媒体应用

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号