免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
非模態(tài)對話框

非模態(tài)對話框 免費編輯 添加義項名

B 添加義項
?
義項指多義詞的不同概念,如李娜的義項:網(wǎng)球運動員、歌手等;非誠勿擾的義項:馮小剛執(zhí)導(dǎo)電影、江蘇衛(wèi)視交友節(jié)目等。 查看詳細(xì)規(guī)范>>
所屬類別 :
其他

非模態(tài)(Modeless)對話框,又叫做無模式對話框,當(dāng)用戶打開非模態(tài)對話框時,依然可以操作其他窗口。例如,Windows提供的記事本程序中的【查找】對話框?!静檎摇繉υ捒虿粫艛嘤脩舻妮斎?,打開【查找】對話框后,仍可與其他用戶界面對象進行交互。用戶可以一邊查找,一邊修改文章,這樣就大大方便了使用。

基本信息

  • 中文名稱

    非模態(tài)對話框

  • 外文名稱

    Modeless

折疊 編輯本段 非模態(tài)對話框

非模態(tài)對話框允許用戶在處理非模態(tài)對話框的同時處理目標(biāo)對話框。其不會壟斷用戶的輸入,如圖所示。Windows應(yīng)用程序中,對話框分為兩種。另一種是模態(tài)對話框。二者的區(qū)別在于當(dāng)對話框打開時,是否允許用戶進行其他對象的操作。

要建立非模態(tài)對話框需要調(diào)用兩個函數(shù)Create()和ShowWindow()

折疊 編輯本段 創(chuàng)建和關(guān)閉對話框

無模式對話框與有模式對話框不同的是在創(chuàng)建后其他窗口都可以繼續(xù)接收用戶輸入,因此無模式對話框有些類似一個彈出窗口。創(chuàng)建無模式對話框需要調(diào)用

BOOL CDialog::Create( UINT nIDTemplate, CWnd* pParentWnd = NULL );之后還需要調(diào)用

BOOL CDialog::ShowWindow( SW_SHOW);進行顯示,否則無模式對話框?qū)⑹遣豢梢姷?。相關(guān)代碼如下:

void CYourView::OnOpenDlg(void)

{

/*假設(shè)IDD_TEST_DLG為已經(jīng)定義的對話框資源的ID號*/

CTestDlg *dlg=new CTestDlg;

dlg->Create(IDD_TEST_DLG,NULL);

dlg->ShowWindow(SW_SHOW);

/*不要調(diào)用 delete dlg;*/

}

在上面的代碼中我們新生成了一個對話框?qū)ο?,而且在退出函?shù)時并沒有銷毀該對象。因為如果此時銷毀該對象(對象被銷毀時窗口同時被銷毀),而此時對話框還在顯示就會出現(xiàn)錯誤。那么這就提出了一個問題:什么時候銷毀該對象。我時常使用的方法有兩個:

在對話框退出時銷毀自己:在對話框中重載OnOK與OnCancel在函數(shù)中調(diào)用父類的同名函數(shù),然后調(diào)用DestroyWindow()強制銷毀窗口,在對話框中映射WM_DESTROY消息,在消息處理函數(shù)中調(diào)用delete this;強行刪除自身對象。相關(guān)代碼如下:

void CTestDlg1::OnOK()

{

CDialog::OnOK();

DestroyWindow();

}

void CTestDlg1::OnCancel()

{

CDialog::OnCancel();

DestroyWindow();

}

void CTestDlg1::OnDestroy()

{

CDialog::OnDestroy();

AfxMessageBox("call delete this");

delete this;

}

這種方法的要點是在窗口被銷毀的時候,刪除自身對象。所以你可以在任何時候調(diào)用DestroyWindow()以達到徹底銷毀自身對象的作用。(DestroyWindow()的調(diào)用會引起OnDestroy()的調(diào)用)

通過向父親窗口發(fā)送消息,要求其他窗口對其進行銷毀:首先需要定義一個消息用于進行通知,然后在對話框中映射WM_DESTROY消息,在消息處理函數(shù)中調(diào)用消息發(fā)送函數(shù)通知其他窗口。在接收消息的窗口中利用ON_MESSAGE映射處理消息的函數(shù),并在消息處理函數(shù)中刪除對話框?qū)ο?。相關(guān)代碼如下:

/*更改對話框的有關(guān)文件*/

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

: CDialog(CTestDlg2::IDD, pParent)

{/*m_pParent為一成員變量,用于保存通知窗口的指針,所以該指針不能是一個臨時指針*/

ASSERT(pParent);

m_pParent=pParent;

//{{AFX_DATA_INIT(CTestDlg2)

// NOTE: the ClassWizard will add member initialization here

//}}AFX_DATA_INIT

}

void CTestDlg2::OnOK()

{

CDialog::OnOK();

DestroyWindow();

}

void CTestDlg2::OnCancel()

{

CDialog::OnCancel();

DestroyWindow();

}

void CTestDlg2::OnDestroy()

{

CDialog::OnDestroy();

/*向其他窗口發(fā)送消息,將自身指針作為一個參數(shù)發(fā)送*/

m_pParent->PostMessage(WM_DELETE_DLG,(WPARAM)this);

}

/*在消息接收窗口中添加消息映射*/

/*在頭文件中添加函數(shù)定義*/

afx_msg LONG OnDelDlgMsg(WPARAM wP,LPARAM lP);

/*添加消息映射代碼*/

ON_MESSAGE(WM_DELETE_DLG,OnDelDlgMsg)

END_MESSAGE_MAP()

/*實現(xiàn)消息處理函數(shù)*/

LONG CMy53_s1View::OnDelDlgMsg(WPARAM wP,LPARAM lP)

{

delete (CTestDlg2*)wP;

return 0;

}

/*創(chuàng)建對話框*/

void CMy53_s1View::OnTest2()

{

CTestDlg2 *dlg=new CTestDlg2(this);

dlg->Create(IDD_TEST_DLG_2);

dlg->ShowWindow(SW_SHOW);

}

在這種方法中我們利用消息來進行通知,在Window系統(tǒng)中利用消息進行通知和傳遞數(shù)據(jù)的用法是很多的。

同樣無模式對話框的另一個作用還可以用來在用戶在對話框中的輸入改變時可以及時的反映到其他窗口。下面的代碼演示了在對話框中輸入一段文字,然后將其更新到視圖的顯示區(qū)域中,這同樣也是利用了消息進行通知和數(shù)據(jù)傳遞。

/*在對話框中取出數(shù)據(jù),并向其他窗口發(fā)送消息和數(shù)據(jù),將數(shù)據(jù)指針作為一個參數(shù)發(fā)送*/

void CTestDlg2::OnCommBtn()

{

char szOut[30];

GetDlgItemText(IDC_OUT,szOut,30);

m_pParent->SendMessage(WM_DLG_NOTIFY,(WPARAM)szOut);

}

/*在消息接收窗口中*/

/*映射消息處理函數(shù)*/

ON_MESSAGE(WM_DLG_NOTIFY,OnDlgNotifyMsg)

/*在視圖中繪制出字符串 m_szOut*/

void CMy53_s1View::OnDraw(CDC* pDC)

{

CMy53_s1Doc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

// TODO: add draw code for native data here

pDC->TextOut(0,0,"Display String");

pDC->TextOut(0,20,m_szOut);

}

/*處理通知消息,保存信息并更新顯示*/

LONG CMy53_s1View::OnDlgNotifyMsg(WPARAM wP,LPARAM lP)

{

m_szOut=(char*)wP;

Invalidate();

return 0;

}

此外這種用法利用消息傳遞數(shù)據(jù)的方法對有模式對話框和其他的窗口間通信也一樣有效

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
模態(tài)對話框和非模態(tài)對話框區(qū)別
VC中模態(tài)與非模態(tài)對話框的顯示與關(guān)閉
VC++模態(tài)對話框和非模態(tài)對話框 | 求索閣
DoModal()用法及原理(轉(zhuǎn)載)
CLRCDlg::CLRCDlg(CWnd* pParent /*=NULL*/): CDialog(CLRCDlg::IDD, pParent)
關(guān)于模式與非模式對話框
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服