• <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>

            Michael's Space

            Technology changes the world, serves the people.
              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理
            如何實現模式對話框程序啟動時的系統欄顯示
            Michael Wednesday, December 13, 2006

            在實際工作中,需要用到一些類似狀態監控的程序,它們往往在一啟動時就要最小化到系統欄上.
            這里涉及到兩個問題:1)如何在啟動時隱藏主窗口; 2)用托盤實現系統欄顯示.
            模式對話框和非模式對話框的區別在于是否自身擁有一個消息循環,對于模式對話框程序,要實現程序啟動時的隱藏,一個比較完美(無閃爍地隱藏)的做法如下
            ?1BOOL?CMyApp::InitInstance()
            ?2
            {
            ?3??//?

            ?4
            ?5??CMyDlg*?pDlg?=?new?CMyDlg;
            ?6??if?(pDlg->Create(IDD_MY_DIALOG))?
            {
            ?7????m_pMainWnd?=
            ?pDlg;
            ?8
            ????Run();
            ?9????if?(pDlg)?
            {
            10
            ??????delete?pDlg;
            11??????pDlg?=
            ?NULL;
            12????}

            13??}

            14??return?FALSE;
            15}

            這里使用CWnd::Create()函數來創建一非模式對話框,同時添加了消息循環的處理Run(). 因為pDlg(屬性為非visible)并沒有調用ShowWindow(),所以創建后為隱藏狀態.

            關于托盤的顯示只要調用WINDOWS的SHELL API即可.
            以下代碼用于添加一托盤:
            1????????NOTIFYICONDATA?nc;
            2????nc.cbSize=sizeof(NOTIFYICONDATA);
            3????nc.hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);
            4????nc.hWnd=m_hWnd;
            5????lstrcpy(nc.szTip,"Hi!");
            6????nc.uCallbackMessage=WM_NC;
            7????nc.uFlags=NIF_ICON?|?NIF_MESSAGE?|?NIF_TIP;
            8????nc.uID=IDC_NC;
            9????Shell_NotifyIcon(NIM_ADD,&nc);

            以下代碼用于刪除一托盤:
            1????????NOTIFYICONDATA?nc;
            2????nc.cbSize=sizeof(NOTIFYICONDATA);
            3????nc.hWnd=m_hWnd;
            4????nc.uCallbackMessage=WM_NC;
            5????nc.uFlags=NIF_ICON?|?NIF_MESSAGE?|?NIF_TIP;
            6????nc.uID=IDC_NC;
            7????Shell_NotifyIcon(NIM_DELETE,&nc);

            托盤圖標的消息定義及響應函數如下:
            //定義消息碼
            #define? WM_NC? 1001
            #define? IDC_NC 1002

            //定義消息映射
            ON_MESSAGE(WM_NC,OnNc)

            //定義消息處理函數聲明
            afx_msg void OnNc(WPARAM wParam,LPARAM IParam);

            //定義消息處理函數實現
            ?1void?CMyDlg::OnNc(WPARAM?wParam,LPARAM?IParam)
            ?2{
            ?3????if?((IParam?==?WM_LBUTTONDOWN)?||?(IParam?==?WM_RBUTTONDOWN))
            ?4????{
            ?5????????CMenu?menu;
            ?6????????menu.LoadMenu(IDR_MENU1);
            ?7????????CMenu*?pPopup=menu.GetSubMenu(0);
            ?8????????::SetMenuDefaultItem(pPopup->m_hMenu,0,TRUE);
            ?9????????CPoint?Point;
            10????????GetCursorPos(&Point);
            11????????pPopup->TrackPopupMenu(TPM_LEFTALIGN,Point.x,Point.y,AfxGetMainWnd(),NULL);
            12????}

            13}

            最后很關鍵的是,因為我們采用了非模式框來隱藏窗口,當對話框退出后,我們需要調用PostQuitMessage()來發送WM_QUIT消息給應用程序從而結束消息循環退出整個程序.

            [全文完]
            av色综合久久天堂av色综合在| 成人精品一区二区久久久| 香蕉久久永久视频| 噜噜噜色噜噜噜久久| 精产国品久久一二三产区区别| 久久久久久国产精品无码下载 | 国产Av激情久久无码天堂| 精品久久久久久无码中文字幕一区| 嫩草影院久久国产精品| 色婷婷狠狠久久综合五月| 久久久精品人妻一区二区三区蜜桃| 久久精品国产半推半就| 亚洲人AV永久一区二区三区久久| 色综合久久久久综合体桃花网 | 亚洲国产精品久久久天堂 | 99久久精品费精品国产一区二区 | 99久久免费国产精品| 久久综合久久美利坚合众国| 97久久精品人人澡人人爽| 99久久精品免费看国产一区二区三区 | 久久国产热精品波多野结衣AV| 久久综合久久综合久久| 亚洲级αV无码毛片久久精品| 99久久精品免费看国产一区二区三区| 18禁黄久久久AAA片| 久久亚洲国产成人精品无码区| 久久99热只有频精品8| 亚洲精品白浆高清久久久久久| 久久综合狠狠综合久久97色| 亚洲成色999久久网站| 成人综合伊人五月婷久久| 久久婷婷激情综合色综合俺也去| 久久天天躁狠狠躁夜夜av浪潮| 人人狠狠综合久久亚洲88| 99久久国产热无码精品免费| 亚洲国产精品久久电影欧美| 欧美成a人片免费看久久| 理论片午午伦夜理片久久| 亚洲国产精品无码久久青草| 亚洲精品NV久久久久久久久久 | 久久线看观看精品香蕉国产|