对话框可以添加工具栏吗?

zfbing7640 2003-10-09 06:38:18
对话框可以添加工具栏吗?
...全文
476 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
MicoInNet 2003-10-10
  • 打赏
  • 举报
回复
gz
yaoha2003 2003-10-09
  • 打赏
  • 举报
回复
呵,好像如果你想让你的工具条可以四处停靠的话,还需要重载CMiniFrameWnd类,让你的工具条停靠在这个类上
  • 打赏
  • 举报
回复
对不起,看错了,工具栏看成菜单了。

郑重向 楼主 和 看到我帖子的人 道歉。
woaini5994 2003-10-09
  • 打赏
  • 举报
回复
to crybird(寒号鸟) :兄弟倒是给我找一下,怎么在选项卡中加ToolBar?菜单谁都会,呵呵
我也没这么做过,不知道你是怎么实现的
tonybaobao 2003-10-09
  • 打赏
  • 举报
回复
to crybird(寒号鸟) :兄弟倒是给我找一下,怎么在选项卡中加ToolBar?菜单谁都会,呵呵
sky51fly 2003-10-09
  • 打赏
  • 举报
回复
应该OK了吧
captainliyun 2003-10-09
  • 打赏
  • 举报
回复
来晚了,这么多人都回答了!
AkiraChing 2003-10-09
  • 打赏
  • 举报
回复
这是微软的知识库示例,给对话框加工具栏
http://support.microsoft.com/default.aspx?scid=kb;EN-US;141751
alon21 2003-10-09
  • 打赏
  • 举报
回复
//在对话框中加入工具栏
1.先添加工具栏(IDR_TOOLBAR1)资源,并画好各个按钮

2.在对话框类声名中添加成员变量 CToolBar m_wndtoolbar;

3.在对话框类的OnInitDialog() 中添加如下代码

//添加一个平面工具条
if (!m_wndtoolbar.CreateEx( this,TBSTYLE_FLAT , WS_CHILD | WS_VISIBLE | CBRS_ALIGN_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS,
CRect(4,4,0,0)) || !m_wndtoolbar.LoadToolBar(IDR_TOOLBAR1) )
{
TRACE0("failed to create toolbar\n");
return FALSE;
}
m_wndtoolbar.ShowWindow(SW_SHOW);
RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);

技巧:
在菜单和工具栏之间显示一条分割线,方法如下:
加入一个Picture控件,在属性中将Style中的"下沉"选中

ToolTip的添加
1.在对话框类定义中手工添加消息映射函数的定义,如下:
//{{AFX_MSG(CDlgMenuToolbarDlg)
virtual BOOL OnInitDialog();
afx_msg void OnPaint();
afx_msg BOOL OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult); //此句位添加的
//}}AFX_MSG
DECLARE_MESSAGE_MAP()

2.在对话框的.cpp中添加函数的实现代码
BOOL CTestdlgDlg::OnToolTipText(UINT, NMHDR *pNMHDR, LRESULT *pResult)
{
ASSERT(pNMHDR->code == TTN_NEEDTEXTA || pNMHDR->code == TTN_NEEDTEXTW);

// UNICODE消息
TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR;
TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR;
//TCHAR szFullText[512];
CString strTipText;
UINT nID = pNMHDR->idFrom;

if (pNMHDR->code == TTN_NEEDTEXTA && (pTTTA->uFlags & TTF_IDISHWND) ||
pNMHDR->code == TTN_NEEDTEXTW && (pTTTW->uFlags & TTF_IDISHWND))
{
// idFrom为工具条的HWND
nID = ::GetDlgCtrlID((HWND)nID);
}

if (nID != 0) //不为分隔符
{
strTipText.LoadString(nID);
strTipText=strTipText.Mid(strTipText.Find("\n",0)+1);
#ifndef _UNICODE
if (pNMHDR->code == TTN_NEEDTEXTA)
{
lstrcpyn(pTTTA->szText, strTipText, sizeof(pTTTA->szText));
}
else
{
_mbstowcsz(pTTTW->szText, strTipText, sizeof(pTTTW->szText));
}
#else
if (pNMHDR->code == TTN_NEEDTEXTA)
{
_wcstombsz(pTTTA->szText, strTipText,sizeof(pTTTA->szText));
}
else
{
lstrcpyn(pTTTW->szText, strTipText, sizeof(pTTTW->szText));
}
#endif

*pResult = 0;

// 使工具条提示窗口在最上面
::SetWindowPos(pNMHDR->hwndFrom, HWND_TOP, 0, 0, 0, 0,SWP_NOACTIVATE|
SWP_NOSIZE|SWP_NOMOVE|SWP_NOOWNERZORDER);
return TRUE;
}
return TRUE;

}

3.在对话框的.cpp中添加消息映射

BEGIN_MESSAGE_MAP(CDlgMenuToolbarDlg, CDialog)
//{{AFX_MSG_MAP(CDlgMenuToolbarDlg)
ON_WM_PAINT()
ON_NOTIFY_EX( TTN_NEEDTEXT, 0, OnToolTipText ) //此句为添加
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

ALON
  • 打赏
  • 举报
回复
不用这么麻烦

对话框属性卡,第一卡就有菜单,

只要你在资源中建立个菜单,选中ID就可以了。和单文档菜单一样的方法。
flyelf 2003-10-09
  • 打赏
  • 举报
回复
from: http://www.codeguru.com/dialog/toolbars.shtml

BOOL CMyDlg::OnInitDialog()
{
// TODO: Add extra initialization here
CDialog::OnInitDialog();

// Add the ToolBar.
if (!m_wndToolBar.Create( this ) ||
!m_wndToolBar.LoadToolBar(IDR_CORPS_EMIS) )
{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
}

// TODO: Remove this if you don't want tool tips or a resizeable toolbar
m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() |
CBRS_TOOLTIPS | CBRS_FLYBY );

// We need to resize the dialog to make room for control bars.
// First, figure out how big the control bars are.
CRect rcClientStart;
CRect rcClientNow;
GetClientRect(rcClientStart);
RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST,
0, reposQuery, rcClientNow);

// Now move all the controls so they are in the same relative
// position within the remaining client area as they would be
// with no control bars.
CPoint ptOffset(rcClientNow.left - rcClientStart.left,
rcClientNow.top - rcClientStart.top);

CRect rcChild;
CWnd* pwndChild = GetWindow(GW_CHILD);
while (pwndChild)
{
pwndChild->GetWindowRect(rcChild);
ScreenToClient(rcChild);
rcChild.OffsetRect(ptOffset);
pwndChild->MoveWindow(rcChild, FALSE);
pwndChild = pwndChild->GetNextWindow();
}

// Adjust the dialog window dimensions
CRect rcWindow;
GetWindowRect(rcWindow);
rcWindow.right += rcClientStart.Width() - rcClientNow.Width();
rcWindow.bottom += rcClientStart.Height() - rcClientNow.Height();
MoveWindow(rcWindow, FALSE);

// And position the control bars
RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);

return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
dzqsuper 2003-10-09
  • 打赏
  • 举报
回复
快来人呀

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧