我创建了一个CDialogBar对象,这个对象所用的对话框模板中有一个普通的按钮,无论
我将这个按钮的属性设置为disable或者在程序中用EnableWindow函数将其设置为disable状态时都会失效,也就是说这个按钮总处于enable状态,而这个对话框中的其它窗口就不会这样,不知大家有没有遇到过这个问题,还请指教。
我将这个按钮的属性设置为disable或者在程序中用EnableWindow函数将其设置为disable状态时都会失效,也就是说这个按钮总处于enable状态,而这个对话框中的其它窗口就不会这样,不知大家有没有遇到过这个问题,还请指教。
在CMainFrm.h里的修改:
先加一个公有成员:
CDialogBar m_bar1;
改消息函数:
protected:
//{{AFX_MSG(CMainFrame)
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
//}}AFX_MSG
afx_msg void OnDialogBarButton();//手工添加响应CDialogBar上的按钮消息函数
DECLARE_MESSAGE_MAP()下面的是在CMainFrm.cpp里修改的:BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
ON_WM_CREATE()
//}}AFX_MSG_MAP
ON_COMMAND(IDC_BUTTON1,OnDialogBarButton)//手工添加处理CDialogBar上的按钮消息,其中IDC_BUTTON1是你在对话框资源中定义的按钮ID
END_MESSAGE_MAP()在OnCreate里有创建CDialogBar的代码:
if(!m_bar1.Create(this,IDD_DIALOG1,CBRS_LEFT|CBRS_TOOLTIPS|CBRS_FLYBY,ID_MYDIALOGBAR1))//创建对话框
{
AfxMessageBox("对话框工具条创建出错!");
return;
}
//启动对话框工具条的任意停泊特性
EnableDocking(CBRS_ALIGN_ANY);
m_bar1.EnableDocking(CBRS_ALIGN_ANY);
//将对话框放置于窗口左边
DockControlBar(&m_bar1);还有就是别忘了处理按钮的函数:
void CMainFrame::OnDialogBarButton()
{
MessageBox("DialogBarButton down!!");
}
CButton *m_Button=(CButton *)m_wnddlgbar.GetDlgItem(IDC_***);
EnableWindow(...);
CButton *m_Button=(CButton *)m_wnddlgbar.GetDlgItem(IDC_***);//其中IDC_***指你在对话框编辑器里给button起的ID
button=(CButton*)m_bar.GetDlgItem(IDC_BUTTON1);
button->SetWindowText("fsaa");
上面这样是可以改变按钮上的文字的,而换成EnableWindow就不可以了:
button=(CButton*)m_bar.GetDlgItem(IDC_BUTTON1);
button->EnableWindow(FALSE);
即使直接在资源里把按钮的disabled属性选上都不可以。
后来我发现可能是按钮又重新被击活了,所以我用以下代码,果然发现是这样的:
but=(CButton*)m_bar1.GetDlgItem(IDC_BUTTON1);
for(int i=0;i<200000;i++){
but->EnableWindow(false);
}
用上述代码会发现按钮有短暂的变灰状态。
用下面的方法可以实现:
先在MainFrm.h中加入一个变量:
bool ENABLE;
并手工加入一个消息函数声明:
afx_msg void OnupdataButton(CCmdUI *pCmdUI);
然后在MainFrm.cpp中:
先在初始化中加入:
ENABLE=true;
手工加入一个消息映射:
ON_UPDATE_COMMAND_UI(IDC_BUTTON1,OnupdataButton)
再写函数的实现代码:
void CMainFrame::OnupdataButton(CCmdUI *pCmdUI)
{
if(ENABLE){
pCmdUI->Enable(0);
}
else{
pCmdUI->Enable(1);
}
}
在你想改变此按钮的是否禁用处只要写ENABLE=!ENABLE;就可以了,楼主试试吧,在我这儿是可以的。