• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            分享知識

            與大家一起分享知識

            C++博客 首頁 新隨筆 聯系 聚合 管理
              19 Posts :: 3 Stories :: 45 Comments :: 0 Trackbacks

            在利用 VC MFC 編程的時候,我們往往能碰到這種情況:在一個模擬程序中(如有些游戲),需要實時顯示一些屬性的值(文字或者圖形),這個時候我們可以重新打開一個對話框(可以是一個模態或者非模態的)來顯示這些信息,本文以模態對話框為例,簡單實現這個技術。以下代碼陰影部分是我利用 ClassWizard 加的,藍色部分是我手工加的。其余是用 MFC 向導生成的:
            源代碼下載地址:http://www.shnenglu.com/Files/sscchh-2000/NotifyDialog.rar?

            // NotifyDialogView.h : interface of the CNotifyDialogView class

            //

            /////////////////////////////////////////////////////////////////////////////

            ?

            #if !defined(AFX_NOTIFYDIALOGVIEW_H__8242946E_9215_46D8_8EAC_DFC7452C8076__INCLUDED_)

            #define AFX_NOTIFYDIALOGVIEW_H__8242946E_9215_46D8_8EAC_DFC7452C8076__INCLUDED_

            ?

            #if _MSC_VER > 1000

            #pragma once

            #endif // _MSC_VER > 1000

            ?

            #include "CountDlg.h"

            ?

            class CNotifyDialogView : public CScrollView

            {

            protected: // create from serialization only

            ?????? CNotifyDialogView();

            ?????? DECLARE_DYNCREATE(CNotifyDialogView)

            ?

            // Attributes

            public:

            ?????? CNotifyDialogDoc* GetDocument();

            ?

            ?????? CCountDlg *m_pCountDlg;

            // Operations

            public:

            ?

            // Overrides

            ?????? // ClassWizard generated virtual function overrides

            ?????? //{{AFX_VIRTUAL(CNotifyDialogView)

            ?????? public:

            ?????? virtual void OnDraw(CDC* pDC);? // overridden to draw this view

            ?????? virtual BOOL PreCreateWindow(CREATESTRUCT& cs);

            ?????? protected:

            ?????? virtual void OnInitialUpdate(); // called first time after construct

            ?????? virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);

            ?????? virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);

            ?????? virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);

            ?????? //}}AFX_VIRTUAL

            ?

            // Implementation

            public:

            ?????? virtual ~CNotifyDialogView();

            #ifdef _DEBUG

            ?????? virtual void AssertValid() const;

            ?????? virtual void Dump(CDumpContext& dc) const;

            #endif

            ?

            protected:

            ?

            // Generated message map functions

            protected:

            ?????? //{{AFX_MSG(CNotifyDialogView)

            ?????? afx_msg void OnTimer(UINT nIDEvent);

            ?????? afx_msg void OnCountDialog();

            ?????? afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);

            ?????? afx_msg void OnDestroy();

            ?????? //}}AFX_MSG

            ?????? DECLARE_MESSAGE_MAP()

            };

            ?

            #ifndef _DEBUG? // debug version in NotifyDialogView.cpp

            inline CNotifyDialogDoc* CNotifyDialogView::GetDocument()

            ?? { return (CNotifyDialogDoc*)m_pDocument; }

            #endif

            ?

            /////////////////////////////////////////////////////////////////////////////

            ?

            //{{AFX_INSERT_LOCATION}}

            // Microsoft Visual C++ will insert additional declarations immediately before the previous line.

            ?

            #endif // !defined(AFX_NOTIFYDIALOGVIEW_H__8242946E_9215_46D8_8EAC_DFC7452C8076__INCLUDED_)

            ?

            // NotifyDialogView.cpp : implementation of the CNotifyDialogView class

            //

            ?

            #include "stdafx.h"

            #include "NotifyDialog.h"

            ?

            #include "NotifyDialogDoc.h"

            #include "NotifyDialogView.h"

            ?

            #ifdef _DEBUG

            #define new DEBUG_NEW

            #undef THIS_FILE

            static char THIS_FILE[] = __FILE__;

            #endif

            ?

            /////////////////////////////////////////////////////////////////////////////

            // CNotifyDialogView

            ?

            IMPLEMENT_DYNCREATE(CNotifyDialogView, CScrollView)

            ?

            BEGIN_MESSAGE_MAP(CNotifyDialogView, CScrollView)

            ?????? //{{AFX_MSG_MAP(CNotifyDialogView)

            ?????? ON_WM_TIMER()

            ?????? ON_COMMAND(ID_COUNT_DIALOG, OnCountDialog)

            ?????? ON_WM_CREATE()

            ?????? ON_WM_DESTROY()

            ?????? //}}AFX_MSG_MAP

            ?????? // Standard printing commands

            ?????? ON_COMMAND(ID_FILE_PRINT, CScrollView::OnFilePrint)

            ?????? ON_COMMAND(ID_FILE_PRINT_DIRECT, CScrollView::OnFilePrint)

            ?????? ON_COMMAND(ID_FILE_PRINT_PREVIEW, CScrollView::OnFilePrintPreview)

            END_MESSAGE_MAP()

            ?

            /////////////////////////////////////////////////////////////////////////////

            // CNotifyDialogView construction/destruction

            ?

            CNotifyDialogView::CNotifyDialogView()

            {

            ?????? // TODO: add construction code here

            ?????? m_pCountDlg = NULL;

            }

            ?

            CNotifyDialogView::~CNotifyDialogView()

            {

            }

            ?

            BOOL CNotifyDialogView::PreCreateWindow(CREATESTRUCT& cs)

            {

            ?????? // TODO: Modify the Window class or styles here by modifying

            ?????? //? the CREATESTRUCT cs

            ?

            ?????? return CScrollView::PreCreateWindow(cs);

            }

            ?

            /////////////////////////////////////////////////////////////////////////////

            // CNotifyDialogView drawing

            ?

            void CNotifyDialogView::OnDraw(CDC* pDC)

            {

            ?????? CNotifyDialogDoc* pDoc = GetDocument();

            ?????? ASSERT_VALID(pDoc);

            ?????? // TODO: add draw code for native data here

            }

            ?

            void CNotifyDialogView::OnInitialUpdate()

            {

            ?????? CScrollView::OnInitialUpdate();

            ?

            ?????? CSize sizeTotal;

            ?????? // TODO: calculate the total size of this view

            ?????? sizeTotal.cx = sizeTotal.cy = 100;

            ?????? SetScrollSizes(MM_TEXT, sizeTotal);

            }

            ?

            /////////////////////////////////////////////////////////////////////////////

            // CNotifyDialogView printing

            ?

            BOOL CNotifyDialogView::OnPreparePrinting(CPrintInfo* pInfo)

            {

            ?????? // default preparation

            ?????? return DoPreparePrinting(pInfo);

            }

            ?

            void CNotifyDialogView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)

            {

            ?????? // TODO: add extra initialization before printing

            }

            ?

            void CNotifyDialogView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)

            {

            ?????? // TODO: add cleanup after printing

            }

            ?

            /////////////////////////////////////////////////////////////////////////////

            // CNotifyDialogView diagnostics

            ?

            #ifdef _DEBUG

            void CNotifyDialogView::AssertValid() const

            {

            ?????? CScrollView::AssertValid();

            }

            ?

            void CNotifyDialogView::Dump(CDumpContext& dc) const

            {

            ?????? CScrollView::Dump(dc);

            }

            ?

            CNotifyDialogDoc* CNotifyDialogView::GetDocument() // non-debug version is inline

            {

            ?????? ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CNotifyDialogDoc)));

            ?????? return (CNotifyDialogDoc*)m_pDocument;

            }

            #endif //_DEBUG

            ?

            /////////////////////////////////////////////////////////////////////////////

            // CNotifyDialogView message handlers

            ?

            void CNotifyDialogView::OnTimer(UINT nIDEvent)

            {

            ?????? // TODO: Add your message handler code here and/or call default

            ?????? if(m_pCountDlg)

            ?????? {

            ????????????? m_pCountDlg->m_dwCount++;

            ????????????? m_pCountDlg->ShowValue();

            ?????? }

            ?

            ?????? CScrollView::OnTimer(nIDEvent);

            }

            ?

            void CNotifyDialogView::OnCountDialog()

            {

            ?????? // TODO: Add your command handler code here

            ?????? CCountDlg countDlg(this);

            ?????? countDlg.DoModal();

            }

            ?

            int CNotifyDialogView::OnCreate(LPCREATESTRUCT lpCreateStruct)

            {

            ?????? if (CScrollView::OnCreate(lpCreateStruct) == -1)

            ????????????? return -1;

            ??????

            ?????? // TODO: Add your specialized creation code here

            ?????? SetTimer(1,100,NULL);

            ?

            ?????? return 0;

            }

            ?

            void CNotifyDialogView::OnDestroy()

            {

            ?????? CScrollView::OnDestroy();

            ??????

            ?????? // TODO: Add your message handler code here

            ?????? KillTimer(1);

            }

            ?

            #if !defined(AFX_COUNTDLG_H__C5A72F95_781F_47DC_95D1_A0E9A8473756__INCLUDED_)

            #define AFX_COUNTDLG_H__C5A72F95_781F_47DC_95D1_A0E9A8473756__INCLUDED_

            ?

            #if _MSC_VER > 1000

            #pragma once

            #endif // _MSC_VER > 1000

            // CountDlg.h : header file

            //

            #include "stdafx.h"

            ?

            /////////////////////////////////////////////////////////////////////////////

            // CCountDlg dialog

            ?

            class CCountDlg : public CDialog

            {

            // Construction

            public:

            ?????? CCountDlg(CWnd* pParent = NULL);?? // standard constructor

            ?

            // Dialog Data

            ?????? //{{AFX_DATA(CCountDlg)

            ?????? enum { IDD = IDD_DIALOG_COUNT };

            ?????? DWORDm_dwCount;

            ?????? //}}AFX_DATA

            ?

            public:

            ?????? CView *m_pView;

            ?

            // Overrides

            ?????? // ClassWizard generated virtual function overrides

            ?????? //{{AFX_VIRTUAL(CCountDlg)

            ?????? protected:

            ?????? virtual void DoDataExchange(CDataExchange* pDX);??? // DDX/DDV support

            ?????? //}}AFX_VIRTUAL

            public:????

            ?????? void ShowValue();

            ??????

            ?

            // Implementation

            protected:

            ?????? void ReleaseViewPointer();

            ?????? // Generated message map functions

            ?????? //{{AFX_MSG(CCountDlg)

            ?????? afx_msg void OnDestroy();

            ?????? //}}AFX_MSG

            ?????? DECLARE_MESSAGE_MAP()

            };

            ?

            //{{AFX_INSERT_LOCATION}}

            // Microsoft Visual C++ will insert additional declarations immediately before the previous line.

            ?

            #endif // !defined(AFX_COUNTDLG_H__C5A72F95_781F_47DC_95D1_A0E9A8473756__INCLUDED_)

            ?

            // CountDlg.cpp : implementation file

            //

            ?

            #include "stdafx.h"

            #include "NotifyDialog.h"

            #include "CountDlg.h"

            ?

            #include "MainFrm.h"

            #include "ChildFrm.h"

            #include "NotifyDialogDoc.h"

            #include "NotifyDialogView.h"

            #ifdef _DEBUG

            #define new DEBUG_NEW

            #undef THIS_FILE

            static char THIS_FILE[] = __FILE__;

            #endif

            ?

            /////////////////////////////////////////////////////////////////////////////

            // CCountDlg dialog

            ?

            ?

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

            ?????? : CDialog(CCountDlg::IDD, pParent)

            {

            ?????? //{{AFX_DATA_INIT(CCountDlg)

            ?????? m_dwCount = 0;

            ?????? //}}AFX_DATA_INIT

            ?????? m_pView = (CNotifyDialogView*)pParent;

            ?????? ((CNotifyDialogView*)m_pView)->m_pCountDlg = this;

            }

            ?

            ?

            void CCountDlg::DoDataExchange(CDataExchange* pDX)

            {

            ?????? CDialog::DoDataExchange(pDX);

            ?????? //{{AFX_DATA_MAP(CCountDlg)

            ?????? DDX_Text(pDX, IDC_EDIT_COUNT, m_dwCount);

            ?????? //}}AFX_DATA_MAP

            }

            ?

            ?

            BEGIN_MESSAGE_MAP(CCountDlg, CDialog)

            ?????? //{{AFX_MSG_MAP(CCountDlg)

            ?????? ON_WM_DESTROY()

            ?????? //}}AFX_MSG_MAP

            END_MESSAGE_MAP()

            ?

            /////////////////////////////////////////////////////////////////////////////

            // CCountDlg message handlers

            ?

            void CCountDlg::ShowValue()

            {

            ?????? UpdateData(FALSE);

            }

            ?

            void CCountDlg::ReleaseViewPointer()

            {

            ?????? ((CNotifyDialogView*)m_pView)->m_pCountDlg = NULL;

            }

            void CCountDlg::OnDestroy()

            {

            ?????? CDialog::OnDestroy();

            ??????

            ?????? // TODO: Add your message handler code here

            ?????? ReleaseViewPointer();

            }

            posted on 2006-04-28 21:47 史傳紅 閱讀(3843) 評論(2)  編輯 收藏 引用 所屬分類: C/C++細節知識

            Feedback

            # re: VC中視圖(View)通知對話框(Dialog)的方法 2006-04-28 23:11 flyingxu
            其實可以用簡潔的語言代替所有的代碼
            而且,如果真的想在一個對話框中顯示實時的值,現在的程序結構上不好。  回復  更多評論
              

            # re: VC中視圖(View)通知對話框(Dialog)的方法 2006-04-29 20:15 史傳紅
            @flyingxu

            由于我以前遇到這個問題沒有解決,現在看了深入淺出MFC這本書,總結出來的,你能給出一個好的結構嗎?我的意思是說把文檔的數據在一個對話框中實時表現出來,謝謝。
              回復  更多評論
              

            久久精品aⅴ无码中文字字幕重口 久久精品a亚洲国产v高清不卡 | 久久只有这精品99| 欧美亚洲国产精品久久| 久久丫精品国产亚洲av| 精品国产VA久久久久久久冰| 久久亚洲国产午夜精品理论片| 久久久久久久综合综合狠狠| 区久久AAA片69亚洲| 色综合久久精品中文字幕首页 | 久久久WWW免费人成精品| 久久综合视频网| 久久美女人爽女人爽| 精品国产乱码久久久久久呢| 欧美精品一本久久男人的天堂| 日本WV一本一道久久香蕉| 青青草原综合久久| 久久亚洲AV成人无码电影| 久久亚洲中文字幕精品一区四| 国产精品久久久久9999高清| 久久婷婷人人澡人人爽人人爱| 久久久久国产精品麻豆AR影院| 日韩精品久久无码中文字幕| 青青草原综合久久大伊人| 99久久免费国产精品| 久久久久四虎国产精品| 久久久久亚洲精品天堂| 亚洲精品乱码久久久久久按摩| 伊人久久大香线蕉综合热线| 亚洲成av人片不卡无码久久| 久久精品无码一区二区日韩AV| 99久久夜色精品国产网站| 99久久国产综合精品麻豆| 日本欧美久久久久免费播放网| 亚洲精品无码成人片久久| 久久成人小视频| 99精品国产99久久久久久97| 久久久久国产精品人妻| 亚洲色欲久久久综合网| 亚洲av日韩精品久久久久久a | 香港aa三级久久三级老师2021国产三级精品三级在 | 久久91精品国产91|