专家及各位高手,有个关于VC对话框的问题请教大家。
我想实现一个功能,就是对话框里有两个复选框(checkbox)、一个“确定”按钮和一个“取消”按钮。
两个复选框的Label(标签) 分别是电机A、电机B。也就是按确定按钮后根据复选框选取情况可以让电机A,电机B单独运行或让电机A、B都运行。出于安全考虑等原因,电机A和B允许运行还要检查相关的变量是否为TRUE,(如 bln_MotorEnableA=TRUE,电机A就可以运转,bln_MotorEnableB=TRUE,电机B也可以运转),相反如bln_MotorEnableA=FALSE,勾选复选框A后按“确定”按钮就弹出一个警告对话框:电机A有故障禁止运行!按警告对话框的确定按钮后,清除勾选,然后焦点给复选框A,类似于数据DDV失败后抛出异常情形,我不知道如何实现,请高手指教。电机如何控制我自己解决,您只要MotorRun_A=TRUE,MotorRun_B=TRUE,我就知道如何继续了。总之就是按“确定”按钮后检查勾选情况和变量情况,都为真了,才能继续下去,否则抛出警告对话框,焦点给复选框控件~!谢谢!
我想实现一个功能,就是对话框里有两个复选框(checkbox)、一个“确定”按钮和一个“取消”按钮。
两个复选框的Label(标签) 分别是电机A、电机B。也就是按确定按钮后根据复选框选取情况可以让电机A,电机B单独运行或让电机A、B都运行。出于安全考虑等原因,电机A和B允许运行还要检查相关的变量是否为TRUE,(如 bln_MotorEnableA=TRUE,电机A就可以运转,bln_MotorEnableB=TRUE,电机B也可以运转),相反如bln_MotorEnableA=FALSE,勾选复选框A后按“确定”按钮就弹出一个警告对话框:电机A有故障禁止运行!按警告对话框的确定按钮后,清除勾选,然后焦点给复选框A,类似于数据DDV失败后抛出异常情形,我不知道如何实现,请高手指教。电机如何控制我自己解决,您只要MotorRun_A=TRUE,MotorRun_B=TRUE,我就知道如何继续了。总之就是按“确定”按钮后检查勾选情况和变量情况,都为真了,才能继续下去,否则抛出警告对话框,焦点给复选框控件~!谢谢!
#define ERR_A_MSG _T("电机A有故障禁止运行!")
#define ERR_B_MSG _T("电机B有故障禁止运行!")
#define CAP_MSGBOX _T("这个就自己定义了")//“确定”按钮事件函数里的处理
if(m_checkBoxA.GetCheck() == 1){
if(bln_MotorEnableA){
MotorRun_A = TRUE;
}else{
::MessageBox(this->m_hwnd, ERR_A_MSG, CAP_MSGBOX, (MB_ICONWARNING | MB_OK));
m_checkBoxA.SetCheck(0);
m_checkBoxA.SetFocus();
return;
}
}
if(m_checkBoxB.GetCheck() == 1){
if(bln_MotorEnableB){
MotorRun_B = TRUE;
}else{
::MessageBox(this->m_hwnd, ERR_B_MSG, CAP_MSGBOX, (MB_ICONWARNING | MB_OK));
m_checkBoxB.SetCheck(0);
m_checkBoxB.SetFocus();
return;
}
}
//机器运行
...
非常感谢levelmouse和各位,请问我怎样给你加分?追加问一个问题,我建立了一个名为MyPro的单文档工程,这个对话框是工程的一部分,我为此对话框建立一个新的类: Cmydlg。
然后在主菜单:查看(V)下添加一子菜单:摇摆(R),其ID为ID_VIEW_MotorRun,Caption为:摇摆(&R),并把该菜单与CMainFrame类关联。同时在CMainFrame类下建立了2个Public 的Bool 变量 bln_ARunning, bln_ARunning,初始化为FALSE, 他们为TRUE,电机才真正的运行。我想问对话框“确定”按钮事件函数里能不能直接操作变量bln_ARunning,和bln_ARunning,也就是勾选复选框并bln_MotorEnableX=TRUE时直接把bool 值赋给
bln_ARunning, bln_ARunning,并更新。简言之就是在对话框里如何操作修改主程序的变量。
我把单击摇摆(R)子菜单的处理函数摘要如下:
void CMainFrame::OnVIEWMotorRun()
{
// TODO: Add your command handler code here
//bln_EA=TRUE;
//bln_EB=FALSE;
Cmydlg dlg;
dlg.bln_MotorEnableA= TRUE;//为了简洁和观看出错效果我把dlg.bln_MotorEnableA、
//dlg.bln_MotorEnableB一个直接赋TRUE,一个赋FALSE
dlg.bln_MotorEnableB= FALSE;
int ReturnVal=dlg.DoModal();
if(ReturnVal==1)// 1—是按OK确定键后Domodal的返回值
{
// 这里假设您在对话框“确定”按钮事件函数操作过了bln_ARunning,bln_BRunning
//变量,所以暂时不做处理,留空 }
if(对话框“确定”按钮事件函数)
{//********A电机运行程序
}
if(bln_BRunning)
{//********B电机运行程序
}
}
{
// TODO: Add your command handler code here
//bln_EA=TRUE;
//bln_EB=FALSE;
Cmydlg dlg;
dlg.bln_MotorEnableA= TRUE;//为了简洁和观看出错效果我把dlg.bln_MotorEnableA、
//dlg.bln_MotorEnableB一个直接赋TRUE,一个赋FALSE
dlg.bln_MotorEnableB= FALSE;
int ReturnVal=dlg.DoModal();
if(ReturnVal==1)// 1—是按OK确定键后Domodal的返回值
{
// 这里假设您在对话框“确定”按钮事件函数操作过了bln_ARunning,bln_BRunning
//变量,所以暂时不做处理,留空 }
if(bln_ARunning)
{//********A电机运行程序
}
if(bln_BRunning)
{//********B电机运行程序
} }
...
传一个父窗口指针进去就可以了。