动态创建工具栏图标、图标命令按钮及添加响应函数。图标命令按钮相对来说要简单一些,工具栏图标需要通过函数创建imagelist、toolbar。而图标命令按钮则只需要创建添加命令按钮,然后与图标关联即可。
对话框程序利用工具栏资源设计的工具栏,工具栏按钮只能显示256色图像,而不能显示真彩色图像,并且工具栏按钮不能显示文本,为此,需要动态创建工具栏;
1 动态创建
2 能有工具提示;
3 可以函数响应
1 首先建立一个对话框程序
2 新建或引入3个位图,作为图标显示;
3 声明、定义、调用
CToolBar m_ToolBar;
CImageList m_ImageList;
CString m_TipText;
CBitmap m_bitmap1;
CBitmap m_bitmap2;
CBitmap m_bitmap3;
...
//}}AFX_MSG
afx_msg void OnICON1();
afx_msg void OnICON2();
afx_msg void OnICON3();
afx_msg BOOL OnToolTipNotify(UINT id,NMHDR * pNMHDR, LRESULT * pResult);
//}}AFX_MSG_MAP
ON_COMMAND(8001, OnICON1)
ON_COMMAND(8002, OnICON2)
ON_COMMAND(8003, OnICON3)
ON_NOTIFY_EX(TTN_NEEDTEXT,0,OnToolTipNotify)
(图标命令按钮只需添加命令按钮、并将按钮属性更改为“所有者绘制”、“位图”即可。)
BOOL CRecordsDlg::OnInitDialog()
{
CDialog::OnInitDialog();
//工具栏(按钮+图标+工具提示+函数响应)
m_ImageList.Create(16,16,ILC_COLOR24|ILC_MASK,1,1);
UINT array[16];
for(int i = 0 ; i < 16; i++)
{
if(i==3 || i==7 || i ==11 || i ==15)
{
array[i] = ID_SEPARATOR;
}
else
{
array[i] = i + 8001;
}
}
m_ToolBar.CreateEx(this); //Create改成CreateEx可以扁平化显示按钮,图标不变,分隔条在扁平化时才显示;
m_ToolBar.SetButtons(array,16);
m_ToolBar.SetButtonText(0,"可编辑对话框");
m_ToolBar.SetButtonText(1,"对话框输入应用");
m_ToolBar.SetButtonText(2,"win32控制台应用程序");
m_bitmap1.LoadBitmap(IDI_ICON1);
m_bitmap2.LoadBitmap(IDI_ICON2);
m_bitmap3.LoadBitmap(IDI_ICON3);
//m_ImageList.Create(16,16,ILC_COLOR24|ILC_MASK,1,1);
m_ImageList.Add(&m_bitmap1, RGB(0, 0, 0));
m_ImageList.Add(&m_bitmap2, RGB(0, 0, 0));
m_ImageList.Add(&m_bitmap3, RGB(0, 0, 0));
m_ToolBar.GetToolBarCtrl().SetImageList(&m_ImageList);
void CRecordsDlg::OnICON1()
{
Dlg1 dlg; //创建Dlg1类对象dlg;
if(!dlg.DoModal()) //调用dlg对象的DoModal函数创建模式对话框;
{
return ;
}
3 图片文件关联
3.1 将16*16的bmp的图标文件放入res文件夹中,图标文件必须是bmp的,可以用PS转换,背景设置为#f0f0f0;
3.2 在资源视图的bitmap处右击,插入→bitmap→引入→文件类型:全部→文件位置。;