怎么控制让工具条上面的某些按钮灰掉不能用?

hjon 2006-04-13 10:03:02
一个基于对话框的程序,我在上面放了一个CToolBar工具条,对应一个菜单;现在想让这个工具条上面的某些按钮灰掉不能用,不知道应该怎么做?我看了CToolBar类没有成员函数可以设置某些按钮是否可用.各位高手帮忙一哈,感激不尽!
...全文
164 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
striking 2006-04-13
  • 打赏
  • 举报
回复
网上没有得下吗? 慢慢找找,这个很多的。
没有看清楚是同一个人,汗!
hjon 2006-04-13
  • 打赏
  • 举报
回复
哈哈"硬撑者"终于找到你了,那个贴子就是我的啊!!
我按你上次说的那个方法还是不行啊,还有你说的VC编程高手那本书,在哪儿找对应的光盘呢?
我看看光盘上面的例子可能就会明白了.再次感谢你哈!
lixiaosan 2006-04-13
  • 打赏
  • 举报
回复
m_wndToolBar.GetToolBarCtrl().EnableButton(ID_BUTTON_XX, FALSE);
striking 2006-04-13
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/topic/4677/4677892.xml?temp=.8642694
striking 2006-04-13
  • 打赏
  • 举报
回复
在对话框中使用ON_UPDATE_COMMAND_UI
ON_UPDATE_COMMAND_UI宏用于菜单和工具条处理,比如设置菜单的 状态 (enabled/disabled, checked/unchecked 等) 。这些处理是通过调用OnUpdateXXX来实现的。可是,该宏只适用于基于文档/视窗模型的应用程序,而对于对话框,还没有提高类似的功能来处理按钮的状态而使用该宏,在处理对话框中拥有大量按钮、而这些按钮之间存在状态控制关系时尤为重要。本程序讲解该宏在对话框中实现。

本程序从CDialog派生了一个类CCmdUIDialog,实现了必要的代码来调用OnUpdateXXX函数。在使用时,你可以直接从 CCmndUIDialog派生,而不从CDialog派生新类,并手工添加ON_UPDATE_COMMAND_UI宏到新类。

类声明:
#if !defined(AFX_CMDUIDIALOG_H__7D35F4B8_7531_11D1_8FA7_000000000000__INCLUDED_)
#define AFX_CMDUIDIALOG_H__7D35F4B8_7531_11D1_8FA7_000000000000__INCLUDED_

#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
// CmdUIDialog.h : header file
//

/////////////////////////////////////////////////////////////////////////////
// CCmdUIDialog dialog

class CCmdUIDialog : public CDialog
{
// Construction
public:
CCmdUIDialog(LPCTSTR lpszTemplateName, CWnd* pParentWnd = NULL);
CCmdUIDialog(UINT nIDTemplate, CWnd* pParentWnd = NULL);
CCmdUIDialog();
BOOL ContinueModal();

// Implementation
protected:

// Generated message map functions
//{{AFX_MSG(CCmdUIDialog)
// NOTE: the ClassWizard will add member functions here
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};

//{{AFX_INSERT_LOCATION}}
// Microsoft Developer Studio will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_CMDUIDIALOG_H__7D35F4B8_7531_11D1_8FA7_000000000000__INCLUDED_)


类实现:
// CmdUIDialog.cpp : implementation file
//

#include "stdafx.h"
#include "delme.h"
#include "CmdUIDialog.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CCmdUIDialog dialog


CCmdUIDialog::CCmdUIDialog(LPCTSTR lpszTemplateName, CWnd* pParentWnd)
: CDialog(lpszTemplateName, pParentWnd)
{
}

CCmdUIDialog::CCmdUIDialog(UINT nIDTemplate, CWnd* pParentWnd)
: CDialog(nIDTemplate, pParentWnd)
{
}

CCmdUIDialog::CCmdUIDialog()
{
}


BOOL CCmdUIDialog::ContinueModal()
{
// Iterate all child windows and instruct to update themselves
CWnd* pWndChild=GetWindow(GW_CHILD);
int iIndex=0;
while (NULL!=pWndChild)
{

CCmdUI state;
state.m_nID=::GetWindowLong(*pWndChild, GWL_ID);
state.m_nIndex=iIndex++;
state.m_pOther=pWndChild;

// ***CCmdUI::DoUpdate is undocumented MFC***
state.DoUpdate(this, FALSE);

pWndChild=pWndChild->GetWindow(GW_HWNDNEXT);
}

// Must call the base class
return CDialog::ContinueModal();
}

BEGIN_MESSAGE_MAP(CCmdUIDialog, CDialog)
//{{AFX_MSG_MAP(CCmdUIDialog)
// NOTE: the ClassWizard will add message map macros here
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CCmdUIDialog message handlers
注意:本类使用了MFC没有公开的成员函数CCmdUI::DoUpdate。

请参见一个例子:dialog\commandui_dialog目录。

第二种实现方法
在不派生一个新类的情况下,重载下面两的函数中任一个函数:


BOOL ::PreTranslateMessage( MSG* pMsg )
{
UpdateDialogControls( this, TRUE );
return CDialog::PreTranslateMessage( pMsg );
}

或者:


BOOL ::ContinueModal( )
{
UpdateDialogControls( this, TRUE );
return CDialog::ContinueModal( );
}

注意:ContinueModal调用比PreTranslateMessage频繁五倍。
hjon 2006-04-13
  • 打赏
  • 举报
回复
不行啊.我这样试过.我这个程序是基于对话框的,好像是对话框不会自动去响应那个UPDAGE_COMMAND_UI消息.不知道有没有办法可以让工具条上的按钮灰掉呢,如果可以我自己手动控制也行.
pomelowu 2006-04-13
  • 打赏
  • 举报
回复
把工具条上按钮相应的菜单项disable就可以了。
hjon 2006-04-13
  • 打赏
  • 举报
回复
好了.谢谢大家.我用小三的方法弄好了.

15,975

社区成员

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

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