为什么在dialogbar中添加的button是灰色的(不可用)?在线等待

时间:2022-11-03 14:22:21
我在dialogbar上添加了一个button控件,然后把dialogbar dock到主窗口上,但是,
button是灰色的.我用button->enablewindow(true)也只能改变暂时为可用(一瞬间,确切的说).
怎么才能使button总是可用?
谢谢了.

19 个解决方案

#1


给该button写一个消息处理函数就可以了,一般在CMainFrm里写

#2


这估计是DialogBar的问题,就象ToolBar一样,可能你需要为这个Button设置事件响应。

#3


楼上说得非常对

#4


OnButton()

hehe

#5


相应该按钮的UPDATE_COMMAND_UI,然后pCmdUI->Enable();

#6


我试着为他响应事件,可是没有用.
还有,添加一个static 控件,他的caption是汉字的话,好象是乱码.

#7


button灰化的时候,好象不会响应什么消息,比如单击,双击.

#8


还有,添加一个static 控件,他的caption是汉字的话,好象是乱码.

----------------------------------
你对话框的字体有没有选中文?

#9


问题解决了吗?
我以前也曾经遇到过这样的问题
你是project|add to project|componets and controls |cdialogbar这样生成对话条的吗?
如果你还没有解决
我有一种稍微麻烦的方法

#10


你要为这个button添加事件,确定一个功能,否则更菜单一样,默认显示灰色。
你static控件这样赋值试试看:
m_static.SetWindowText(_T(中文));

#11


问题解决了吗?
我以前也曾经遇到过这样的问题
你是project|add to project|componets and controls |cdialogbar这样生成对话条的吗?
如果你还没有解决
我有一种稍微麻烦的方法

不是这样的,我是插入一个对话框IDD_DIALOGBAR,不过你可以先说说稍微麻烦的方法.

#12


_T("中文"));
我上面写漏了。

#13


tonybaobao(Tony宝宝) :
恩,但是在classwizard中button好象没有cmdupdata,只有菜单有把.

#14


我指的是pCmdUI->Enable();

#15


没有为该按钮添加处理函数,用class wizard为该按钮添加事件处理

你对话框的字体有没有选中文?

#16


给我代码,wuxf_brave@sina.com

#17


如果你是添加一个对话框资源的话,
1,生成新类,从CDialog派生的
2,把这个类的头文件和实现文件中所有的CDialog改为CDialogBar,并且把构造函数重后面的那块初始化列表删掉,否则编译通不过的
3,自己添加initdialog函数
4,在mainframe中oncreate添加:
if(!m_DialogBar**.Create(this, IDD_DIALOG_**, CBRS_TOP|CBRS_FLYBY|CBRS_TOOLTIPS, -1)  || (!m_DialogBar**.initdialog())
{
  TRACE0("FIALE");
  return -1;
}
m_dialogbar.enabledocking(CBRS_ORIENT_HORZ);
Dockcontrolbar(&m_dialogbar**)
5,添加虚拟函数OnCmdMsg(...)
{
  if(m_DialogBar**.oncmdmsg(。。))
    return true;
  return cmainframe::oncmdmsg(..);
}
6,最后显示对话条的菜单响应函数里面
{
  showcontrolbar(&m_dialogbar**, (m_dialgobar**.getstyle(&ws_visible)) == 0, FALSE);
}

这样应该差不多了

#18


消息映射要加载CMainFrame中

#19


谢谢各位的解答和帮助,问题已经解决了,是这样的。

为button添加 ON_UPDATE_COMMAND_UI(IDC_BUTTON1,OnUpdateButton1)处理就可以了。

具体细节我好象是程序利用空闲时间象dlgbar发送Update消息(记不清了),如果控件没有处理,就用缺省方式处理,即控件是无效的(button就是此类控件),所以只要给控件一个处理或更新函数就可以回避调用缺省方式了。

具体细节可以看看 mfc100问(具体书名忘了)。
我说的不对的地方欢迎给我发消息(csdn帐号:enoloo);欢迎交流

#1


给该button写一个消息处理函数就可以了,一般在CMainFrm里写

#2


这估计是DialogBar的问题,就象ToolBar一样,可能你需要为这个Button设置事件响应。

#3


楼上说得非常对

#4


OnButton()

hehe

#5


相应该按钮的UPDATE_COMMAND_UI,然后pCmdUI->Enable();

#6


我试着为他响应事件,可是没有用.
还有,添加一个static 控件,他的caption是汉字的话,好象是乱码.

#7


button灰化的时候,好象不会响应什么消息,比如单击,双击.

#8


还有,添加一个static 控件,他的caption是汉字的话,好象是乱码.

----------------------------------
你对话框的字体有没有选中文?

#9


问题解决了吗?
我以前也曾经遇到过这样的问题
你是project|add to project|componets and controls |cdialogbar这样生成对话条的吗?
如果你还没有解决
我有一种稍微麻烦的方法

#10


你要为这个button添加事件,确定一个功能,否则更菜单一样,默认显示灰色。
你static控件这样赋值试试看:
m_static.SetWindowText(_T(中文));

#11


问题解决了吗?
我以前也曾经遇到过这样的问题
你是project|add to project|componets and controls |cdialogbar这样生成对话条的吗?
如果你还没有解决
我有一种稍微麻烦的方法

不是这样的,我是插入一个对话框IDD_DIALOGBAR,不过你可以先说说稍微麻烦的方法.

#12


_T("中文"));
我上面写漏了。

#13


tonybaobao(Tony宝宝) :
恩,但是在classwizard中button好象没有cmdupdata,只有菜单有把.

#14


我指的是pCmdUI->Enable();

#15


没有为该按钮添加处理函数,用class wizard为该按钮添加事件处理

你对话框的字体有没有选中文?

#16


给我代码,wuxf_brave@sina.com

#17


如果你是添加一个对话框资源的话,
1,生成新类,从CDialog派生的
2,把这个类的头文件和实现文件中所有的CDialog改为CDialogBar,并且把构造函数重后面的那块初始化列表删掉,否则编译通不过的
3,自己添加initdialog函数
4,在mainframe中oncreate添加:
if(!m_DialogBar**.Create(this, IDD_DIALOG_**, CBRS_TOP|CBRS_FLYBY|CBRS_TOOLTIPS, -1)  || (!m_DialogBar**.initdialog())
{
  TRACE0("FIALE");
  return -1;
}
m_dialogbar.enabledocking(CBRS_ORIENT_HORZ);
Dockcontrolbar(&m_dialogbar**)
5,添加虚拟函数OnCmdMsg(...)
{
  if(m_DialogBar**.oncmdmsg(。。))
    return true;
  return cmainframe::oncmdmsg(..);
}
6,最后显示对话条的菜单响应函数里面
{
  showcontrolbar(&m_dialogbar**, (m_dialgobar**.getstyle(&ws_visible)) == 0, FALSE);
}

这样应该差不多了

#18


消息映射要加载CMainFrame中

#19


谢谢各位的解答和帮助,问题已经解决了,是这样的。

为button添加 ON_UPDATE_COMMAND_UI(IDC_BUTTON1,OnUpdateButton1)处理就可以了。

具体细节我好象是程序利用空闲时间象dlgbar发送Update消息(记不清了),如果控件没有处理,就用缺省方式处理,即控件是无效的(button就是此类控件),所以只要给控件一个处理或更新函数就可以回避调用缺省方式了。

具体细节可以看看 mfc100问(具体书名忘了)。
我说的不对的地方欢迎给我发消息(csdn帐号:enoloo);欢迎交流

#20