VisualC++系統(tǒng)設(shè)計(jì)大作業(yè)_第1頁(yè)
VisualC++系統(tǒng)設(shè)計(jì)大作業(yè)_第2頁(yè)
VisualC++系統(tǒng)設(shè)計(jì)大作業(yè)_第3頁(yè)
VisualC++系統(tǒng)設(shè)計(jì)大作業(yè)_第4頁(yè)
VisualC++系統(tǒng)設(shè)計(jì)大作業(yè)_第5頁(yè)
已閱讀5頁(yè),還剩15頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

一、密碼登錄界面設(shè)計(jì)..............................................1

1、登錄前的界面..................................................1

2、登錄后的界面..................................................2

二、簡(jiǎn)易計(jì)算器設(shè)計(jì).................................................2

三、畫(huà)圖版設(shè)計(jì).....................................................3

四、結(jié)合課題實(shí)現(xiàn)具體功能...........................................5

五、制作步驟.......................................................5

1、建立基于MFC的單文檔工程.....................................5

2、標(biāo)定對(duì)話框的制作.............................................5

3、測(cè)量對(duì)話框的制作.............................................5

六、功能實(shí)現(xiàn).......................................................6

1、功能模塊1——訪問(wèn)權(quán)限的控制(見(jiàn)登錄界面設(shè)計(jì))..................6

2、功能模塊2——圖片的全屏顯示..................................6

3、功能模塊3——圖像采集........................................8

程序源代碼........................................................10

0

一、密碼登錄界面設(shè)計(jì)

1、登錄前的界面

密碼為9位,允許輸錯(cuò)3次

(UnknownScope)

AFX_STATICBOOLAFXAPIIsHelpKey(LPMSGlpMsg)

//returnTRUEonlyfornon-repeatFlkeydowns.

returnlpMsg->message==W_KEYD0¥N城

lpMsg->wPara?=VK_F1&&

!(HI¥ORD(lpMsg->lParam)&KF」

GetKeyState(VK_SHIFT)>=0

GetKeyState(VK_CONTROL)>=01

GetKeyState(VK_MENU)>=0;

-AFX.STATICinlineBOOLIsEnterKey(LPMSG

{returnlpMsg->?essage==VM_KEYDOW1

-AFX.STATICinlineBOOLIsButtonUp(LPMSG

{returnIpMsg-Message=¥M_LBUTTO1

-BOOLCVinThread::ProcessMessageFilter(in-

if(lpMsg—NULL)

returnFALSE.//nothandled

CFrameWnd*pTopFrameWnd:

CWnd*pMaintfnd:

CWnd*pMsgVnd.

switch(code)

100%

1

2、登錄后的界面

SJ

06。

Hello,大安奸.我陽(yáng)趙?I,Welcome

這邊有計(jì)算器功能相面圖功能

由干能力有R#.只能實(shí)現(xiàn)某些自單的功能.THANKYOU!

二、簡(jiǎn)易計(jì)算器設(shè)計(jì)

實(shí)現(xiàn)常見(jiàn)的加、減、乘、除功能(這邊顯示的為30+3=33)

XWBT7

D8Qf

1ello.

□□

jJjd山上l

,U.±J_U

_LI_ua二

山山d

2

三、畫(huà)圖版設(shè)計(jì)

1、畫(huà)直線,顏色分別為紅、綠、藍(lán),線寬為1、2、3

3

2、畫(huà)矩形,顏色設(shè)置為綠色,線寬為3

3、畫(huà)橢圓,顏色任意,線寬任意

4

四、結(jié)合課題實(shí)現(xiàn)具體功能

本文結(jié)合本人的研究課題,設(shè)計(jì)并實(shí)現(xiàn)了基于MFC的單文檔工程。它具有以

下功能:

1、單目結(jié)構(gòu)光視覺(jué)系統(tǒng)標(biāo)定用照片的采集;

2、順序投射特定的編碼圖案(對(duì)應(yīng)全屏顯示圖案),并按順序采集測(cè)量一

組圖案,并保存為特定文件名;

3、實(shí)現(xiàn)用戶訪問(wèn)權(quán)限的控制——當(dāng)用戶輸入正確的用戶名和密碼時(shí),后續(xù)

的標(biāo)定、測(cè)量功能方可使用。(訪問(wèn)權(quán)限設(shè)計(jì)見(jiàn)第一點(diǎn)登錄界面設(shè)計(jì))

五、制作步驟

1、建立基于MFC的單文檔工程

2、標(biāo)定對(duì)話框的制作

它是基于opencv實(shí)現(xiàn)攝像機(jī)對(duì)外部環(huán)境的圖像采集。其制作流程與登錄界

面對(duì)話框大致相同。單擊“開(kāi)始”按鈕,準(zhǔn)備外部圖像的采集;每單擊“圖像采

集”按鈕一次,存儲(chǔ)一張外部圖像。

3、測(cè)量對(duì)話框的制作

它也是基于opencv實(shí)現(xiàn)攝像機(jī)對(duì)外部環(huán)境的圖像采集。它的制作流程與登

錄界面對(duì)話框大致相同,增加的控件為位圖圖像和開(kāi)始按鈕。其主要難點(diǎn)在于圖

片的全屏顯示:由于圖片只能顯示在工作區(qū)內(nèi),因此,需要求出屏幕的分辨率和

工作區(qū)的大小,顯示時(shí)的對(duì)話框外框超出屏幕,使圖像剛好充滿整個(gè)屏幕。主屏

幕全屏顯示圖片使投影機(jī)投射相應(yīng)的編碼圖案,采集測(cè)量圖案可獲得經(jīng)過(guò)編碼圖

案調(diào)制的目標(biāo)物體圖像,如圖1所示。

圖1、目標(biāo)物體經(jīng)編碼圖案調(diào)制后獲得的圖案

最后,將三個(gè)對(duì)話框整合到單文檔界面內(nèi),如圖2所示。

5

色無(wú)標(biāo)題~nextIkJ回區(qū)

文件名)編輯(1)查看也)幫助但)用尸登錄標(biāo)定測(cè)量

口蘇IHX電電I昌號(hào)

就緒數(shù)字

圖2、主界面

六、功能實(shí)現(xiàn)

1、功能模塊1——訪問(wèn)權(quán)限的控制(見(jiàn)登錄界面設(shè)計(jì))

2、功能模塊2——圖片的全屏顯示

for(m_pp=0;m_pp<12;m_pp++)〃顯示順序顯示12張圖片

(

GetWindowPlacement(&m_01dWndPlacement);

CRectWindowRect;〃定義窗口的CRect

GetWindowRectC&WindowRect);〃獲取窗口的左上、右下角的坐標(biāo)

CRectClientRect;〃定義客戶區(qū)

RepositionBars(0,Oxffff,AFX_IDW_PANE_FIRST,reposQuery,

&ClientRect);

ClientToScreen(&C1ientRect);

intnFullWidth=GetSystemMetrics(SM_CXSCREEN);//獲取屏幕的分辨率

intnFullHeight=GetSystemMetrics(SM_CYSCREEN);

//將除控制條外的客戶區(qū)全屏顯示到從(0,0)到(nFullWidth,nFullHeight)

區(qū)域,

〃將(0,0)和(nFullWidth,nFullHeight)兩個(gè)點(diǎn)外擴(kuò)充原窗口和除控制條之

外的客

〃戶區(qū)位置間的差值,就得到全屏顯示的窗口位置

m_FulIScreenRect.left=WindowRect.left-ClientRect.left;

mFulIScreenRect.top=WindowRect.top-ClientRect.top;

mFulIScreenRect.right=WindowRect.right-ClientRect.right+nFullWidth;

m_FulIScreenRect.bottom=WindowRect.bottom-ClientRect.bottom+nFullHeig

ht;

6

m_bFullScreen=TRUE;//設(shè)置全屏顯示標(biāo)志為TRUE

//進(jìn)入全屏顯示狀態(tài):

WINDOWPLACEMENTwndpl;

wndp1.1ength=sizeof(WINDOWPLACEMENT);

wndpl.flags=0;

wndpl.showCmd=SW_SHOWNORMAL;

wndpl.rcNormalPosition=mFullScreenRect;

SetWindowPlacement(fewndpl);〃設(shè)定窗口的顯示狀態(tài)及最小化、最大化等

的位置

Seticon(m_hlcon,TRUE);//Setbigicon

Seticon(m_hlcon,FALSE);//Setsmallicon

CPaintDCde(this);//devicecontextforpainting

RECTrcclient;

GetClientRect(&rcclient);〃獲取窗口客戶區(qū)的坐標(biāo)

intnBmpX;〃源矩形的寬度和高度

intnBmpY;

HDChDC;

〃將待處理的圖像載入hBitmap中

wsprintf(filename,_T(〃pic%d.bmp〃),m_kk);

HBITMAP

hBitmap=(HBITMAP)::LoadImage(NULL,filename,IMAGE_BITMAP,0,0,LR_LOADFR

OMFILE|LR_CREATEDIBSECTION);

BITMAPbmp;〃定義一個(gè)BITMAP結(jié)構(gòu)的對(duì)象bmp

GetObject(hBitmap,sizeof(bmp),&bmp);

nBmpX=bmp.bmWidth;〃得到圖像的寬度和高度

nBmpY=bmp.bmHeight;

intclient_Width;

client_Width=rcclient.right-rcclient.left;

intclient_Height;

client_Height=rcclient.bottom-reelient.top;

nBmpX=client_Width;

nBmpY=c1ient_Height;

hDC=CreateCompatibleDC(NULL);〃開(kāi)辟一個(gè)可用的DC

SelectObject(hDC,hBitmap);〃把對(duì)象hBitmap存入DC中

StretchBlt(de,0,0,client_Width,

client_Height,hDC,0,0,nBmpX,nBmpY,SRCCOPY);〃將圖片從源矩形復(fù)制到

目標(biāo)矩法

7

圖3、圖像的全屏、采集圖像對(duì)話框

3、功能模塊3——圖像采集

功能介紹:鼠標(biāo)左擊開(kāi)始,則進(jìn)入標(biāo)定狀態(tài),準(zhǔn)備采集圖案;單擊圖像采集,

則攝像機(jī)順序采集圖像并存儲(chǔ)為指定文件名。這有助完成結(jié)構(gòu)光視覺(jué)系統(tǒng)的標(biāo)定

工作。如圖6所示。

相應(yīng)模塊的程序段如下:

CvCapture*capture=0;〃用于輔助獲取圖像幀

intncams=cvcamGetCamerasCount();〃獲取攝像頭的個(gè)數(shù)

charfilenamel[20];〃保存圖像的文件名

IplImage*frame=NULL;〃用于存儲(chǔ)圖片

capture=cvCaptureFromCAM(-l);〃使用默認(rèn)的攝像頭

Sleep(800);〃系統(tǒng)等待0.8秒

frame=cvQueryFrame(capture);〃從攝像頭或者文件中抓

取并返回幀

Sleep(200);〃系統(tǒng)等待0.2秒

wsprintf(filenamel,(/zgetpic%d.bmpz,),m_kk);〃字符串處理

cvSaveImage(fi1ename1,frame);〃保存圖像為指定文件名

cvReleaseCapture(&capture);〃停止攝像機(jī)采集圖像

8

標(biāo)定

圖4、標(biāo)定對(duì)話框

9

程序源代碼

在CALcpp文件中添加如下代碼:

voidCCA1::OnButtonO()〃計(jì)算器

(

//TODO:Addyourcontrolnotificationhandlercodehere

if(isresult二二FALSE)

(

numl+二〃0〃;

m_result=numl;

UpdateData(FALSE);

)

else

{

num2+=〃0”;

m_result=num2;

UpdateData(FALSE);

)

)

voidCCA1::0nButtonl()

(

//TODO:Addyourcontrolnotificationhandlercodehere

if(isresult二二FALSE)

(

numl+=〃l〃;

m_result=numl;

UpdateData(FALSE);

)

else

(

num2+=〃l〃;

m_result=num2;

UpdateData(FALSE);

)

}

voidCCA1::OnButtonlO()

(

//TODO:Addyourcontrolnotificationhandlercodehere

CStringstr二〃一〃;

io

if(isresult二二FALSE)

(

str+=numl;

m_result=str;

UpdateData(FALSE);

)

else

{

str+=num2;

m_result=str;

UpdateData(FALSE);

)

)

voidCCA1::OnButtonll()

{

//TODO:Addyourcontrolnotificationhandlercodehere

isresult=true;

witch=l;

}

voidCCA1::0nButtonl2()

(

//TODO:Addyourcontrolnotificationhandlercodehere

isresult=true;

witch=2;

)

voidCCA1::0nButtonl3()

{

//TODO:Addyourcontrolnotificationhandlercodehere

isresult=true;

witch=3;

voidCCA1::0nButtonl4()

(

//TODO:Addyourcontrolnotificationhandlercodehere

isresult=true;

witch=4;

)

voidCCA1::0nButtonl5()

11

//TODO:Addyourcontrolnotificationhandlercodehere

if(isresu1t==FALSE)

(

numl+=z/.

m_result=numl;

UpdateData(FALSE);

)

else

(

num2+=〃.〃;

m_result=num2;

UpdateData(FALSE);

)

)

voidCCA1::0nButtonl6()

(

//TODO:Addyourcontrolnotificationhandlercodehere

doublenl=atof(numl);

doublen2=atof(num2);

doubleresult;

switch(witch)

(

case1:

result=nl+n2;

break;

case2:

result=nl-n2;

break;

case3:

result二nl*n2;

break;

case4:

result=nl/n2;

break;

}

m_result=//z,;

m_result.Formatresult);

UpdateData(FALSE);

)

voidCCA1::0nButton2()

(

//TODO:Addyourcontrolnotificationhandlercodehere

12

if(isresult二二FALSE)

(

numl+二〃2〃;

m_result=numl;

UpdateData(FALSE);

)

else

{

num2+=〃2〃;

m_result=num2;

UpdateData(FALSE);

)

)

voidCCA1::0nButton30

{

//TODO:Addyourcontrolnotificationhandlercodehere

if(isresult==FALSE)

(

numl+=〃3〃;

m_result=numl;

UpdateData(FALSE);

)

else

(

num2+=”3〃;

m_result=num2;

UpdateData(FALSE);

)

)

voidCCA1::0nButton4()

(

//TODO:Addyourcontrolnotificationhandlercodehere

if(isresult二二FALSE)

(

numl+=〃4”;

m_result=numl;

UpdateData(FALSE);

)

else

(

num2+="4”;

m_result=num2;

13

UpdateData(FALSE);

}

voidCCA1::0nButton50

{

//TODO:Addyourcontrolnotificationhandlercodehere

if(isresult==FALSE)

(

numl+=〃5〃;

m_result=numl;

UpdateData(FALSE);

else

num2+=〃5〃;

m_result=num2;

UpdateData(FALSE);

voidCCA1::0nButton6()

(

//TODO:Addyourcontrolnotificationhandlercodehere

if(isresult=FALSE)

(

numl+二〃6〃;

m_result=numl;

UpdateData(FALSE);

else

num2+=〃6〃;

m_result=num2;

UpdateData(FALSE);

voidCCA1::0nButton7()

(

//TODO:Addyourcontrolnotificationhandlercodehere

if(isresult==FALSE)

num]+=〃7〃;

14

m_result=numl;

UpdateData(FALSE);

else

(

num2+=〃7〃;

m_resultz:num2;

UpdateData(FALSE);

)

)

voidCCA1::0nButton8()

(

//TODO:Addyourcontrolnotificationhandlercodehere

if(isresult-FALSE)

(

numl+=〃8”;

m_result=numl;

UpdateData(FALSE);

)

else

{

num2+=〃8〃;

m_result=num2;

UpdateData(FALSE);

}

)

voidCCA1::0nButton90

{

//TODO:Addyourcontrolnotificationhandlercodehere

if(isresult==FALSE)

(

研出十二*〃;

mjesult=numl;

UpdateData(FALSE);

)

else

(

num2+=〃9〃;

mresult=num2;

UpdateData(FALSE);

)

15

在DlgLcpp中添力口如下代碼:

CDlgl::CDlgl(CWnd*pParent/*=NULL*/)

:CDialog(CDlgl::IDD,pParent)

(

m_count=0;

m_correct=_TC130220030");

//{{AFX_DATA_INIT(CDlgl)

m_passwd=_T(〃〃);

//}}AFX_DATA_INIT

)

voidCDlgl::0n0K()

{

//TODO:Addextravalidationhere

UpdateDataO;

if(m_correct!=m_passwd)

(

m_count++;

if(m_count>=3)

(

m_count=0;

A、MessageBox(〃您輸入的密碼已連續(xù)出錯(cuò)三次,程序結(jié)束!〃);

exit(0);

}

if(m_passwd.GetLength()<6)

AfxMessageBox(〃輸入的密碼必須在6位以上,請(qǐng)重新輸入!〃);

else

AfxMessageBox(〃輸入的密碼有誤,請(qǐng)重新輸入!〃);

m_passwd=_T(〃〃);

UpdateData(FALSE);

)

else

CDialog::0n0K();

}

voidCDlgl::0nCancel()

(

//TODO:Addextracleanuphere

exit(0);

CDialog::0nCancel();

16

在LineWidth.cpp中添力H如下代碼:

voidCLineWidth::0n0K()

(

//TODO:Addextravalidationhere

UpdateDataO;

UpdateData(FALSE);

CDialog::0n0K();

在MainFrm.cpp中;忝力口如下代碼:

voidCMainFrame::0nCal()

{

//TODO:Addyourcommandhandlercodehere

m_pdlg=newCCA1;

m_pdlg->Create(IDD.DIALOG2,NULL);

m_pd1g->ShowWindow(SWSHOW);

)

在yyView.cpp中添力n如下代碼:

CYyView::CYyView()

(

//TODO:addconstructioncodehere

m_type=0;

m_select=0;

)

voidCYyView::OnDraw(CDC*pDC)

(

CYyDoc*pDoc=GetDocument();

ASSERT_VALID(pDoc);

//TODO:adddrawcodefornativedatahere

pDC->TextOut(0,0,"Hello,大家好,我是趙強(qiáng),Welcome");

pDC->TextOut(O,30,〃這邊有計(jì)算器功能和畫(huà)圖功能〃);

pDC->TextOut(0,60,〃由于能力有限,只能實(shí)現(xiàn)某些簡(jiǎn)單的功能,THANKYOU!

〃);

voidCYyView::0nLine()

17

//TODO:A

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論