999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于MFC的半透明窗口設計與實現

2016-11-21 05:47:03英昌盛
長春師范大學學報 2016年8期
關鍵詞:區域用戶檢測

英昌盛

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

?

基于MFC的半透明窗口設計與實現

英昌盛

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

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

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

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

1 需求分析

1.1 顯示結果分析

檢測軟件的顯示界面通常如圖1所示。其由框架區域、顯示檢測結果對應的曲線區域和浮動顯示的動態數據區域等幾個部分構成。

圖1 檢測軟件的通常界面

框架區域是整個軟件的顯示容器;檢測結果對應的曲線區域由坐標系統和數據曲線兩部分構成,若檢測結果為二維信號則應顯示圖像的灰度信息;浮動顯示數據區提供用戶選定的檢測點相關信息,通常跟隨鼠標浮動實時顯示,同時為不遮住其下方的曲線及其它內容,需以半透明的方式呈現。

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

圖2 檢測軟件的界面構成

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

1.2 實現原理

對于框架,可以使用MFC中的對話框來實現;對于檢測結果顯示區域,則需要將MFC中的靜態文本采用子類化技術來完成;對于浮動區域,則仍需要使用對話框來實現。

檢測結果的可視化分為兩部分:擴展CStatic類形成一個能夠自我重繪的子類,在該子類中完成坐標系及相應檢測數據的繪制工作;MFC中的CStatic控件與該擴展子類進行關聯以實現子類化,從而完成檢測結果的顯示及繪制。

對于浮動窗口則需要解決兩個問題:一是半透明;一是實時浮動顯示相應內容。對于半透明,可以使用Windows提供的SetLayeredWindowAttributes函數,借助層次化來實現。對于數據的動態顯示及窗口浮動,則需要建立主對話框與浮動對話框之間的數據關聯及消息響應來實現[2]。

2 實現

創建基于對話框的MFC應用程序,在對話框中刪除原有控件,然后添加一個靜態文本控件,同時添加一個新的對話框,并將其設置為無邊框風格。

2.1 檢測數據顯示實現

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

2.2 半透明窗口實現原理

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

2.3 半透明窗口實現

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

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

……

}

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

voidCMyTextDlg::SetText(CStringStr)

{

SetDlgItemText(IDC_INFO,Str);

}

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

CMyTextDlg *m_pDlgAlpha;

BOOL m_bIsCap;

因用戶感興趣的數據均處于檢測結果的繪制區域,當鼠標不在該區域內時不應顯示提示窗口。所以需要捕獲主對話框的鼠標按下及移動事件,并添加相應的消息響應函數。

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("坐標:(%d,%d)"),pnt.x,pnt.y);

ShowTips(color,str);

……

}

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

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 結論

經實際測試,檢測軟件在顯示檢測結果曲線的同時,能夠實時浮動顯示用戶選定的檢測數據點信息,改善并提高了用戶的使用體驗。

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

[2]楊剛.基于MFC用戶界面設計主、子對話框數據的傳遞[J].機電產品開發與創新,2005(6):98-99.

[3]孫鑫,余安萍.Visual C++深入詳解[M].北京:電子工業出版社,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

猜你喜歡
區域用戶檢測
“不等式”檢測題
“一元一次不等式”檢測題
“一元一次不等式組”檢測題
關注用戶
商用汽車(2016年11期)2016-12-19 01:20:16
關注用戶
商用汽車(2016年6期)2016-06-29 09:18:54
小波變換在PCB缺陷檢測中的應用
關注用戶
商用汽車(2016年4期)2016-05-09 01:23:12
關于四色猜想
分區域
基于嚴重區域的多PCC點暫降頻次估計
電測與儀表(2015年5期)2015-04-09 11:30:52
主站蜘蛛池模板: 国产农村精品一级毛片视频| 日韩不卡高清视频| 福利视频久久| 婷婷六月在线| 欧美一区二区三区香蕉视| 免费国产高清精品一区在线| a毛片免费在线观看| 亚洲欧美色中文字幕| 免费毛片在线| 欧美天天干| 国产精品一区二区不卡的视频| 亚洲综合极品香蕉久久网| 亚洲天堂.com| 欧美色伊人| 九月婷婷亚洲综合在线| 天天综合网在线| 草逼视频国产| 亚洲二区视频| 天天操天天噜| 亚洲日本韩在线观看| 亚洲精品国产日韩无码AV永久免费网 | 自拍中文字幕| 亚洲成人一区二区三区| 亚洲综合久久成人AV| 国产亚洲精品yxsp| 亚洲国产成人精品青青草原| 九九热这里只有国产精品| 国产在线观看第二页| 免费看一级毛片波多结衣| 午夜福利视频一区| 欧美成人午夜视频免看| 免费高清毛片| 一级做a爰片久久免费| 国产精品主播| 亚洲无码精彩视频在线观看 | 狠狠色综合久久狠狠色综合| 亚洲香蕉在线| 国产精品2| 日本黄色a视频| 国产浮力第一页永久地址| 国产男人天堂| 99激情网| 1769国产精品免费视频| 国产一级二级在线观看| 色综合天天视频在线观看| 91无码网站| 久久精品国产精品一区二区| 中国黄色一级视频| 丰满人妻久久中文字幕| 中文字幕 91| 亚洲有码在线播放| 97视频免费在线观看| 91精品啪在线观看国产91九色| 国产丝袜91| 成年女人a毛片免费视频| 中文字幕在线日韩91| 国产后式a一视频| 日韩精品无码免费专网站| 亚洲人在线| 国产av色站网站| 亚洲色图欧美在线| 中国一级毛片免费观看| 亚洲swag精品自拍一区| 久久精品嫩草研究院| 91久久夜色精品国产网站| 亚欧美国产综合| 亚洲日韩在线满18点击进入| 国产精品色婷婷在线观看| 国产流白浆视频| 国产欧美日韩综合在线第一| 精品91视频| 亚洲狼网站狼狼鲁亚洲下载| 亚洲精品你懂的| 99re经典视频在线| 综合色88| 香蕉蕉亚亚洲aav综合| 亚洲国产清纯| 日韩欧美国产精品| 国产精品午夜电影| 亚洲美女视频一区| 成人在线观看一区| 丝袜高跟美脚国产1区|