• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆 - 2, 文章 - 73, 評論 - 60, 引用 - 0
            數據加載中……

            Windows CE開發常見問題解答(轉載)

            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不支持鉤子。
            系統不支持,我們還是可以想其他辦法的……Stick out tongue

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

            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();

            posted on 2008-02-18 15:32 郭天文 閱讀(2662) 評論(0)  編輯 收藏 引用 所屬分類: Windows Mobile

            久久成人国产精品一区二区| 国产成人香蕉久久久久| 中文国产成人精品久久不卡| 思思久久99热只有频精品66| 三级三级久久三级久久| 亚洲国产精品无码久久久秋霞2| 奇米影视7777久久精品| 精品免费tv久久久久久久| 国产精品免费久久久久久久久| 亚洲精品美女久久久久99小说| 久久人爽人人爽人人片AV| 久久久久国产亚洲AV麻豆| 久久国产色av免费看| 狠狠久久综合| 久久精品亚洲精品国产色婷| 狠狠久久综合| 99久久国产免费福利| 久久精品国产免费观看| 久久播电影网| 99久久婷婷国产一区二区| 久久丫精品国产亚洲av| 一极黄色视频久久网站| 久久久国产精品福利免费| 久久精品人人做人人爽电影| 91久久九九无码成人网站| 国产成人久久精品一区二区三区 | 亚洲欧美国产精品专区久久 | 久久精品国产精品亚洲下载| 2021国内久久精品| 青青草原综合久久大伊人导航 | 东京热TOKYO综合久久精品| 国产一区二区三区久久| 久久夜色精品国产欧美乱| 伊人久久无码精品中文字幕| 韩国三级中文字幕hd久久精品| 国内精品九九久久久精品| 亚洲AV日韩精品久久久久 | 久久99精品国产麻豆宅宅| 欧美亚洲另类久久综合婷婷| 久久国产福利免费| 久久久精品日本一区二区三区|