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

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

 2006-07-22 22:03:45 来源:WEB开发网   
核心提示: 接下来定义框架窗口,我们的SDI窗口是从CFrameWindowImpl派生的,MFC程序员的WTL指南(3)WTL 界面基类(2),在定义窗口类时使用DECLARE_FRAME_WND_CLASS代替前面使用的DECLARE_WND_CLASS,下面时MyWindow.h中窗口定义的开始

接下来定义框架窗口。我们的SDI窗口是从CFrameWindowImpl派生的,在定义窗口类时使用DECLARE_FRAME_WND_CLASS代替前面使用的DECLARE_WND_CLASS。下面时MyWindow.h中窗口定义的开始部分:

class CMyWindow : public CFrameWindowImpl<CMyWindow>
{
public:
  DECLARE_FRAME_WND_CLASS(_T("First WTL window"), IDR_MAINFRAME);
  BEGIN_MSG_MAP(CMyWindow)
    CHAIN_MSG_MAP(CFrameWindowImpl<CMyWindow>)
  END_MSG_MAP()
};

DECLARE_FRAME_WND_CLASS有两个参数,窗口类名(类名可以是NULL,ATL会替你生成一个类名)和资源ID,创建窗口时WTL用这个ID装载图标,菜单和加速键表。我们还要象CFrameWindowImpl中的消息处理(例如WM_SIZE和WM_DESTROY消息)那样将消息链入窗口的消息中。

现在来看看WinMain()函数,它和第一部分中的例子代码中的WinMain()函数几乎一样,只是创建窗口部分的代码略微不同。

// main.cpp:
#include "stdafx.h"
#include "MyWindow.h"
CAppModule _Module;
int APIENTRY WinMain ( HINSTANCE hInstance, HINSTANCE hPrevInstance,
            LPSTR lpCmdLine, int nCmdShow )
{
  _Module.Init ( NULL, hInstance );
CMyWindow wndMain;
MSG msg;
  // Create the main window
  if ( NULL == wndMain.CreateEx() )
    return 1;    // Window creation failed
  // Show the window
  wndMain.ShowWindow ( nCmdShow );
  wndMain.UpdateWindow();
  // Standard Win32 message loop
  while ( GetMessage ( &msg, NULL, 0, 0 ) > 0 )
    {
    TranslateMessage ( &msg );
    DispatchMessage ( &msg );
    }
  _Module.Term();
  return msg.wParam;
}

CFrameWindowImpl中的CreateEx()函数的参数使用了常用的默认值,所以我们不需要特别指定任何参数。正如前面介绍的,CFrameWindowImpl会处理资源的装载,你只需要使用IDR_MAINFRAME作为ID定义你的资源就行了(译者注:主要是图标,菜单和加速键表),你也可以直接使用本章的例子代码。

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

Tags:MFC 程序员 WTL

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