• <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.
            如何實(shí)現(xiàn)模式對(duì)話框程序啟動(dòng)時(shí)的系統(tǒng)欄顯示
            Michael Wednesday, December 13, 2006

            在實(shí)際工作中,需要用到一些類似狀態(tài)監(jiān)控的程序,它們往往在一啟動(dòng)時(shí)就要最小化到系統(tǒng)欄上.
            這里涉及到兩個(gè)問(wèn)題:1)如何在啟動(dòng)時(shí)隱藏主窗口; 2)用托盤(pán)實(shí)現(xiàn)系統(tǒng)欄顯示.
            模式對(duì)話框和非模式對(duì)話框的區(qū)別在于是否自身?yè)碛幸粋€(gè)消息循環(huán),對(duì)于模式對(duì)話框程序,要實(shí)現(xiàn)程序啟動(dòng)時(shí)的隱藏,一個(gè)比較完美(無(wú)閃爍地隱藏)的做法如下
            ?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()函數(shù)來(lái)創(chuàng)建一非模式對(duì)話框,同時(shí)添加了消息循環(huán)的處理Run(). 因?yàn)閜Dlg(屬性為非visible)并沒(méi)有調(diào)用ShowWindow(),所以創(chuàng)建后為隱藏狀態(tài).

            關(guān)于托盤(pán)的顯示只要調(diào)用WINDOWS的SHELL API即可.
            以下代碼用于添加一托盤(pán):
            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);

            以下代碼用于刪除一托盤(pán):
            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);

            托盤(pán)圖標(biāo)的消息定義及響應(yīng)函數(shù)如下:
            //定義消息碼
            #define? WM_NC? 1001
            #define? IDC_NC 1002

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

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

            //定義消息處理函數(shù)實(shí)現(xiàn)
            ?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}

            最后很關(guān)鍵的是,因?yàn)槲覀儾捎昧朔悄J娇騺?lái)隱藏窗口,當(dāng)對(duì)話框退出后,我們需要調(diào)用PostQuitMessage()來(lái)發(fā)送WM_QUIT消息給應(yīng)用程序從而結(jié)束消息循環(huán)退出整個(gè)程序.

            [全文完]
            久久久青草久久久青草| 污污内射久久一区二区欧美日韩| 精产国品久久一二三产区区别 | 久久久久久久综合狠狠综合| 久久久久久久91精品免费观看| 亚洲∧v久久久无码精品| 91秦先生久久久久久久| 久久婷婷午色综合夜啪| 国产精品久久久久无码av| 久久久久无码精品国产app| 7777久久久国产精品消防器材| 久久久久久狠狠丁香| 久久精品青青草原伊人| 国内精品久久久久影院免费| 亚洲精品成人网久久久久久| 久久精品亚洲一区二区三区浴池 | 久久精品中文字幕无码绿巨人| 久久99国产一区二区三区| 国产精品久久免费| 久久亚洲春色中文字幕久久久| 精品无码久久久久久国产| 中文成人无码精品久久久不卡| 久久美女人爽女人爽| 欧美伊人久久大香线蕉综合69| 久久精品国产99久久无毒不卡 | 人妻无码中文久久久久专区| 国产精品无码久久久久| 国产亚洲欧美成人久久片| 久久精品国产亚洲av麻豆蜜芽 | 久久亚洲高清综合| 99久久99久久精品国产片| 久久亚洲精品人成综合网| 国产精品久久新婚兰兰| 久久国产亚洲精品| 久久久久久国产a免费观看黄色大片 | 久久久免费观成人影院| 精品久久久久久无码中文野结衣 | 久久91精品国产91久| 久久国产午夜精品一区二区三区| 97精品国产97久久久久久免费| 精品久久一区二区三区|