学习VS2010 -------- 桌面信息提示信息编程

桌面信息提示信息编程

   目的在系统运行有各种各样的信息提示,直接从桌面的右下角弹出对话框给出提示,该提示对话框可以采用系统信息提示对话框,也可以采用自定义对话框进行提示。

(1)      利用VS2010生成对话框形式的工程文件;

(2)      在对话框中加入与桌面提示信息相关的控件,包括外观类型、动画类型、透明度、动画速度、自动关闭、关闭时间等;

(3)       


(4)      为各个列表框添加数据

其中,外观类型列表框数据为MS Office 2000;MS Office XP;MS Office2003;MS VS.NET 2005;Windows XP;MSN Messenger;MS Office 2007 Blue;MS Office 2007Black;MS Office 2007 Silver;MS Office 2007 Aqua;

动画类型列表框数据包括:Noanimation;Unfold;Slide;Fade;

(5)      自绘图标列表控件

通常的列表控件只能显示字符串,为了能够使得列表中既能显示字符,又能显示图标,需要对列表控件进行重载,建立以CComboBox为基类的继承类CIconComboBox,在其中重载构造函数,CompareItem,DrawItem,MeasureItem等函数,实现列表控件的自绘。重点的需要重载以下类

a)      构造函数的重载

      CIconComboBox(CMFCToolBarImages& Icons); 以便以引用的方式调用位图

CIconComboBox::CIconComboBox(CMFCToolBarImages&Icons) :

                 m_Icons (Icons)

{

}

b)      重写MeasureItem()函数,便于控制列表类的行间距

void CIconComboBox::MeasureItem(LPMEASUREITEMSTRUCT lpMIS)

{

     lpMIS->itemHeight = 25;

     lpMIS->itemWidth = 25;

}

c)      最重要的,重载DrawItem()函数

void CIconComboBox::DrawItem(LPDRAWITEMSTRUCT lpDIS)

{

         CDC* pDC= CDC::FromHandle(lpDIS->hDC);

         ASSERT_VALID (pDC);

         HBRUSH           brBackground;

         COLORREF      clText;

         if(lpDIS->itemState & ODS_SELECTED) 

         {

                   brBackground =GetSysColorBrush (COLOR_HIGHLIGHT);

                   clText =afxGlobalData.clrTextHilite;

         }

         else

         {

                   brBackground =GetSysColorBrush (COLOR_WINDOW);

                   clText =afxGlobalData.clrWindowText;

         }

         CRect rectItem = lpDIS->rcItem;

         ::FillRect (lpDIS->hDC,&rectItem, brBackground);

         intnIndex = lpDIS->itemID;

         if(nIndex > 0)

         {

                   CAfxDrawState ds;

                   m_Icons.SetTransparentColor(afxGlobalData.clrBarFace);

                   m_Icons.PrepareDrawImage(ds);

                   m_Icons.Draw (pDC,rectItem.left + 1, rectItem.top + 1, nIndex - 1);

                   m_Icons.EndDrawImage (ds);

         }

         CString strText;

         GetLBText (nIndex, strText);

         CRect rectText = rectItem;

         rectText.left += 20;

         CFont* pOldFont = pDC->SelectObject(&afxGlobalData.fontRegular);

         pDC->SetBkMode (TRANSPARENT);

         pDC->SetTextColor (clText);

         pDC->DrawText (strText, rectText,DT_SINGLELINE | DT_VCENTER);

         pDC->SelectObject (pOldFont);

}

d)      重载CompareItem()实现排序规则,由于本例中控件属性已经选择不排序,所以此处不再起作用

e)       #include"IconComboBox.h"加入StdAfx.h

f)        定义变量CIconComboBoxm_IconCtrl;

g)      将控件属性的Owner Draw属性设置为Variable,将属性Hasstrings设置为TRUE

(6)      利用ClassWizard建立对话框中的各种变量

(7)      初始化

m_TransCtrl.SetRange(10,255);

         m_CloseTimeCtrl.SetRange(1,5);

         m_AnimSpeedCtrl.SetRange(1,100);

m_Icons.SetImageSize(CSize(32,32));

         m_Icons.Load(IDB_ICONS);

         m_IconsSmall.SetImageSize(CSize(16,16));

         m_IconsSmall.Load(IDB_ICONS_SMALL);

 

         for(inti=0;i<m_Icons.GetCount();i++)

         {

                   CStringstrText;

                   if(i==0)

                            strText= _T("No Icon");

                   else

                   {

                            strText.Format(_T("Icon %d"),i);

                   }

 

                   m_IconCtrl.AddString(strText);

         }

       UpdateData(FALSE);  //手动调用自绘控件的DrawItem()函数

(8)      在显示按钮上进行程序设计,设置信息提示界面参数并显示信息提示框

   1)  设置界面风格特性,VS2010提供了多种界面风格供系统选择

     switch(m_LookStyle)

         {

         case 0:

                   CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS (CMFCVisualManager));

                   break;

         case 1:

CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS (CMFCVisualManagerOfficeXP));

                   break;

         case 2:

                   CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS (CMFCVisualManagerOffice2003));

                   break;

         case 3:

                   CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS (CMFCVisualManagerVS2005));

                   break;

         case 4:

                   CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS (CMFCVisualManagerWindows));

                   break;

         case 5:

                   CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMSNVisualManager));

                   break;

         case 6:

                   CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_LunaBlue);

                   CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS (CMFCVisualManagerOffice2007));

                   break;

         case 7:

                   CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_ObsidianBlack);

                   CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS (CMFCVisualManagerOffice2007));

                   break;

         case 8:

                   CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_Silver);

                   CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS (CMFCVisualManagerOffice2007));

                   break;

         case 9:

                   CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_Aqua);

                   CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS (CMFCVisualManagerOffice2007));

                   break;

         }

   2)设置参数

CMFCDesktopAlertWnd*pPopup = new CMFCDesktopAlertWnd;

         pPopup->SetAnimationType((CMFCPopupMenu::ANIMATION_TYPE)m_AnimType);

         pPopup->SetAnimationSpeed(m_AnimSpeed);

         pPopup->SetTransparency((BYTE)m_Trans);

         pPopup->SetSmallCaption(m_IsSmallCaption);

         pPopup->SetAutoCloseTime(m_AotuClose ? m_CloseTime * 1000 : 0);

3)  自绘风格的提示界面

    a) 利用资源建立对话框,注意将属性设置为Child,透明属性设置为TRUE

b) 对该对话框建立类,基类为CMFCDesktopAlertDialog

c) 调用

pPopup->Create(this, IDD_DIALOG1,

                                     NULL,

                                     CPoint(-1,-1),

                                     RUNTIME_CLASS(CMyPopDlg));

 4 ) 系统信息提示界面的调用

        CMFCDesktopAlertWndInfo params;

                   if(m_IconSel>0)

                   {

                            params.m_hIcon= m_Icons.ExtractIconW(m_IconSel-1);

                            params.m_strText= m_Text;

                            params.m_strURL= m_LinkText;

                            params.m_nURLCmdID= 101;

                            pPopup->Create(this, params, NULL, CPoint(-1,-1));

                   }

 5)设置ICON及标题

HICONhIcon = (HICON) ::LoadImage (::AfxGetResourceHandle (),

                   MAKEINTRESOURCE(IDR_MAINFRAME),

                                     IMAGE_ICON,::GetSystemMetrics (SM_CXSMICON), ::GetSystemMetrics (SM_CYSMICON), 0);

         pPopup->SetIcon(hIcon, FALSE);

         pPopup->SetWindowText(_T("信息"));

(9)      最后运行界面

 

选择显示将看到屏幕右下角弹出相应的提示信息框。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值