none
如何再次隱藏 dlg的menubar? RRS feed

  • 問題

  • dear all,

    目前開發使用vs2005/ mfc/c++/wm5
    使用dlg形式的project type

    目前可以使用以下的函式達到fullscreen的功能
    bool NCCBaseDlg::FullScreen(void)
    {
        HWND m_hMenuBar;
        int nScreenWidth;
        int nScreenHeight;

        nScreenWidth = ::GetSystemMetrics(SM_CXSCREEN);
        nScreenHeight = ::GetSystemMetrics(SM_CYSCREEN);
        SHFullScreen(m_hWnd,SHFS_HIDETASKBAR | SHFS_HIDESIPBUTTON | SHFS_HIDESTARTICON);
        m_hMenuBar = SHFindMenuBar(m_hWnd);
        SHSipPreference(m_hMenuBar,SIP_FORCEDOWN);
        :Tongue TiedhowWindow(m_hMenuBar,SW_HIDE);
        SetWindowPos(NULL,0,0,nScreenWidth,nScreenHeight,SWP_SHOWWINDOW|SWP_NOZORDER);
        AfxGetMainWnd()->SetForegroundWindow();
        return true;
    }

    之後 因操作的關係 必須對某個edit control進行pop up軟體小鍵盤
    如下
    void NCCPPOIDlg:SurprisenSetFocus(void)
    {
        SHSipPreference(m_edtInput.m_hWnd,SIP_UP);
    }
    並以如下對應的事件 關閉小鍵盤
    void NCCPPOIDlg:SurprisenKillFocus(void)
    {
        SHSipPreference(m_edtInput.m_hWnd ,SIP_FORCEDOWN);
    }

    小鍵盤的關閉是沒有問題的
    但是下方的menu bar卻無法隱藏了
    即使重新執行fullscreen也無作用
    可參閱一下圖片 內容事由模擬器上剪下來的
    http://picasaweb.google.com.tw/promethus/EcOuqF/photo#5130300997436844066
    由三張圖構成 說明操作的變化
    最下面一張其中紅框的部份 就是上面所提到的 無法隱藏的menu bar
    還請各位前輩不吝賜教 謝謝

    2007年11月8日 上午 03:11

解答

所有回覆

  • HI,

     

    使用VC++製作行動裝置程式, 可以不需要寫程式為視窗提供全螢幕化功能, 因為所有的視窗, 包括Window和Dialog都會以全螢幕顯示

     

    tihs

    2007年11月9日 上午 02:37
  • 您好
    您說的我知道 我想可能是我在說明的用詞上有些不妥導致誤會
    在這所說得全螢幕 重點是要隱藏dialog上方的title(或說是dialog catption)
    以及下方的軟鍵盤bar

    目前以上兩個要求經由前述function已經都可以在地一次使用時做到
    可是一旦我一開始啟動軟體小鍵盤 下方的bar就在也藏不起來了

    如果你可以參閱我前述提及的連結 應該會更明白提及問題的的狀態
    謝謝您的回覆
    2007年11月10日 上午 07:32
  • HI,

     

    Sorry, 恕我眼拙, 不過開關SIP可以考慮呼叫:

     

    SipShowIM(SIPF_ON);

    SipShowIM(SIPF_OFF);

     

    說不定會比較好, 另外可以考慮在Edit Control得到Focus時再開啟SIP, 在Dialog得到Focus時就開啟SIP有特別的用意嗎?

     

    tihs

    2007年11月11日 上午 06:05

  • 您好

    我在測試改用SipShowIM之後 仍舊出現相同的問題
    也就是下方menubar無法隱藏的問題


    目前我是自訂一class A並繼承CEdit  而後針對A的set focus & kill focus 實做對應的事件函式

    程式碼區塊

    ON_CONTROL_REFLECT(EN_KILLFOCUS, &NCCEdit::OnEnKillfocus)

    ON_CONTROL_REFLECT(EN_SETFOCUS, &NCCEdit::OnEnSetfocus)


    如上 此對應是在A裡面
    OnEnKillfocus & OnEnSetfocus& 在放入SipShowIM的 off & on

    還有一點不解
    EN_SETFOCUS & WM_SETFOCUS 這兩者的作用有何不同
    因為在CEdit的可對應msg 兩者都有
    但是目前我是針對EN_..進行implement

    您說的針對dlg focus的問題 我後來也發現並刪除了

    2007年11月12日 上午 01:46
  • HI,

     

    CEdit處理EN_XX訊息沒有錯, 視窗才處理WM_SETFOCUS

     

    tihs

    2007年11月23日 上午 05:39