MFC Toolbar 工具栏按钮添加消息响应

时间:2022-03-05 09:00:13

工具栏按钮消息响应需要的是对应按钮的命令ID。对于动态方式创建的工具栏,其按钮的命令ID在类向导ID列表中是找不到的,只能找到图标的ID。按下述步骤不能添加事件响应。

(1)VS2010 打开类向导,选择“Message Maps”选项卡,在“Class name”列表框选择创建了工具栏的对话框类,在“Object Ids”列表中选择工具栏按钮ID,在“Messages”列表中选择“COMMAND”项

(2)单击“Add Function…”按钮,弹出“Add Member Function”对话框,并给出默认时的命令处理函数名

(3)单击“OK”按钮,就添加了工具栏按钮的命令处理函数。

所以必须手动添加。或者在类向导生成的基础上修改消息映射部分:

ON_COMMAND(IDI_ZOOM_OUT, &CImgProcView::OnWxz)    //将IDI_ZOOM_OUT部分改为对应工具栏按钮的命令ID。该ID可在工具栏初始化代码中找到,一般在OnInitDialog中。

//以下代码来自其他的教程。

for (int i=0;i<10;i++)
{
if (i==2||i==5)
{
array[i]=ID_SEPARATOR;
        }
        else
        {
array[i]=i+1001;  //按钮命令ID设置
        }
}

一般情况下,工具栏按钮执行某个菜单项或者按钮的处理函数,那么这时不需要添加任何消息响应的代码,只需要在OnInitDialog中修改工具栏的各按钮ID为对应的菜单项或按钮ID即可。

        UINT array[10];
//按钮的命令ID设置
array[0]=IDC_BTN_ADDPHASE;
array[1]=IDC_BTN_DELPHASE;
array[2]=ID_SEPARATOR;
array[3]=IDC_BTN_ADDLAYER;
array[4]=IDC_BTN_DELLAYER;
array[5]=ID_SEPARATOR;
array[6]=IDC_BTN_LAYERSETUP;
array[7]=IDC_BTN_INITSTATE;
array[8]=IDC_BTN_KINETICEDIT;
array[9]=IDC_BTN_LAYERIMPACT;