我从codetools上下了一个sizingcontrolbar,在上面加了一个Wnd的派生类,生成一个实例作为sizingcontrolbar的子窗口,在子窗口上加了一个toolbar,问题就是toolbar上的按扭不能响应消息,(我在toolbar的交窗口里响应的),按扭是disable状态,后来以在CMainFrame中响应,虽然是enable状态,可是相应的函数以不能被调用,现在改成了BCGCB的sizingcontrolbar也不行,郁闷呀,大家帮帮偶我吧
调试欢乐多
caowenbin(wenbin): 你的意思和refelct差不多呀。
psusong(我心飞扬) : www.codetools.com 上中的toolbar & dock wnd一栏中找
// Create histroy pane
//---------------------
m_wndPane.Create(_T(""), WS_CHILD | WS_VISIBLE , CRect(0, 0, 200, 200),
0x2004, this); // 放在sizingcontrolbar上的子窗口
// create a image list for treectrl
HBITMAP bmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_HISTORY),
IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION | LR_LOADMAP3DCOLORS);
ASSERT(bmp);
ASSERT(m_ilTree.Create(16, 15, ILC_COLOR24 | ILC_MASK, 4, 4));
ASSERT_VALID(&m_ilTree);
CBitmap bm;
bm.Attach(bmp);
m_ilTree.Add(&bm, RGB(0XFF, 0, 0XFF));
//m_ilTree.Create(132, 16, 0, RGB(0XFF,0,0XFF));
//DeleteObject(bm.Detach()); DWORD dwStyle = WS_CHILD | WS_VISIBLE | WS_BORDER;// | TVS_HASLINES | TVS_LINESATROOT;
// 在子窗口上放置ctreectrl
if (!m_wndTree.Create(dwStyle, CRect(0, 0, 0, 0), &m_wndPane, 0x2001))
{
return -1;
}
m_wndTree.SetImageList(&m_ilTree, TVSIL_NORMAL); //--------------------------
// Create view mode toolbar
//--------------------------
// 在子窗口上放置toolbar
VERIFY(CreateToolbar());
//--------------
// Creaet tabwnd
//--------------
m_wndTabWnd.Create(CBCGTabWnd::STYLE_3D, CRect(0, 0, 200, 200), this, 0x2006);
m_wndTabWnd.AddTab(&m_wndPane, _T("Histroy"));
return 1;bool CHistoryBar::CreateToolbar()
{
DWORD dwStyle = TBSTYLE_TOOLTIPS | TBSTYLE_TRANSPARENT |
WS_VISIBLE | WS_CHILD | CBRS_SIZE_FIXED | CBRS_FLYBY; if (!m_wndToolbar.Create(&m_wndPane, dwStyle, 0x1990) ||
!m_wndToolbar.LoadToolBar(IDR_HISTORYBAR))
{
return false;
}
m_wndToolbar.SetSizes(CSize(39, 22), CSize(32, 15));
//---------------------------
// Set imagelist for toolbar
//---------------------------
HBITMAP bmp;
CBitmap bm; bmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),
MAKEINTRESOURCE(IDB_HISTORYBAR),
IMAGE_BITMAP,
0, 0,
LR_CREATEDIBSECTION | LR_LOADMAP3DCOLORS);
ASSERT(bmp); bm.Attach(bmp);
m_ilToolbar.Create(16, 15, ILC_MASK | ILC_COLOR8, 4, 4);
m_ilToolbar.Add(&bm, RGB(0XFF, 0, 0XFF)); m_wndToolbar.GetToolBarCtrl().SetImageList(&m_ilToolbar); //--------------------------------------------
// Now set first button for dropdown attribute
//--------------------------------------------
/*int inx = m_wndToolbar.CommandToIndex(ID_VIEWMODE);
ASSERT(inx >= 0); DWORD btnStyle = m_wndToolbar.GetButtonStyle(0);
m_wndToolbar.SetButtonStyle(inx, TBSTYLE_DROPDOWN);**/ return true;
}
// 子窗口上的消息响应写了,不过就是没有效果,
// 在mainframe 中。
ON_COMMAND(ID_VIEWMODE, OnViewmode)
没有调用函数呀。
怪事!
我在上面添加简单的控件时,消息响应的很正常,但是一旦添加上一个CToolBar控间后就无法相应消息了!
你的代码看得不太明白,m_wndPane派生于那个类?
看来兄台是一个高手,麻烦你将你的工程发给我!仔细研究一下
[email protected]
[email protected]
-----------------------------------------------------
这个控件做得太好了,我以前一直想找一个这样的控件-----我想做一个类似于Visual studio环境的java 编辑器,现在终于找到了!
请兄台将自己的使用该控件的心得说一下!
老外真他妈的牛X
m_wndPane的parent是sizingcontrolbarCToolBar继承CControlBar
在CControlBar::WindowProc你会发现当本身没有响应代码时,他将尝试向GetOwner()投递消息。Sorry!CHistory如果从CWnd派生,那么m_wndToolBar的消息将传到CHistory为止。如果想传到主窗口,那么应该在CHistory转投。
有的程序不大,不过它用了很多的第三方库(它们很大),如果没有它们的话。这个程序是不可能编译的。抱歉不能给你。
ccbcc(ccbcc):
没有效果。CControlBar里面的消息都 是发给它的父窗口的这个我知道,m_wndToolbar的父窗口是m_wndPane,消息 应该是这个窗口接收的。(没有收到),m_wndPane的父窗口也没有收到,..