首页 > 代码库 > VS2008给图标工具栏-状态栏添加响应函数
VS2008给图标工具栏-状态栏添加响应函数
BOOL CGSM_MessageDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
// TODO: 在此添加额外的初始化代码
//创建图像列表
m_ImageList.Create(32,32,ILC_COLOR24|ILC_MASK,1,1);
//向图像列表中添加图标
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICONBOOK));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICONNOTE));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICONSEND));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICONRECV));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICONSET));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICONUSER));
UINT array[8];
for(int i=0;i<8;i++)
{
if(i==2 || i==5)
array[i] = ID_SEPARATOR; //第、个按钮为分隔条
else
array[i] = i+1001; //为工具栏按钮设置索引
}
m_ToolBar.Create(this);
m_ToolBar.SetButtons(array,8);
//关联图像列表
m_ToolBar.GetToolBarCtrl().SetImageList(&m_ImageList);
m_ToolBar.SetSizes(CSize(50,60),CSize(32,32)); //设置按钮和图标的大小
m_ToolBar.SetButtonText(0,L"电话簿管理");
m_ToolBar.SetButtonText(1,L"常用语管理");
m_ToolBar.SetButtonText(3,L"短信息发送");
m_ToolBar.SetButtonText(4,L"短信息接收");
m_ToolBar.SetButtonText(6,L"短信猫设置");
m_ToolBar.SetButtonText(7,L"操作员管理");
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);
return TRUE; // 除非将焦点设置到控件,否则返回TRUE
}
2、从代码中的“array[i] = i+1001; //为工具栏按钮设置索引”可以看出,工具栏图标的地址是1001开始的。因此,工具栏的图标分别为1001 1002 1003 1004等等。
3、现在为图标工具栏添加响应函数:
在对话框头文件的.h中添加红色代码:如下
// 实现
protected:
HICON m_hIcon;
// 生成的消息映射函数
virtual BOOL OnInitDialog();
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
afx_msg void OnPhoneBook();
4、在对话框的Dlg.cpp中添加如下代码:
BEGIN_MESSAGE_MAP(CGSM_MessageDlg, CDialog)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_COMMAND(1001,OnPhoneBook)//1001时候第一个按钮的ID值,如果要为第二个图标按钮添加函数这改为:ON_COMMAND(1002,OnPhoneBook)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
5、在对话框的Dlg.cpp中添加响应函数:
void CGSM_MessageDlg::OnPhoneBook()
{
CPhoneBookDlg dlg;
dlg.DoModal();//用于链接一个对话框
}
对话框上的工具条上的提示信息不能采用mfc应用程序直接在资源中添加的方式添加,因为对话框不由CFrameWnd管理。
1. 在对话框类头文件.h中添加
BOOL OnToolTipNotify( UINT id,NMHDR* pNMHDR,LRESULT* pResult);
2. 在对话框.cpp文件中添加
(1)消息映射中添加:
BEGIN_MESSAGE_MAP(CAssessMainDialog, CBCGPDialog)
//控件响应,范围为0到无穷大
ON_NOTIFY_EX( TTN_NEEDTEXT,0,OnToolTipNotify)
//控件响应,范围为0到OxFFFF
//ON_NOTIFY_EX_RANGE( TIN_NEEDTEXT,0,OxFFFF,OnToolTipNotify)
END_MESSAGE_MAP()
(2)添加响应函数:
BOOL CAssessMainDialog::OnToolTipNotify( UINT id,NMHDR* pNMHDR,LRESULT* pResult )
{
BOOL bResult = TRUE;
TOOLTIPTEXT *pTTT = (TOOLTIPTEXT*)pNMHDR;
UINT_PTR uID = pNMHDR->idFrom;
if ( pTTT->uFlags && TTF_IDISHWND)
{
//int nID = ::GetDlgCtrlID(HWND(uID);)网上例子说uID为控件在窗口中的句柄,测试结果其实就是控件的ID,因此这句不需要,
//也可能是编译器的原因。。。。。。
CString strToolTips(_TEXT(""));
switch ( uID )
{
case ID_EXECUTE:
strToolTips.Format(_TEXT("%s"),_TEXT("执行评估流程"));
break;
case ID_SAVEFILE:
strToolTips.Format(_TEXT("%s"),_TEXT("保存评估流程"));
break;
case ID_OPENFILE:
strToolTips.Format(_TEXT("%s"),_TEXT("打开评估流程"));
break;
default:
bResult = FALSE;
}
if ( TRUE == bResult)
{
*pResult = 0;
_tcscpy( pTTT->lpszText,strToolTips);
pTTT->hinst = NULL;
}
}
return bResult;
}
(3)启用工具提示
在初始化函数中添加,不一定在OnInitDialog函数中。
BOOL CAssessMainDialog::OnInitDialog()
{
CBCGPDialog::OnInitDialog();
CBCGPDialog::EnableVisualManagerStyle();
m_ToolBar->EnableToolTips(TRUE);
//网上的例子是直接启用对话框工具提示,测试结果只能对整个工具栏显示提示信息,改为启用工具栏提示信息,ok了
//EnableToolTips(TRUE);
return TRUE;
}
VS2008给图标工具栏-状态栏添加响应函数