自制的工具栏如何动态实现启用和禁用

精灵猫1 2006-06-27 12:43:14
工具栏内自制了多个按钮,希望对某个按钮实现启用禁用功能。禁用时要灰化。用UPDATA_COMMAND_UI好像不行。
...全文
407 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
livedeal 2006-06-28
  • 打赏
  • 举报
回复
汗~~~~~
精灵猫1 2006-06-28
  • 打赏
  • 举报
回复
我的按钮显示是变灰色了,但是图像也没有了,就是一个整块灰色的方框
livedeal 2006-06-28
  • 打赏
  • 举报
回复
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) 我是在这个里面的`
livedeal 2006-06-28
  • 打赏
  • 举报
回复
if (!m_wndFoolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD|WS_VISIBLE |CBRS_GRIPPER |
CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_FIXED|CBRS_LEFT ,
CRect(0, 0, 0, 0), ID_VIEW_FOOL) ||
!m_wndFoolBar.LoadToolBar(IDR_FOOL))
{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
}
for(int x=0;x<14;x++)
m_wndFoolBar.SetButtonStyle(x*2+1,m_wndFoolBar.GetButtonStyle(0)|TBBS_WRAPPED);
m_wndFoolBar.EnableDocking(CBRS_ALIGN_LEFT | CBRS_ALIGN_RIGHT);
DockControlBar(&m_wndFoolBar);
m_wndFoolBar.SetWindowText(_T("工具"));
精灵猫1 2006-06-28
  • 打赏
  • 举报
回复
我的也是在资源里画的啊。那你怎么创建工具栏的每个按钮呢?
livedeal 2006-06-28
  • 打赏
  • 举报
回复
你这样的我没有试过,我的图形是在资源里画的,灰化的时候就是那个图形灰掉的,不知道你的这个是什么原因~~~
精灵猫1 2006-06-28
  • 打赏
  • 举报
回复
这是我创建工具栏的函数,我发现随便只要是灰化就是沿着图标的线围出的一个灰色的框。不象其他按钮灰化是颜色变灰,里面还是能看出是什么图标的。是不是图标里面的颜色都变灰了,这个有什么解决方法吗
void CMainFrame::CreateToolBar()
{
m_wndToolBar.CreateEx(this,TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_FIXED);

//创建图形列表
CImageList img;
img.Create(IDB_HOT, 21, 0, RGB(255, 0, 255));
m_wndToolBar.GetToolBarCtrl().SetImageList(&img);
img.Detach();

img.Create(IDB_HOT, 21, 0, RGB(255, 0, 255));
m_wndToolBar.GetToolBarCtrl().SetHotImageList(&img);
img.Detach();

//设置工具条按钮宽度最小、最大值
m_wndToolBar.GetToolBarCtrl().SetButtonWidth(28, 80);
m_wndToolBar.GetToolBarCtrl().SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS);

m_wndToolBar.ModifyStyle(0, TBSTYLE_FLAT | TBSTYLE_TRANSPARENT);
m_wndToolBar.SetButtons(NULL, 10);//按钮个数

// 创建每个按钮
for(int i=0; i<10; i++)
m_wndToolBar.SetButtonInfo(i, (ID_MAINBMP+i), TBSTYLE_BUTTON, i);


CRect rectToolBar;
//获取工具条按钮大小
m_wndToolBar.GetItemRect(0, &rectToolBar);
//设置工具条的按钮大小和图标大小
m_wndToolBar.SetSizes(CSize(rectToolBar.Width(),(rectToolBar.Height()+5)), CSize(21,22));

}
livedeal 2006-06-27
  • 打赏
  • 举报
回复
可以的
精灵猫1 2006-06-27
  • 打赏
  • 举报
回复
对,就是这样的。我也是画图板画的,但我想任何时候都能灰化或者激活。这样可以吗?
livedeal 2006-06-27
  • 打赏
  • 举报
回复
自己设置的什么按钮啊~??我这个也是工具栏,都是自己做的,和画图板里的一样的`~不过你的ID要连续的~~~~
精灵猫1 2006-06-27
  • 打赏
  • 举报
回复
livedeal(怀念) :
我的按钮是自己设置的,也可以这样写吗?

syy64(太平洋) :
如何得到按钮窗口的句柄呢?我用GetDlgItem()不行。
livedeal 2006-06-27
  • 打赏
  • 举报
回复
网络有问题,发了两次`
livedeal 2006-06-27
  • 打赏
  • 举报
回复
afx_msg void OnUpdateDrawType(CCmdUI* pCmdUI);文件头
ON_UPDATE_COMMAND_UI_RANGE(ID_FD,ID_DELETE3, OnUpdateDrawType)//cpp里的
void CFlwDataView::OnUpdateDrawType(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
CFlwDataDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
switch(pCmdUI->m_nID)
{
case ID_PEN:
pCmdUI->SetCheck(m_tpwhich==DRAW_PEN);
pCmdUI->Enable(m_tpwhich==DRAW_PEN?FALSE:TRUE);
break;
case ID_LINE:
pCmdUI->SetCheck(m_tpwhich==DRAW_LINE);
break;
case ID_DISTILL:
pCmdUI->SetCheck(m_tpwhich==DRAW_DIST);
break;
}}
livedeal 2006-06-27
  • 打赏
  • 举报
回复
afx_msg void OnUpdateDrawType(CCmdUI* pCmdUI);文件头
ON_UPDATE_COMMAND_UI_RANGE(ID_FD,ID_DELETE3, OnUpdateDrawType)//cpp里的
void CFlwDataView::OnUpdateDrawType(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
CFlwDataDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
switch(pCmdUI->m_nID)
{
case ID_PEN:
pCmdUI->SetCheck(m_tpwhich==DRAW_PEN);
pCmdUI->Enable(m_tpwhich==DRAW_PEN?FALSE:TRUE);
break;
case ID_LINE:
pCmdUI->SetCheck(m_tpwhich==DRAW_LINE);
break;
case ID_DISTILL:
pCmdUI->SetCheck(m_tpwhich==DRAW_DIST);
break;
}}
syy64 2006-06-27
  • 打赏
  • 举报
回复
需要按钮窗口局柄。
精灵猫1 2006-06-27
  • 打赏
  • 举报
回复
我用过EnableWindow函数,但是运行时会显示错误,好像是什么句柄出错
syy64 2006-06-27
  • 打赏
  • 举报
回复
使用EnableWindow函数
精灵猫1 2006-06-27
  • 打赏
  • 举报
回复
在哪个函数里写?
能具体一点吗
livedeal 2006-06-27
  • 打赏
  • 举报
回复
在那个函数里面写
pCmdUI->Enable(m_tpwhich==DRAW_PEN?FALSE:TRUE);
精灵猫1 2006-06-27
  • 打赏
  • 举报
回复
up

15,976

社区成员

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

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