• <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>

            分享知識(shí)

            與大家一起分享知識(shí)

            C++博客 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
              19 Posts :: 3 Stories :: 45 Comments :: 0 Trackbacks

            在利用 VC MFC 編程的時(shí)候,我們往往能碰到這種情況:在一個(gè)模擬程序中(如有些游戲),需要實(shí)時(shí)顯示一些屬性的值(文字或者圖形),這個(gè)時(shí)候我們可以重新打開(kāi)一個(gè)對(duì)話框(可以是一個(gè)模態(tài)或者非模態(tài)的)來(lái)顯示這些信息,本文以模態(tài)對(duì)話框?yàn)槔?jiǎn)單實(shí)現(xiàn)這個(gè)技術(shù)。以下代碼陰影部分是我利用 ClassWizard 加的,藍(lán)色部分是我手工加的。其余是用 MFC 向?qū)傻模?br />源代碼下載地址: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 史傳紅 閱讀(3842) 評(píng)論(2)  編輯 收藏 引用 所屬分類: C/C++細(xì)節(jié)知識(shí)

            Feedback

            # re: VC中視圖(View)通知對(duì)話框(Dialog)的方法 2006-04-28 23:11 flyingxu
            其實(shí)可以用簡(jiǎn)潔的語(yǔ)言代替所有的代碼
            而且,如果真的想在一個(gè)對(duì)話框中顯示實(shí)時(shí)的值,現(xiàn)在的程序結(jié)構(gòu)上不好。  回復(fù)  更多評(píng)論
              

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

            由于我以前遇到這個(gè)問(wèn)題沒(méi)有解決,現(xiàn)在看了深入淺出MFC這本書(shū),總結(jié)出來(lái)的,你能給出一個(gè)好的結(jié)構(gòu)嗎?我的意思是說(shuō)把文檔的數(shù)據(jù)在一個(gè)對(duì)話框中實(shí)時(shí)表現(xiàn)出來(lái),謝謝。
              回復(fù)  更多評(píng)論
              

            久久婷婷午色综合夜啪| 久久综合亚洲欧美成人| 久久久久久午夜成人影院| 一级做a爰片久久毛片毛片| 国产成人无码精品久久久久免费| 久久精品国产亚洲AV大全| 亚洲中文精品久久久久久不卡| 久久久精品国产| 亚洲国产精品无码久久九九| 老司机午夜网站国内精品久久久久久久久 | 久久精品国产亚洲Aⅴ蜜臀色欲| 久久狠狠爱亚洲综合影院| 中文成人久久久久影院免费观看| 久久播电影网| 久久露脸国产精品| 亚洲人成无码久久电影网站| 污污内射久久一区二区欧美日韩 | 狠狠色丁香久久婷婷综合_中| 女人高潮久久久叫人喷水| 久久精品国产2020| 久久精品国产清高在天天线| 精品国产91久久久久久久| 办公室久久精品| 无码精品久久一区二区三区| 97精品伊人久久久大香线蕉| 人妻无码αv中文字幕久久琪琪布 人妻无码久久一区二区三区免费 人妻无码中文久久久久专区 | 色综合久久中文字幕无码| 日韩人妻无码一区二区三区久久 | 91精品无码久久久久久五月天 | 久久久久国产一区二区| 国产精品久久婷婷六月丁香| 日本强好片久久久久久AAA| 久久婷婷国产麻豆91天堂| 久久亚洲精品无码播放| 欧美黑人激情性久久| 国产精品久久久久影视不卡| 热RE99久久精品国产66热| 久久精品国产99久久无毒不卡| 国产99久久久久久免费看| 国产美女亚洲精品久久久综合| 91精品免费久久久久久久久|