首页 > 代码库 > VS2008给图标工具栏-状态栏添加响应函数

VS2008给图标工具栏-状态栏添加响应函数

1、在对话框的:OnInitDialog()函数中添加以下红色代码:

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();//用于链接一个对话框




void CFilterDlg::OnSize(UINT nType, int cx, int cy)
{
    CDialog::OnSize(nType, cx, cy);
 
    if (m_list.m_hWnd)
    {
        CRect  rect(0, 32, cx, cy); 
        //GetWindowRect(&rect);  //获取窗口rect
        //ScreenToClient(&rect);  //从窗口尺寸转换到用户区rect
        //rect.InflateRect(-10, 0, -10, -10);
        m_list.MoveWindow(&rect); 
    }
}

 

vs2008 对话框上的工具栏添加提示信息

对话框上的工具条上的提示信息不能采用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;  

}   

 

二、状态栏
头文件:
CStatusBar m_StatBar;
void CreateStatusBar();
 
源文件: 
void CFilterDlg::CreateStatusBar()
{
  //创建状态栏
  if(m_StatBar.Create(this))
  {
  // 状态行指示器对应 ID
  static UINT indicators[] =
  {
  ID_SEPARATOR,           
  ID_INDICATOR_CAPS,
  ID_INDICATOR_NUM,
  ID_INDICATOR_SCRL,
  };
 
  // 设置状态栏指示器 ID 和指示器个数
  m_StatBar.SetIndicators(indicators,sizeof(indicators)/sizeof(UINT));
 
  // 设置状态栏指示器文本
  m_StatBar.SetPaneText(0,L"指示器1",0);
  m_StatBar.SetPaneText(1,L"指示器2",0);
  m_StatBar.SetPaneText(2,L"指示器3",0);
  m_StatBar.SetPaneText(3,L"指示器4",0);
 
  // 设置状态栏指示器属性
  m_StatBar.SetPaneInfo(0,ID_SEPARATOR,SBPS_NORMAL   ,100);
  m_StatBar.SetPaneInfo(1,ID_INDICATOR_CAPS,SBPS_NORMAL   ,100);
  m_StatBar.SetPaneInfo(2,ID_INDICATOR_NUM,SBPS_NORMAL   ,100);
  m_StatBar.SetPaneInfo(3,ID_INDICATOR_SCRL,SBPS_NORMAL   ,100);
 
  ////为状态栏指示器添加图标
  //HICON icon[2];
  //icon[0] = AfxGetApp()->LoadIcon (IDI_ICON1);
  //icon[1] = AfxGetApp()->LoadIcon (IDI_ICON2);
  //m_StatBar.GetStatusBarCtrl().SetIcon(0,icon[0]);
  //m_StatBar.GetStatusBarCtrl().SetIcon(1,icon[1]);
  //m_StatBar.GetStatusBarCtrl().SetIcon(2,icon[0]);
  //m_StatBar.GetStatusBarCtrl().SetIcon(3,icon[1]);
  //设置状态栏高度
  m_StatBar.GetStatusBarCtrl().SetMinHeight(20);
 
  // 显示状态栏
  RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);
  }
}
 
void CFilterDlg::OnSize(UINT nType, int cx, int cy)
{
  CDialog::OnSize(nType, cx, cy);
 
  if (m_list.m_hWnd)
  {
  // 显示更新状态栏
  RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);  
  CRect  rect(0, 40, cx, cy - 20); 
  //GetWindowRect(&rect);  //获取窗口rect
  //ScreenToClient(&rect);  //从窗口尺寸转换到用户区rect
  //rect.InflateRect(-10, 0, -10, -10);
  m_list.MoveWindow(&rect);     //列表控件位置
  }

VS2008给图标工具栏-状态栏添加响应函数