VS2008給表徵圖工具列-狀態列添加響應函數

來源:互聯網
上載者:User

標籤:style   io   color   ar   os   sp   for   檔案   div   

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給表徵圖工具列-狀態列添加響應函數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.