各位高手,小弟诚恳请教

forever_chang 2001-04-08 03:17:00
我是一名应届毕业生,以前从未用过vc,现在作毕业设计遇到了困难。
我的题目中要求作一个对话条(从CDialogBar继承),要求可停靠,可浮动。
停靠与浮动时都可以改变大小。
现在遇到的问题主要有以下几个:
1.怎样用类向导来从CDialogBar类继承一个新类以便增加功能,所给的基类中无CDialogBar类(我选择了从CWnd类继承,名字暂设为CBar),不知对不对。
2.在资源中画好一个对话框,要把它怎样与CBar联系到一起呢?(从CWnd类继承后,CBar的create()与CDialogBar类的create()参数不一样)。
3.若是可改变大小,应该用什么函数呢 CalcDynamicLayout( int nLength, DWORD dwMode )
CalcFixedLayout(BOOL bStretch, BOOL bHorz)只是返回当前对话条csize类型值,经过计算后怎怎样将值返回呢,CControlBar并没有这样的成员变量来表示它的大小呀。


小弟学vc月余,深感其艰难,哪位高手若给出代码,小弟更感激不禁。
对小弟有帮助的必将高分送上
...全文
161 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
In355Hz 2001-04-14
  • 打赏
  • 举报
回复
1、从CWnd继承再把基类改成CDialogBar,注意吧IMPLEMENT_DYNAMIC(CBar, CDialogBar)也改过来。
2、别用向导添加的Create函数,参考CDialogBar的Create函数自己写申明。其他虚函数也一样。可以适当看看CDialogBar的源代码。(就在VC98\MFC\SRC下)
在Create中用对话框资源;设资源是IDD_DIALOGBAR
m_wndBar.Create(this,IDD_DIALOGBAR, CBRS_TOP | CBRS_TOOLTIPS | CBRS_GRIPPER ,IDD_DIALOGBAR)) //由于方便,直接把控件的ID也设为IDD_DIALOGBAR了
3、重载CalcDynamicLayout( int nLength, DWORD dwMode ), CalcFixedLayout(BOOL bStretch, BOOL bHorz)这两个虚函数。返回值是一个CSize对象,框架类将用这个Size设置DialogBar的大小。基类CDialogBar的这两个函数只是返回对话框的固定大小。你要自己改变Bar的大小,只要改变返回Size的值就可以了,比如这样:
CSize CCJControlBar::CalcFixedLayout(BOOL bStretch, BOOL bHorz)
{
CRect rc;

m_pDockSite->GetControlBar(AFX_IDW_DOCKBAR_TOP)->GetWindowRect(rc); //m_pDockSite是保留的指向父框架窗口的指针
int nHorzDockBarWidth = bStretch ? 32767 : rc.Width() + 4;
m_pDockSite->GetControlBar(AFX_IDW_DOCKBAR_LEFT)->GetWindowRect(rc);
int nVertDockBarHeight = bStretch ? 32767 : rc.Height() + 4;

if (bHorz)
return CSize(nHorzDockBarWidth, m_sizeHorz.cy);
else
return CSize(m_sizeVert.cx, nVertDockBarHeight);
}

CSize CCJControlBar::CalcDynamicLayout(int nLength, DWORD dwMode)
{
if (dwMode & (LM_HORZDOCK | LM_VERTDOCK))
{
if (nLength == -1)
m_pDockSite->DelayRecalcLayout();
return CControlBar::CalcDynamicLayout(nLength,dwMode);
}

if (dwMode & LM_MRUWIDTH)
return m_sizeFloat; //m_sizeFloat是保存的浮动(非Dock)时的窗口大小

if (dwMode & LM_COMMIT)
{
m_sizeFloat.cx = nLength;
return m_sizeFloat;
}

if (dwMode & LM_LENGTHY)
return CSize(m_sizeFloat.cx,
m_sizeFloat.cy = max(m_sizeMin.cy, nLength));
else
return CSize(max(m_sizeMin.cx, nLength), m_sizeFloat.cy);
}
这是CCJLib中的一个例子里的。
forever_chang 2001-04-14
  • 打赏
  • 举报
回复
种大蒜???
如果大蒜是个对象..??大蒜的重量是属性
给大蒜加大粪是事件,可以让大蒜好好生长...????
哈哈哈啊哈
学VC学傻了.
to ashzs:
不如你教我种大蒜吧????
panda_w 2001-04-09
  • 打赏
  • 举报
回复
这里有的
http://www.vckbase.com/english/code/toolbar/DialogbarEx.shtml.htm
ashzs 2001-04-09
  • 打赏
  • 举报
回复
你太懒了joke100说的对,自己看一看吗!!别总是问这样的傻问题!!!

你这样得就别学vc了,改种大蒜吧!!!!!

joke100 2001-04-08
  • 打赏
  • 举报
回复
建议从CDialogBar派生
其实你不必使用类向导即可生成嘛.
把PUBLIC后的类名改成CDialogBar,然后对CPP文件相应的部分做这样的改动即可.

从CDialogBar派生你的工具条,就不必使用对话框资源了,而且浮动及改变大小都是本身所支持的属性.
你可以看一看MSDN中相关的例子,在SAMPLE目录中查找就能找到...

16,551

社区成员

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

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

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