WEB开发网
开发学院软件开发VC MFC程序员的WTL指南(3)WTL 界面基类 阅读

MFC程序员的WTL指南(3)WTL 界面基类

 2006-07-22 22:03:45 来源:WEB开发网   
核心提示: CMainFrame::OnCreate()中创建了视图窗口并保存这个窗口的句柄,当主窗口改变大小时视图窗口的大小也会随之改变,MFC程序员的WTL指南(3)WTL 界面基类(9),OnCreate()函数还将CMainFrame对象添加到由CAppModule维持的消息过滤器队列和空闲处

CMainFrame::OnCreate()中创建了视图窗口并保存这个窗口的句柄,当主窗口改变大小时视图窗口的大小也会随之改变。OnCreate()函数还将CMainFrame对象添加到由CAppModule维持的消息过滤器队列和空闲处理队列,我将在稍后介绍这些。

LRESULT CMainFrame::OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/,
               LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
  m_hWndClient = m_view.Create(m_hWnd, rcDefault, NULL, |
                 WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |
                  WS_CLIPCHILDREN, WS_EX_CLIENTEDGE);
  // register object for message filtering and idle updates
  CMessageLoop* pLoop = _Module.GetMessageLoop();
  pLoop->AddMessageFilter(this);
  pLoop->AddIdleHandler(this);
  return 0;
}

m_hWndClient是CFrameWindowImpl对象的一个成员变量,当主窗口大小改变时此窗口的大小也将改变。

在生成的CMainFrame中还添加了对File|New, File|Exit, 和 Help|About菜单消息的处理。我们的时钟程序不需要这些默认的菜单项,但是现在将它们留在代码中也没有害处。现在可以编译并运行向导生成的代码,不过这个程序确实没有什么用处。如果你感兴趣的话可以深入CMainFrame::CreateEx()函数的内部看看主窗口和它的资源是如何被加载和创建得。

我们的下一步WTL之旅是CMessageLoop,它掌管消息泵和空闲处理。

CMessageLoop 的内部实现

CMessageLoop为我们的应用程序提供一个消息泵,除了一个标准的DispatchMessage/TranslateMessage循环外,它还通过调用PreTranslateMessage()函数实现了消息过滤机制,通过调用OnIdle()实现了空闲处理功能。下面是Run()函数的伪代码:

上一页  4 5 6 7 8 9 10  下一页

Tags:MFC 程序员 WTL

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