亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于MFC的半透明窗口設(shè)計與實現(xiàn)

        2016-11-21 05:47:03英昌盛
        長春師范大學(xué)學(xué)報 2016年8期
        關(guān)鍵詞:半透明浮動對話框

        英昌盛

        (吉林師范大學(xué)計算機學(xué)院,吉林四平 136000)

        ?

        基于MFC的半透明窗口設(shè)計與實現(xiàn)

        英昌盛

        (吉林師范大學(xué)計算機學(xué)院,吉林四平 136000)

        在對工業(yè)檢測結(jié)果進行實時顯示過程中,用戶常常需要對檢測的某些數(shù)據(jù)點進行觀察和分析,并根據(jù)分析的結(jié)果進行相應(yīng)處理。在不影響顯示檢測結(jié)果的同時,檢測軟件還需要實時提供被選定的檢測點信息,這些信息不應(yīng)該占用屏幕上固定區(qū)域,而應(yīng)該隨被選定點的變化而浮動顯示。本文基于MFC設(shè)計了跟隨鼠標(biāo)位置浮動顯示選定檢測點信息的半透明提示窗口,使軟件更人性化的同時提高了用戶處理檢測結(jié)果的效率。

        實時;選定;浮動;半透明

        隨著信息化的推進,光電檢測發(fā)揮著愈來愈重要的作用。光電檢測系統(tǒng)由前端檢測和后端顯示處理兩部分構(gòu)成。檢測部分主要負(fù)責(zé)待檢測內(nèi)容,經(jīng)由光學(xué)系統(tǒng)、光電轉(zhuǎn)換系統(tǒng),將光信號轉(zhuǎn)換成電信號;然后在系統(tǒng)內(nèi)部經(jīng)放大、模/數(shù)轉(zhuǎn)換之后形成數(shù)字化信號,從而構(gòu)成一維或二維的數(shù)字信號;顯示處理部分則負(fù)責(zé)處理經(jīng)電纜傳遞過來的數(shù)字信號,并以圖形或圖像的形式將檢測結(jié)果呈現(xiàn)給用戶。為了方便用戶處理,并給用戶更好的體驗,需要將檢測結(jié)果以簡潔明要的形式表現(xiàn)出來,同時將用戶關(guān)心的信息及時提供給用戶。一維數(shù)字信號通常以曲線形式呈現(xiàn),而二維信號則通常以灰度圖像形式呈現(xiàn)。用戶關(guān)心的通常是某一檢測點的數(shù)據(jù)值或灰度值,可以使用半透明浮動窗口的形式動態(tài)向用戶呈現(xiàn)所選擇的數(shù)據(jù)點的信息。

        1 需求分析

        1.1 顯示結(jié)果分析

        檢測軟件的顯示界面通常如圖1所示。其由框架區(qū)域、顯示檢測結(jié)果對應(yīng)的曲線區(qū)域和浮動顯示的動態(tài)數(shù)據(jù)區(qū)域等幾個部分構(gòu)成。

        圖1 檢測軟件的通常界面

        框架區(qū)域是整個軟件的顯示容器;檢測結(jié)果對應(yīng)的曲線區(qū)域由坐標(biāo)系統(tǒng)和數(shù)據(jù)曲線兩部分構(gòu)成,若檢測結(jié)果為二維信號則應(yīng)顯示圖像的灰度信息;浮動顯示數(shù)據(jù)區(qū)提供用戶選定的檢測點相關(guān)信息,通常跟隨鼠標(biāo)浮動實時顯示,同時為不遮住其下方的曲線及其它內(nèi)容,需以半透明的方式呈現(xiàn)。

        根據(jù)檢測軟件常用界面及要求,可以設(shè)計帶浮動信息提示窗口的檢測軟件布局[1],如圖2所示。其由主對話框、顯示曲線的靜態(tài)文本區(qū)域和顯示浮動區(qū)域的子對話框構(gòu)成。

        圖2 檢測軟件的界面構(gòu)成

        圖3 半透明提示窗口的布局

        1.2 實現(xiàn)原理

        對于框架,可以使用MFC中的對話框來實現(xiàn);對于檢測結(jié)果顯示區(qū)域,則需要將MFC中的靜態(tài)文本采用子類化技術(shù)來完成;對于浮動區(qū)域,則仍需要使用對話框來實現(xiàn)。

        檢測結(jié)果的可視化分為兩部分:擴展CStatic類形成一個能夠自我重繪的子類,在該子類中完成坐標(biāo)系及相應(yīng)檢測數(shù)據(jù)的繪制工作;MFC中的CStatic控件與該擴展子類進行關(guān)聯(lián)以實現(xiàn)子類化,從而完成檢測結(jié)果的顯示及繪制。

        對于浮動窗口則需要解決兩個問題:一是半透明;一是實時浮動顯示相應(yīng)內(nèi)容。對于半透明,可以使用Windows提供的SetLayeredWindowAttributes函數(shù),借助層次化來實現(xiàn)。對于數(shù)據(jù)的動態(tài)顯示及窗口浮動,則需要建立主對話框與浮動對話框之間的數(shù)據(jù)關(guān)聯(lián)及消息響應(yīng)來實現(xiàn)[2]。

        2 實現(xiàn)

        創(chuàng)建基于對話框的MFC應(yīng)用程序,在對話框中刪除原有控件,然后添加一個靜態(tài)文本控件,同時添加一個新的對話框,并將其設(shè)置為無邊框風(fēng)格。

        2.1 檢測數(shù)據(jù)顯示實現(xiàn)

        將已經(jīng)編寫好的自定義數(shù)據(jù)顯示類CDataShow類添加到項目中,并在相應(yīng)的文件中添加對其頭文件的引用。CDataShow類主要完成與主對話框類進行數(shù)據(jù)交換、繪制坐標(biāo)系統(tǒng)以及曲線的實時繪制等工作,同時還需要與半透明提示窗口時行消息傳遞。

        2.2 半透明窗口實現(xiàn)原理

        在MFC中,可以借助user32.dll提供的SetLayeredWindowAttributes函數(shù)來實現(xiàn)層次化,通過層次化來創(chuàng)建半透明窗口。用于實現(xiàn)半透明窗口的對話框不能使用邊框,而且應(yīng)該添加一個靜態(tài)文本控件用于顯示數(shù)據(jù)點信息,其布局如圖3所示。

        2.3 半透明窗口實現(xiàn)

        以子對話框為基礎(chǔ),創(chuàng)建一個新的對話框類CMyTextDlg,同時需要對該類添加重寫虛函數(shù)OnInitDialog。在對話框初始化函數(shù)中,使用SetWindowLong函數(shù)設(shè)置子對話框窗口風(fēng)格[3]為WS_EX_LAYERED(0x00080000);設(shè)置好該風(fēng)格之后,就可以調(diào)用SetLayeredWindowAttributes函數(shù)來透明化窗口。透明化窗口之后,還需要將其設(shè)置為頂層窗體,同時取消其在任務(wù)欄中的圖標(biāo)顯示。

        BOOL CMyTextDlg::OnInitDialog()

        {

        ……

        SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)|WS_EX_LAYERED);

        ……

        ModifyStyleEx(WS_EX_APPWINDOW,WS_EX_TOOLWINDOW,SWP_FRAMECHANGED);

        ::SetWindowPos(m_hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE);

        ……

        }

        為在提示窗口中動態(tài)顯示提示信息,需要為CMyTextDlg類添加自定義公共函數(shù)SetText。

        voidCMyTextDlg::SetText(CStringStr)

        {

        SetDlgItemText(IDC_INFO,Str);

        }

        在主對話框中使用子對話框作為提示窗口時,需要在其頭文件中添加對子對話框類的引用,同時定義與之對應(yīng)的對象指針和標(biāo)志量。

        CMyTextDlg *m_pDlgAlpha;

        BOOL m_bIsCap;

        因用戶感興趣的數(shù)據(jù)均處于檢測結(jié)果的繪制區(qū)域,當(dāng)鼠標(biāo)不在該區(qū)域內(nèi)時不應(yīng)顯示提示窗口。所以需要捕獲主對話框的鼠標(biāo)按下及移動事件,并添加相應(yīng)的消息響應(yīng)函數(shù)。

        voidCmyTestDlg::OnLButtonDown(UINT nFlags,CPoint point)

        {

        m_bIsCap=TRUE;

        if(!m_pDlgAlpha)

        {

        m_pDlgAlpha=new CMyTextDlg;

        m_pDlgAlpha->Create(CMyTextDlg::IDD,CWnd::FromHandle(::GetDesktopWindow()));

        }

        CDialog::OnLButtonDown(nFlags, point);

        }

        voidCmyTestDlg::OnLButtonUp(UINT nFlags, CPoint point)

        {

        if(m_pDlgAlpha)

        {

        m_pDlgAlpha->ShowWindow(SW_HIDE);

        deletem_pDlgAlpha;m_pDlgAlpha=NULL;

        }

        m_bIsCap=FALSE;

        CDialog::OnLButtonUp(nFlags, point);

        }

        voidCmyTestDlg::OnMouseMove(UINT nFlags, CPoint point)

        {

        ……

        CStringstr=_T("");

        str.Format(_T("坐標(biāo):(%d,%d)"),pnt.x,pnt.y);

        ShowTips(color,str);

        ……

        }

        為主對話框添加公共函數(shù)void ShowTips(CStringStr),通過子對話框指針設(shè)置其中的提示文本,并根據(jù)文本的高度及寬度動態(tài)調(diào)整了對話框的大小。

        voidCmyTestDlg::ShowTips(CStringStr )

        {

        ……

        HWND DeskHwnd = ::GetDesktopWindow(); //取得桌面句柄

        HDC DeskDC= ::GetWindowDC(DeskHwnd);

        CDC *pDC=CDC::FromHandle(DeskDC);

        CSizesSize=pDC->GetTextExtent(Str);//獲得文字的寬和高

        m_pDlgAlpha->MoveWindow(pnt.x+10,pnt.y,sSize.cx,sSize.cy);

        m_pDlgAlpha->SetText(Str);

        m_pDlgAlpha->ShowWindow(SW_SHOW);

        ReleaseDC(pDC);

        ::ReleaseDC(m_hWnd,DeskDC);

        }

        3 結(jié)論

        經(jīng)實際測試,檢測軟件在顯示檢測結(jié)果曲線的同時,能夠?qū)崟r浮動顯示用戶選定的檢測數(shù)據(jù)點信息,改善并提高了用戶的使用體驗。

        [1]聶斐,殷興輝.基于MFC的實時數(shù)據(jù)動態(tài)顯示界面設(shè)計[J].電子設(shè)計工程,2013(10):136-138.

        [2]楊剛.基于MFC用戶界面設(shè)計主、子對話框數(shù)據(jù)的傳遞[J].機電產(chǎn)品開發(fā)與創(chuàng)新,2005(6):98-99.

        [3]孫鑫,余安萍.Visual C++深入詳解[M].北京:電子工業(yè)出版社,2006.

        Designing and Implementation of Semitransparent Window Based on MFC

        YING Chang-sheng

        (Jilin Normal University, Siping Jilin 136000, China)

        In the duration of displaying the detected industrial result, users often need to analyze some detected points and do some corresponding process according to the analysis. Detecting software should also provide information of selected detecting points, as well as showing the detecting result. The information should be displayed in a floating region and should not occupy display region. Our software displays the information of selected points in a semitransparent floating window based on MFC, which providing a kindly user interface.

        real time; selected; floating; semitransparent

        2016-03-29

        英昌盛(1979- ),男,講師,從事算法與圖像處理研究。

        TP312

        A

        2095-7602(2016)08-0038-04

        猜你喜歡
        半透明浮動對話框
        中國船級社(CCS)發(fā)布 《海上浮動設(shè)施入級規(guī)范》(2023)
        月球上的半透明玻璃珠
        大自然探索(2022年5期)2022-07-11 03:10:33
        正?;謴?fù)虛擬機
        濕化學(xué)法合成Ba(Mg(1-x)/3ZrxTa2(1-x)/3)O3納米粉體及半透明陶瓷的制備
        Bootlace Worms’Secret etc.
        一種用于剪板機送料的液壓浮動夾鉗
        帶有浮動機構(gòu)的曲軸孔鏜刀應(yīng)用研究
        半透明三維物體表面光澤真實感實時渲染方法
        最愛透明、半透明
        女友·花園(2015年7期)2015-05-30 10:48:04
        世界最大浮動船試水重量超60萬噸
        廣東造船(2013年6期)2013-04-29 16:34:55
        日本动态120秒免费| 激情乱码一区二区三区| 我的极品小姨在线观看| 国语淫秽一区二区三区四区| 久久人妻av一区二区软件| 国产精品欧美福利久久| 永久黄网站色视频免费| 久九九久视频精品网站| 亚洲精品熟女av影院| 中文字幕乱码亚洲无限码| 日韩av无码精品一二三区| 无码人妻少妇色欲av一区二区 | 99蜜桃在线观看免费视频网站| 欧美三级超在线视频| 在线精品亚洲一区二区三区| 91精品久久久老熟女91精品| а√中文在线资源库| 午夜男女爽爽爽在线视频| 东京热加勒比在线观看| 久草视频在线播放免费| 久久精品人搡人妻人少妇| 摸进她的内裤里疯狂揉她动图视频 | 精品国产亚洲av高清大片| 亚洲乱码一区av春药高潮| 欧美 日韩 国产 成人 在线观看| 成人综合久久精品色婷婷| 亚洲中文乱码在线视频| 五月色丁香婷婷网蜜臀av| 精品久久欧美熟妇www| 国产熟女亚洲精品麻豆| 日本在线免费一区二区三区| 男女主共患难日久生情的古言 | 一色桃子中文字幕人妻熟女作品| 秋霞午夜无码鲁丝片午夜精品| www.91久久| 在线亚洲精品中文字幕美乳色| 综合亚洲伊人午夜网| 日本爽快片18禁免费看| 亚洲午夜久久久久中文字幕久 | 国产自拍伦理在线观看| 插插射啊爱视频日a级|