我的CDialogBar为什么不能用鼠标拖动来改变大小?

yuanchao111 2005-04-28 02:58:15
CPMExploreBar是从CDialogBar集成过来的一个类,如图,我按照msdn上的“HOWTO: Make a Resizable Dialog Bar”那篇文章重载了它的CalcDynamicLayout虚函数,但是鼠标在拖动时仍然不能改变大小,哪位高手能够解决?请不要给我贴msdn上的文章,因为我都看过了

class CPMExploreBar:public CDialogBar{
DECLARE_DYNAMIC(CDialogBar)

public:
CPMExploreBar();
virtual ~CPMExploreBar();
afx_msg void OnSize(UINT nType, int cx, int cy);
BOOL Create(CWnd* pParentWnd, UINT nIDTemplate, UINT nStyle, UINT nID);
virtual CSize CalcDynamicLayout( int nLength, DWORD dwMode );

CSize m_sizeDocked;
CSize m_sizeFloating;
BOOL m_bChangeDockedSize;

protected:
DECLARE_MESSAGE_MAP()
}

class CMainFrame{

private:
CPMExploreBar m_wndExploreBar;

}

CMainFrame::OnCreate(...)
{
...
m_wndEditBar.Create(this, IDD_EDIT_BAR,WS_CHILD|WS_VISIBLE| CBRS_LEFT | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC,IDD_EDIT_BAR);
...
}
...全文
251 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuanchao111 2005-05-17
  • 打赏
  • 举报
回复
我的DialogBar不需要浮动,所以我只是想让DialogBar在停靠状态下可以改变大小。但是要想让CDialogBar在停靠状态下改变大小,好像比较麻烦。所以我在codeguru上找到了一个继承于CControlBar的类,改变起大小来很方便。
Maxwell 2005-05-17
  • 打赏
  • 举报
回复
果然。。。

我记得有个CalcFixedLayout跟CalcDynamicLayout是类似的,这个是用来在停靠状态下改变大小的。
Maxwell 2005-05-14
  • 打赏
  • 举报
回复
有个问题,MSDN给出的代码是工具条处于浮动状态的时候可以改变大小,你说的不能改变大小是浮动状态下吗?那个代码我试过,没有问题的。
yuanchao111 2005-05-13
  • 打赏
  • 举报
回复
to Maxwell(不可知), 谢谢你。可能是我没有表述清楚的原因吧
Maxwell 2005-05-12
  • 打赏
  • 举报
回复
class CMainFrame{

private:
CPMExploreBar m_wndExploreBar;

}

CMainFrame::OnCreate(...)
{
...
m_wndEditBar.Create(this, IDD_EDIT_BAR,WS_CHILD|WS_VISIBLE| CBRS_LEFT | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC,IDD_EDIT_BAR);
...
}

我已经费了很大的耐心来帮你解决问题了,你说的话应该自己听听,你自己看看你贴的代码,看看我给你指出的地方。
yuanchao111 2005-05-11
  • 打赏
  • 举报
回复
其实这个问题我已经用别的方法解决了,是在codeguru上查到的一个继承于CControlBar的类,用CDialogBar的继承类很难解决这个问题.

to fanqing(火影忍者+28%(准备学习进程/线程)),我曾经把对话框属性设置为Resizing,但是这样的resize会有n多问题,因为你resize的不是CDialogBar,而是放在它之中的一个dialog.处理起来更麻烦

to Maxwell(不可知),其实我贴的代码已经够清楚了. 人,时候需要些耐心啊
Maxwell 2005-05-10
  • 打赏
  • 举报
回复
m_wndEditBar.Create(this, IDD_EDIT_BAR,WS_CHILD|WS_VISIBLE| CBRS_LEFT | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC,IDD_EDIT_BAR);
晕,楼主这是什么意思?
CSize CPMExploreBar::CalcDynamicLayout(int nLength, DWORD dwMode)
这不是一个类啊,你是不是写错地方了?那肯定不能用的啊。
Maxwell 2005-05-10
  • 打赏
  • 举报
回复
你这不是复制的MSDN里面的例子吗?文章里面其他的地方你都设置到了吗,仔细检查一下,例子是没有问题的。
fanqing 2005-05-10
  • 打赏
  • 举报
回复
属性对话框中设置一下就可以了
yuanchao111 2005-05-09
  • 打赏
  • 举报
回复
如果你的问题没有人回答?请问版主,分应该怎样给?csdn是不是应该考虑一下这种情况了
yuanchao111 2005-04-29
  • 打赏
  • 举报
回复
这个问题好像很烦人啊,没有人碰到过吗?
我原来是把加进CDialogBar的那个对话框模板的Border属性改为Resizing的,这样的话可以拖动,但是会出问题。而且问题莫名其妙的。
哪位碰到过同样的问题,帮帮我
yuanchao111 2005-04-28
  • 打赏
  • 举报
回复
是这样写的。

CSize CPMExploreBar::CalcDynamicLayout(int nLength, DWORD dwMode)
{
// Return default if it is being docked or floated
if ((dwMode & LM_VERTDOCK) || (dwMode & LM_HORZDOCK))
{
if (dwMode & LM_STRETCH) // if not docked stretch to fit
return CSize((dwMode & LM_HORZ) ? 32767 : m_sizeDocked.cx,
(dwMode & LM_HORZ) ? m_sizeDocked.cy : 32767);
else
return m_sizeDocked;
}
if (dwMode & LM_MRUWIDTH)
return m_sizeFloating;
// In all other cases, accept the dynamic length
if (dwMode & LM_LENGTHY)
return CSize(m_sizeFloating.cx, (m_bChangeDockedSize) ?
m_sizeFloating.cy = m_sizeDocked.cy = nLength :
m_sizeFloating.cy = nLength);
else
return CSize((m_bChangeDockedSize) ?
m_sizeFloating.cx = m_sizeDocked.cx = nLength :
m_sizeFloating.cx = nLength, m_sizeFloating.cy);
}
Maxwell 2005-04-28
  • 打赏
  • 举报
回复
你写的虚函数里面代码是怎么写的?
yuanchao111 2005-04-28
  • 打赏
  • 举报
回复
不好意思,是“继承”,不是“集成”

15,978

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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