WEB开发网
开发学院软件开发VC 更新MFC中的视图,跟踪.NET Framework中的事件 阅读

更新MFC中的视图,跟踪.NET Framework中的事件

 2006-07-19 11:28:40 来源:WEB开发网   
核心提示: Figure 2 运行中的UpdViewCMyDoc::CollectMoreData 增加了一个简单计数器的值,在一个实时程序中,更新MFC中的视图,跟踪.NET Framework中的事件(3),CMyDoc::CollectMoreData 将获得最新的数据,如下载最近的火星图片,然

Figure 2 运行中的UpdView

CMyDoc::CollectMoreData 增加了一个简单计数器的值。在一个实时程序中,CMyDoc::CollectMoreData 将获得最新的数据,如下载最近的火星图片,或者读取 Bill Gates 浴缸的温度。重要的采集数据后,CMyDoc 通知它的视图自动更新: void CMyDoc::CollectMoreData()
{
 iData++; // time waits for no man...
 UpdateAllViews(NULL, 0, NULL);
}   
  现在,MFC 调用每个视图的 OnUpdate 方法,再调用 Invalidate/UpdateWindow 刷新视图。既然UpdView 是如此的简单,就没有必要提示了。在一个实际的程序中,你 可能需要传递提示信息来帮助视图更有效地重绘它的窗口。

我在 Microsoft® .NET Framework 中用 C# 写了一个程序。我知道事件是如何工作的,但有时很难知道什么时候发生的是哪个事件。当我使用 C++ 编程时,我总是可以运行 Spy++ 来查看窗口消息是何时发送的。即使没有Spy++,我也可以写一个窗口过程将消息显示到 TRACE 输出。例如: LRESULT MyWndProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
{
  TRACE(_T("Message: %04x, wp=%04x, lp=%04x\n"), msg, wp, lp);
  ...
}

我试图象这样来跟踪 C# 中的事件,但是我无法实现,因为没有中枢事件处理例程。是否有其它方法来观察这些事件,或者 有没有在 .NET 中使用的第三方的 Spy 工具?

Francine Wiggins

我没有注意到 .NET Framework 中有事件跟踪工具,但是写一些代码来跟踪事件并不难。注意我说的是并不太难,因为它 比处理消息的 WndProc 例子难那么一点点。

为了使大家都能明白,我先强调一下 Windows 消息和 Framework 事件的区别。在 Windows® 中, 当某件事情发生的时候,操作系统与程序的通讯是通过将消息发送到窗口过程(WndProc)来实现 的,因为所有的消息都要通过单一的回调过程,即窗口过程。所以很容易跟踪消息。无论使用 C/C++ 编程还是.NET Framework 都是如此。在.NET中,你可以通过 改写 Control.WndProc 来实现对消息的跟踪,与C的例子一样。但是,虽然窗口消息从概念上将是一种事件(许多程序员都把它们称为事件),并且 虽然许多 Framework 事件都对应于窗口消息(例如,OnClick 和 WM_COMMAND/BN_CLICKED 一样),但 Framework 使用完全不同的机制, 一种基于委托(delegates)机制而不是全局回调过程。然而每个消息通过相同的 WndProc,每个 FrameWork 有其自己的委托。 那么在没有中枢处理器的情况下,如何跟踪事件?甚至是如何知道处理的是哪个事件呢?

上一页  1 2 3 4 5 6 7  下一页

Tags:更新 MFC 视图

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接