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

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

2016-11-21 05:47:03英昌盛
關(guān)鍵詞:區(qū)域用戶(hù)檢測(cè)

英昌盛

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

?

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

英昌盛

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

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

實(shí)時(shí);選定;浮動(dòng);半透明

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

1 需求分析

1.1 顯示結(jié)果分析

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

圖1 檢測(cè)軟件的通常界面

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

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

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

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

1.2 實(shí)現(xiàn)原理

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

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

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

2 實(shí)現(xiàn)

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

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

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

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

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

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

以子對(duì)話(huà)框?yàn)榛A(chǔ),創(chuàng)建一個(gè)新的對(duì)話(huà)框類(lèi)CMyTextDlg,同時(shí)需要對(duì)該類(lèi)添加重寫(xiě)虛函數(shù)OnInitDialog。在對(duì)話(huà)框初始化函數(shù)中,使用SetWindowLong函數(shù)設(shè)置子對(duì)話(huà)框窗口風(fēng)格[3]為WS_EX_LAYERED(0x00080000);設(shè)置好該風(fēng)格之后,就可以調(diào)用SetLayeredWindowAttributes函數(shù)來(lái)透明化窗口。透明化窗口之后,還需要將其設(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);

……

}

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

voidCMyTextDlg::SetText(CStringStr)

{

SetDlgItemText(IDC_INFO,Str);

}

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

CMyTextDlg *m_pDlgAlpha;

BOOL m_bIsCap;

因用戶(hù)感興趣的數(shù)據(jù)均處于檢測(cè)結(jié)果的繪制區(qū)域,當(dāng)鼠標(biāo)不在該區(qū)域內(nèi)時(shí)不應(yīng)顯示提示窗口。所以需要捕獲主對(duì)話(huà)框的鼠標(biāo)按下及移動(dòng)事件,并添加相應(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);

……

}

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

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)實(shí)際測(cè)試,檢測(cè)軟件在顯示檢測(cè)結(jié)果曲線(xiàn)的同時(shí),能夠?qū)崟r(shí)浮動(dòng)顯示用戶(hù)選定的檢測(cè)數(shù)據(jù)點(diǎn)信息,改善并提高了用戶(hù)的使用體驗(yàn)。

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

[2]楊剛.基于MFC用戶(hù)界面設(shè)計(jì)主、子對(duì)話(huà)框數(shù)據(jù)的傳遞[J].機(jī)電產(chǎn)品開(kāi)發(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

猜你喜歡
區(qū)域用戶(hù)檢測(cè)
“不等式”檢測(cè)題
“一元一次不等式”檢測(cè)題
“一元一次不等式組”檢測(cè)題
關(guān)注用戶(hù)
關(guān)注用戶(hù)
小波變換在PCB缺陷檢測(cè)中的應(yīng)用
關(guān)注用戶(hù)
關(guān)于四色猜想
分區(qū)域
基于嚴(yán)重區(qū)域的多PCC點(diǎn)暫降頻次估計(jì)
主站蜘蛛池模板: 国产在线自揄拍揄视频网站| 久久国产精品国产自线拍| 丁香六月激情综合| 99久视频| 波多野结衣一区二区三区四区视频| 日韩美毛片| 88国产经典欧美一区二区三区| 午夜在线不卡| 久久黄色影院| av在线手机播放| 日韩精品少妇无码受不了| 国产精品尤物在线| 亚洲欧美自拍中文| 日韩成人免费网站| 国产原创第一页在线观看| 白浆视频在线观看| 理论片一区| 青青草国产在线视频| 国产丝袜无码一区二区视频| 国产亚洲精品精品精品| 丰满人妻久久中文字幕| 92午夜福利影院一区二区三区| 欧美一区二区啪啪| 国产成人欧美| 99在线视频免费| 国产内射在线观看| 亚洲天堂.com| 无码国产偷倩在线播放老年人| 亚洲视频一区| 狠狠亚洲五月天| 在线国产综合一区二区三区| 四虎影视国产精品| 国产精品偷伦视频免费观看国产| 久久免费精品琪琪| 国产chinese男男gay视频网| 亚洲一级无毛片无码在线免费视频| 亚洲国产高清精品线久久| 精品人妻系列无码专区久久| 天天干天天色综合网| 色婷婷在线影院| 被公侵犯人妻少妇一区二区三区| 8090午夜无码专区| 久久国产V一级毛多内射| 日本高清在线看免费观看| 国产情侣一区二区三区| 国产h视频在线观看视频| 久久婷婷国产综合尤物精品| 99精品影院| 在线看片中文字幕| 色综合综合网| 亚洲AⅤ波多系列中文字幕| 无码人妻免费| 国产激情无码一区二区免费| 亚洲国产天堂久久综合226114| 国产成人精品一区二区免费看京| 国产成人精品一区二区三在线观看| 国产精品片在线观看手机版 | 久久精品国产91久久综合麻豆自制| 国产无码制服丝袜| 久久大香香蕉国产免费网站| 亚洲一区波多野结衣二区三区| 中文字幕精品一区二区三区视频| 91久久国产热精品免费| 天天摸夜夜操| 亚洲经典在线中文字幕| 日本久久网站| 国产综合欧美| 国产精品白浆在线播放| 午夜福利网址| 在线看片中文字幕| 日韩在线2020专区| 国产精品一区二区久久精品无码| 亚洲成A人V欧美综合天堂| 日韩av无码精品专区| 搞黄网站免费观看| 91国内外精品自在线播放| 全裸无码专区| 在线国产你懂的| 欧美国产三级| 人妻91无码色偷偷色噜噜噜| 久久人午夜亚洲精品无码区| 亚洲黄色片免费看|