WEB开发网
开发学院软件开发VC MFC程序员WTL指南(4)工具条与状态条 阅读

MFC程序员WTL指南(4)工具条与状态条

 2008-01-18 20:24:16 来源:WEB开发网   
核心提示:这是新添加的代码的开始部分,CFrameWindowImpl::CreateSimpleToolBar()函数使用资源IDR_MAINFRAME创建工具条并将其句柄赋值给m_hWndToolBar,MFC程序员WTL指南(4)工具条与状态条(2),下面是CreateSimpleToolBar()函数的代码:BOOL C

这是新添加的代码的开始部分,CFrameWindowImpl::CreateSimpleToolBar()函数使用资源IDR_MAINFRAME创建工具条并将其句柄赋值给m_hWndToolBar,下面是CreateSimpleToolBar()函数的代码:

BOOL CFrameWindowImpl::CreateSimpleToolBar(
   UINT nResourceID = 0,
   DWORD dwStyle = ATL_SIMPLE_TOOLBAR_STYLE,
   UINT nID = ATL_IDW_TOOLBAR)
{
   ATLASSERT(!::IsWindow(m_hWndToolBar));
   if(nResourceID == 0)
     nResourceID = T::GetWndClassInfo().m_uCommonResourceID;
   m_hWndToolBar = T::CreateSimpleToolBarCtrl(m_hWnd, nResourceID, TRUE,
                        dwStyle, nID);
   return (m_hWndToolBar != NULL);
}

参数:

nResourceID 工具条资源得ID。如果使用默认值0作为参数,程序将使用DECLARE_FRAME_WND_CLASS宏指定得资源,这里使用的IDR_MAINFRAME是向导生成的代码。 dwStyle 工具条的类型或样式。默认值ATL_SIMPLE_TOOLBAR_STYLE被定义为TBSTYLE_TOOLTIPS,子窗口和可见三种风格的结合,这使得鼠标移到按钮上时工具条会弹出工具提示。 nID 工具条的窗口ID,通常都会使用默认值。

CreateSimpleToolBar()首先检查是否已经创建了一个工具条,然后调用CreateSimpleToolBarCtrl()函数创建工具条控制,CreateSimpleToolBarCtrl()返回的工具条控制句柄保存在m_hWndToolBar中。CreateSimpleToolBarCtrl()负责读出资源并创建相应的工具条按钮,然后返回工具条窗口的句柄。这部分的代码相当长,我不在这里做具体介绍,如果你对此感兴趣得话何以在atlframe.h中找到这些代码。

OnCreate()函数接下来会调用CFrameWindowImpl::CreateSimpleStatusBar()函数,此函数创建状态条并将句柄存在m_hWndStatusBar,下面是该函数的代码:

BOOL CFrameWindowImpl::CreateSimpleStatusBar(
   UINT nTextID = ATL_IDS_IDLEMESSAGE,
   DWORD dwStyle = ... SBARS_SIZEGRIP,
   UINT nID = ATL_IDW_STATUS_BAR)
{
   TCHAR szText[128];  // max text lentgth is 127 for status bars
   szText[0] = 0;
   ::LoadString(_Module.GetResourceInstance(), nTextID, szText, 128);
   return CreateSimpleStatusBar(szText, dwStyle, nID);
}

显示在状态条的文字是从字符串资源中装载的,这个函数的参数是:

nTextID 用于在状态条上显示的字符串的资源ID,向导生成的ATL_IDS_IDLEMESSAGE对应的字符串是“Ready”。 dwStyle 状态条的样式。默认值包含了SBARS_SIZEGRIP风格,这使得状态条的右下角会显示一个改变窗口大小的标志。 nID 状态条的窗口ID,通常都会使用默认值。

CreateSimpleStatusBar()调用另外一个重载函数创建状态条:

BOOL CFrameWindowImpl::CreateSimpleStatusBar(
   LPCTSTR lpstrText,
   DWORD dwStyle = ... SBARS_SIZEGRIP,
   UINT nID = ATL_IDW_STATUS_BAR)
{
   ATLASSERT(!::IsWindow(m_hWndStatusBar));
   m_hWndStatusBar = ::CreateStatusWindow(dwStyle, lpstrText, m_hWnd, nID);
   return (m_hWndStatusBar != NULL);
}

这个重载的版本首先检查是否已经创建了状态条,然后调用CreateStatusWindow()创建状态条,状态条的句柄存放在m_hWndStatusBar中。

显示和隐藏工具条和状态条

CMainFrame类也有一个视图菜单,它有两个命令:显示/隐藏工具条和状态条,它们的ID是ID_VIEW_TOOLBAR和ID_VIEW_STATUS_BAR。CMainFrame类有这两个命令的响应函数,分别显示和隐藏相应的控制条,下面是OnViewToolBar()函数的代码:

LRESULT CMainFrame::OnViewToolBar(WORD /*wNotifyCode*/, WORD /*wID*/,
                  HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
   BOOL bVisible = !::IsWindowVisible(m_hWndToolBar);
   ::ShowWindow(m_hWndToolBar, bVisible ? SW_SHOWNOACTIVATE : SW_HIDE);
   UISetCheck(ID_VIEW_TOOLBAR, bVisible);
   UpdateLayout();
   return 0;
}

这些代码翻转控制条的显示状态,相应的翻转View|Toolbar菜单上的检查标记,然后调用UpdateLayout()重新定位控制条并改变视图窗口的大小。

上一页  1 2 3 4 5  下一页

Tags:MFC 程序员 WTL

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