CDialogBar类使用方法

如果你想实现有工具条的浮动和定位功能,而且可以方便的摆放任何控件上去,那就使用CDialogBar就可以拥有和CDialog一样的方便和快 捷。
     添加一个CDialogBar派生类:在资源中添加一个对话框,再采用类向导来添加类,这里我们找不到CDialogBar作为基类,可以先用 CDialog作为基类产生一个,然后把所以的“CDialog”替换为“CDialogBar”。
 构造函数 CXXXDlg::CXXXDlg(CWnd* pParent /*=NULL*/)
   : CDialog(CXXXDlg::IDD, pParent)改成: CXXXDlg::CXXXDlg()就可以了,添加一个类似OnInitDialog的函数,在CDialogBar中是不存在 OnInitDialog的消息的,因为初始化是在创建后调用的,所以我们就重写virtual BOOL Create(CWnd* pParentWnd,UINT nIDTemplate,UINT nStyle,UINT nID)这个函数。注意哦用向导添加的Create函数的参数是不对的,改成上面。下面是实现代码:
BOOL CXXXDlg::Create(CWnd* pParentWnd,UINT nIDTemplate,UINT nStyle,UINT nID)
{
 BOOL bRes= CDialogBar::Create(pParentWnd,nIDTemplate,nStyle,nID );
 InitDialogBar();// 在类中添加一个成员函数就可以了
 return bRes;
}
BOOL CXXXDlg::InitDialogBar()
{
 UpdateData(FALSE);// 这个一定要啊,这样就会有和CDialog一样的数据交换效果了
 return TRUE;
}
 创建和使用:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)

 if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
  return -1;
 if (!m_wndColor.Create(this, IDD_COLOR,
  CBRS_BOTTOM | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_HIDE_INPLACE,
  ID_VIEW_COLOR))
 {
  TRACE0("Failed to create dialog bar m_wndContentMenu\n");
  return -1;  // fail to create
 }
 m_wndColor.EnableDocking(CBRS_ALIGN_BOTTOM );
 DockControlBar(&m_wndColor);// 没有这个,CDialogBar不可以移动,FloatControlBar的功能是浮动在窗口上。
 EnableDocking(CBRS_ALIGN_ANY);
 m_wndColor.SetWindowText(_T(" 颜色"));
 return 0;
}
IDD_COLOR是CDialogBar的对话框ID,ID_VIEW_COLOR是一个 菜单资源id,在
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
 //{{AFX_MSG_MAP(CMainFrame)
 ON_WM_CREATE()
 ON_COMMAND_EX(ID_VIEW_COLOR, OnBarCheck)
 ON_UPDATE_COMMAND_UI(ID_VIEW_COLOR, OnUpdateControlBarMenu) 
 //}}AFX_MSG_MAP
END_MESSAGE_MAP()
时,工 具条可以显示和隐藏。

想在CDialogBar上添加按钮消息还需要修改如下:
BOOL CMainFrame::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo)
{
 // TODO: Add your specialized code here and/or call the base class
 if (m_wndColor.OnCmdMsg(nID,nCode,pExtra,pHandlerInfo))
  return TRUE;
 return CFrameWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
}  
m_wndColor 为CDialogBar对象,这样,按钮的消息可以映射到自己的类中。

这里增加一条关于对话框上响应键盘按键消息,重载
BOOL CXXXDlg::PreTranslateMessage(MSG* pMsg)
{
 if( pMsg->message>=WM_KEYDOWN && pMsg->message<=WM_KEYUP)
 {
  this->SendMessage(pMsg->message,pMsg->wParam,pMsg->lParam);
  return TRUE;
 }
    else
        return CDialog::PreTranslateMessage(pMsg);
}
这样就可以在对话框上重载WM_KEYDOWN和 WM_KEYUP来编写代码了。

你可能感兴趣的:(职场,休闲,CDialogBar类使用方法)