开机密码时startui.cpp加了ipShowIM(SIPF_ON)软键盘为什么还不出来?

huifei   2009-2-16 18:31 楼主
Startup_DlgProc()
{

        switch (message)
                {
                case WM_INITDIALOG:
                        //        Load and display the background bitmap.
                        hbm = LoadBitmap(g_hinst, MAKEINTRESOURCE(IDB_WINDOWSCE));
                        SendMessage(
                                GetDlgItem(hDlg, IDC_STATIC_PICT),
                                STM_SETIMAGE,
                                (WPARAM)IMAGE_BITMAP,
                                (LPARAM) hbm);

                        //        Misc other info for the dialog.
                        LoadGlobalStrings();
#ifndef USE_LASS_AUTH
                        hwndPass = GetDlgItem(hDlg, IDC_PASS);
#endif

                        //        Set the font size of the various parts of the dialog.
                        memset(&lFont, 0, sizeof(LOGFONT));
                        hDlgFont = (HFONT)SendMessage(hDlg, WM_GETFONT, 0, 0L);
                        if ( !hDlgFont )
                                {
                                hDlgFont = (HFONT)GetStockObject(SYSTEM_FONT);
                                }
                        GetObject(hDlgFont, sizeof(LOGFONT), &lFont);

                        if (hDlgFont && lFont.lfHeight)
                                {
                                lFont.lfWeight =  FW_BOLD;

                                lFont.lfHeight = 13;
                                hDlgFont = CreateFontIndirect(&lFont);
                                if ( hDlgFont )
                                        {
                                        SendMessage(GetDlgItem(hDlg, IDC_STATIC_PASS),   WM_SETFONT, (WPARAM)hDlgFont, 0L);
                                        SendMessage(GetDlgItem(hDlg, IDC_COMPANY), WM_SETFONT, (WPARAM)hDlgFont, 0L);
                                        SendMessage(GetDlgItem(hDlg, IDC_ADDRESS), WM_SETFONT, (WPARAM)hDlgFont, 0L);
                                        SendMessage(GetDlgItem(hDlg, IDC_WORK_PHONE), WM_SETFONT, (WPARAM)hDlgFont, 0L);
                                        SendMessage(GetDlgItem(hDlg, IDC_HOME_PHONE), WM_SETFONT, (WPARAM)hDlgFont, 0L);               
                                        }

                                lFont.lfHeight = -16;
                                hDlgFont1 = CreateFontIndirect(&lFont);
                                if ( hDlgFont1 )
                                        {
                                        SendMessage(GetDlgItem(hDlg, IDC_STATIC_DAY), WM_SETFONT, (WPARAM)hDlgFont1, 0L);
                                        SendDlgItemMessage(hDlg, IDC_NAME , WM_SETFONT, (WPARAM)hDlgFont1, 0L);
                                        }

                                _tcscpy(lFont.lfFaceName, g_szStartupTimeFontName);
                                lFont.lfHeight = -20;
                                hDlgFont2 = CreateFontIndirect(&lFont);
                                if ( hDlgFont2 )
                                        {
                                        SendMessage(GetDlgItem(hDlg, IDC_STATIC_TIME),  WM_SETFONT, (WPARAM)hDlgFont2, 0L);
                                        }
                                }
                       

                       
                        // Set focus to the dialog itself, so WM_CHAR's are received.
                        // If we're not using LASS and we requireAuth we'll switch the
                        // focus to the password field.
            SetFocus(hDlg);                               
                        if(        isAuthRequired() )
                                {
                                EnableMenuItem(GetSystemMenu(hDlg, FALSE), SC_CLOSE, MF_BYCOMMAND | MF_GRAYED);        // disable close button
#ifndef USE_LASS_AUTH
                                ShowWindow(hwndPass, SW_SHOW);
                                ShowWindow(GetDlgItem(hDlg, IDC_STATIC_PASS), SW_SHOW);
                                SendMessage(hwndPass, EM_LIMITTEXT, PASSWORD_LENGTH, 0L);
                                SetFocus(hwndPass);
                //add soft keypad, begin<<
                RECT rcDefault;
                SystemParametersInfo(SPI_GETWORKAREA, 0, &rcDefault, FALSE);
                rcDefault.left =
                rcDefault.top =
                rcDefault.top =
                rcDefault.top = rcDefault.bottom - 80;
                SipSetDefaultRect(&rcDefault);
                ipShowIM(SIPF_ON);       
                //add soft keypad, end>>
                               
#endif
                }

                        i = 0;
                        if ( g_pOwnerNotes->NotesPowerUp )
                                {
                                i += SetAndShow(hDlg, IDC_NOTES, g_pOwnerNotes->Notes);
                                }

                        if ( !i)
                                {
                                ShowWindow(GetDlgItem(hDlg, IDC_NOTES),SW_HIDE);
                                }


                        i = 0;
                        if ( g_pOwnerProfile->IDPowerUp )
                                {
                                i += SetAndShow(hDlg,        IDC_NAME,                g_pOwnerProfile->szName);
                                i += SetAndShow(hDlg,        IDC_COMPANY,        g_pOwnerProfile->szCompany);
                                i += SetAndShow(hDlg,        IDC_ADDRESS,        g_pOwnerProfile->szAdd);

                                _tcscpy(szText, g_szStartupWork);
                                AddString(szText,        g_pOwnerProfile->szWCC);
                                AddString(szText,        g_pOwnerProfile->szWAC);
                                AddString(szText,        g_pOwnerProfile->szWPhone);

                                if ( _tcscmp(szText, g_szStartupWork) )
                                        {
                                        i += SetAndShow(hDlg, IDC_WORK_PHONE,szText);
                                        }

                                _tcscpy(szText, g_szStartupHome);
                                AddString(szText,        g_pOwnerProfile->szHCC);
                                AddString(szText,        g_pOwnerProfile->szHAC);
                                AddString(szText,        g_pOwnerProfile->szHPhone);

                                if ( _tcscmp(szText, g_szStartupHome) )
                                        {
                                        i += SetAndShow(hDlg, IDC_HOME_PHONE, szText);
                                        }
                                }

                        //        Show picture if there is no user data.
                        if ( !i )
                                {
                                ShowWindow(GetDlgItem(hDlg, IDC_STATIC_PICT), SW_SHOW);
                                }


                        oldEditCtlProc = (WNDPROC) GetWindowLong(GetDlgItem(hDlg,IDC_NOTES), GWL_WNDPROC);
                        SetWindowLong(GetDlgItem(hDlg,IDC_NOTES),        GWL_WNDPROC,        (LONG)EditCtlProc);
                        SetWindowLong(GetDlgItem(hDlg,IDC_ADDRESS),        GWL_WNDPROC,        (LONG)EditCtlProc);
                        HideCaret(GetDlgItem(hDlg,IDC_NOTES));

                        idTimer = SetTimer(hDlg, 1, 1000, NULL);
                        return FALSE;
........       

回复评论 (42)

                RECT rcDefault;
                SystemParametersInfo(SPI_GETWORKAREA, 0, &rcDefault, FALSE);
                rcDefault.left =
                rcDefault.top =
                rcDefault.top =
                rcDefault.top = rcDefault.bottom - 80;
                SipSetDefaultRect(&rcDefault);
                                SipShowIM(SIPF_ON);       

改成只有
                                SipShowIM(SIPF_ON);

也是不行的。是我放的位置有问题吗?
点赞  2009-2-16 18:35
在startui.rc里把开机密码对话框大小,内容位置改了
全编译后出来的还是原始的样子,怪怪
点赞  2009-2-16 18:49
有两种可能,一是没改对地方,二是没正确编译进去。
点赞  2009-2-16 19:48
帮你确认了一下,是没有问题的。
修改C:\WINCE500\PUBLIC\COMMON\OAK\DRIVERS\STARTUI\startui.cpp文件
在450行前后,添加SipShowIM(SIPF_ON);
到命令行中浏览到目录C:\WINCE500\PUBLIC\COMMON\OAK\DRIVERS\STARTUI>下,执行build,
最后重新Sysgen即可。
点赞  2009-2-16 20:18
组件有没进NK?
点赞  2009-2-17 08:42
引用: 引用 4 楼 sunrain_hjb 的回复:
帮你确认了一下,是没有问题的。
修改C:\WINCE500\PUBLIC\COMMON\OAK\DRIVERS\STARTUI\startui.cpp文件
在450行前后,添加SipShowIM(SIPF_ON);
到命令行中浏览到目录C:\WINCE500\PUBLIC\COMMON\OAK\DRIVERS\STARTUI>下,执行build,
最后重新Sysgen即可。

按你的编译步骤编了次,还是不行:(

点赞  2009-2-17 09:26
引用: 引用 5 楼 xqhrs232 的回复:
组件有没进NK?

好象确实有这个问题
怎样才能确保编进nk?
点赞  2009-2-17 09:29
检查一下该文件最终应该生成在哪个库或EXE文件中,然后看Release目录下面有没有更新
其实找出来后也方便自己写Sources文件来生成,这样可以每次只编译一下当前工程,拷贝到Release目录下面Makeimage就可以了
点赞  2009-2-17 09:33
public 目录下面的东西编译后会生成 DLL 文件,查看 DLL 文件的日期确认是不是刚刚编译生成的,没有问题的话把这个 DLL 文件复制到你 NK.bin 那个目录下面,然后再重修 make image 生成 NK.bin 就行了。
要是编译后生成的是 lib 文件的话就麻烦了,要再用 lib 生成 DLL 才行,具体怎么做忘记了,晚上好像有方法。
点赞  2009-2-17 10:58
case WM_INITDIALOG:
                        //        Load and display the background bitmap.
                        hbm = LoadBitmap(g_hinst, MAKEINTRESOURCE(IDB_WINDOWSCE));
                        SendMessage(
                                GetDlgItem(hDlg, IDC_STATIC_PICT),
                                STM_SETIMAGE,
                                (WPARAM)IMAGE_BITMAP,
                                (LPARAM) hbm);
             SipShowIM(SIPF_ON);
即可!
点赞  2009-2-17 12:59
还要在case WM_CLOSE:中
  添加:SipShowIM(SIPF_OFF);
点赞  2009-2-17 13:00
mark
点赞  2009-2-17 13:51
到这里看看,应该可以。
[url=http://www.cnblogs.com/we-hjb/archive/2009/02/16/1391984.html][/url]
点赞  2009-2-17 17:37
引用: 引用 13 楼 sunrain_hjb 的回复:
到这里看看,应该可以。
http://www.cnblogs.com/we-hjb/archive/2009/02/16/1391984.html


哈哈,我从网上找到过你的文章了

我加了log,确定SipShowIM(SIPF_OFF); 是被调用了。不过软键盘就是不出来。
关机时倒是看到软键盘一闪而过

我的屏是240X320的,怀疑显示软键盘的位置不对,于是加了:
                RECT rcDefault;
                rcDefault.left = 0;
                rcDefault.top = 0;
                rcDefault.right = 240;
                rcDefault.bottom = 80;
                SipSetDefaultRect(&rcDefault);
Log2File(L"left=%d, top=%d, right=%d, bottom=%d\n", rcDefault.left,rcDefault.top,rcDefault.right, rcDefault.bottom);
                                SipShowIM(SIPF_ON);

原因还是不知道,继续郁闷...
点赞  2009-2-17 20:15
最新发现,在按ok按钮的处理中加SipShowIM(SIPF_ON);
软建盘能蹦出来
点赞  2009-2-18 11:15
up   
点赞  2009-2-18 12:08
好不容易在WM_LBUTTONDOWN消息处理中调SipShowIM用把软键盘显示出来了

结果开机完成后再显示的软键盘显示不全,少了一半。

我改点东西怎么就这么难:(
点赞  2009-2-19 10:47
有可能是屏幕分辨率的问题,
或者是有什么地方被你改成这样的。
点赞  2009-2-20 00:03

我也觉得是vga,qvga屏混乱导致的。输开机密码时好象WinCE认为是vga屏,进入系统后是qvga屏。
我还发现了,要是在开机密码处不关闭sip到explorer里再关闭的话,软件盘显示是全的。

另外,有什么设置可以让startui默认为qvga屏呢?
点赞  2009-2-20 12:43
123下一页
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复