欢迎来到Introzo百科
Introzo百科
当前位置:网站首页 > 技术 > vs2010 c 自动提示框_学习VS2010 ---桌面信息提示信息编程

vs2010 c 自动提示框_学习VS2010 ---桌面信息提示信息编程

日期:2023-09-29 08:32

桌面信息提示信息编程

??目的 系统运行时有各种信息提示。桌面右下角直接弹出对话框进行提示。提示对话框可以使用系统信息提示对话框或自定义对话框。迅速的。

(1)????使用VS2010以对话框的形式生成项目文件;

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

(3)??????

(4)??????向每个列表框添加数据

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

动画类型列表框数据包括:无动画;展开;滑动;淡入淡出;

(5)??????自绘图标列表控件

普通的列表控件只能显示字符串。为了在列表中同时显示字符和图标,需要重载列表控件,建立一个以CComboBox为基类的继承类CIconComboBox,其中Load构造函数、CompareItem、DrawItem、MeasureItem等函数实现自定制列表控件的绘制。重点需要重载以下类

a)??????构造函数重载

??????CIconComboBox(CMFCToolBarImages& Icons);通过引用调用位图

CIconComboBox::CIconComboBox(CMFCToolBarImages&Icons) :

????????? m_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);

?????????哈刷?????????? br背景;

??????COLORREF????????? clText;

????????? if(lpDIS->itemState & ODS_SELECTED)?

??????{

???????????????brBackground =GetSysColorBrush (COLOR_HIGHLIGHT);

?????????????????? clText = afxGlobalData.clrTextHilite;

????????? }

?????????否则

??????{

???????????????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, www.introzo.com + 1, nIndex - 1);

?????????????????? m_Icons.EndDrawImage (ds);

????????? }

????????? CString strText;

????????? GetLBText(nIndex, strText);

????????? C矩形 矩形文本 = 矩形项目;

????????? rectText.left += 20;

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

????????? pDC->SetBkMode(透明);

????????? pDC->SetTextColor (clText);

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

?????? pDC->选择对象 (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

??????{

?????????????????? CStringstrText;

??????????????????if(i==0)

????????????????????????strText= _T("无图标");

??????????????????否则

??????????????????{

????????????????????????strText.Format(_T("图标 %d"),i);

?????????????????????}

?????????????????? m_IconCtrl.AddString(strText);

????????? }

??????更新数据(假);? //手动调用自绘控件的DrawItem()函数

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

?? 1)?设置界面风格特征。 VS2010提供了多种界面风格供系统选择

?? ??开关(m_LookStyle)

??????{

?????????案例0:

??????????????????CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS (CMFCVisualManager));

??????????????????打破;

?????????案例一:

CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS (CMFCVisualManagerOfficeXP));

??????????????????打破;

?????????案例2:

??????????????????CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS (CMFCVisualManagerOffice2003));

??????????????????休息;

?????????案例3:

?????????????????? CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS (CMFCVisualManagerVS2005));

??????????????????休息;

?????????案例4:

?????????????????? CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS (CMFCVisualManagerWindows));

??????????????????休息;

?????????案例5:

?????????????????? CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMSNVisualManager));

??????????????????休息;

?????????案例6:

?????????????????? CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_LunaBlue);

?????????????????? CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS (CMFCVisualManagerOffice2007));

??????????????????休息;

?????????案例7:

?????????????????? CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_ObsidianBlack);

?????????????????? CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS (CMFCVisualManagerOffice2007));

??????????????????休息;

?????????案例8:

?????????????????? CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_Silver);

?????????????????? CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS (CMFCVisualManagerOffice2007));

??????????????????休息;

?????????案例9:

?????????????????? CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_Aqua);

?????????????????? CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS (CMFCVisualManagerOffice2007));

??????????????????休息;

????????? }

?? 2)设置参数

CMFCDesktopAlertWnd*pPopup = 新 CMFCDesktopAlertWnd;

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

????????? pPopup->SetAnimationSpeed(m_AnimSpeed);

?????? pPopup->设置透明度((BYTE)m_Trans);

?????? pPopup->SetSmallCaption(m_IsSmallCaption);

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

3)?自绘风格提示界面

??? a) 使用资源创建对话框。请注意,属性设置为 Child,透明属性设置为 TRUE

b) 为对话框创建一个类。基类是 CMFCDesktopAlertDialog

c) 致电

pPopup->创建(这个, IDD_DIALOG1,

???????????????????????????????????????空,

??????????????????????????????????????? C点(-1,-1),

??????????????????????????????????????????RUNTIME_CLASS(CMyPopDlg)) ;

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

?????? ?CMFCDesktopAlertWndInfo 参数;

??????????????????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) 设置图标和标题

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

??????????????? MAKEINTRESOURCE(IDR_MAINFRAME),

????????????????????????????????????IMAGE_ICON,::GetSystemMetrics (SM_CXSMICON),::获取系统指标 (SM_CYSMICON), 0);

?????? pPopup->SetIcon(hIcon, FALSE);

?????? pPopup->SetWindowText(_T("消息"));

(9)???最后运行界面

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

??

首先打开vs2010,点击工具->选项,

打开选项界面后,选择环境->键盘

在“显示命令包含(C):”编辑框中输入“编辑.列表成员”,然后将光标定位在“按快捷键(P)”编辑框中,同时按下键盘“ALT”和“ /”,点击确定

https://www.introzo.com/zh-cn/library/bb384847(v=vs.100).aspx

??

演示代码:

#包括

int main(void)

{

int n;

scanf("%d", &n);

返回0;

}

提示内容:

将上述演示代码放入VS2010及更新版本的VS系列编译器中,编译后会出现

警告 C4996:“scanf”:此函数或变量可能不安全。考虑使用 scanf_s 代替。要禁用弃用,请使用 _CRT_SECURE_NO_WARNINGS。有关详细信息,请参阅在线帮助。

错误 C4996:“scanf”:此函数或变量可能不安全。考虑使用 scanf_s 代替。要禁用弃用,请使用 _CRT_SECURE_NO_WARNINGS。有关详细信息,请参阅在线帮助。

解决方案:

方法 1(推荐)- 更改预处理定义

此方法是临时解决方案,适合老项目,但建议尽快更改为相应的安全功能。具体操作方法如下:

项目->属性->配置属性->C/C++->预处理器->预处理器定义,添加:

_CRT_SECURE_NO_DEPRECATE

以下是VS2010中设置的具体图:

编译,C4996(警告或错误)消失

方法2 - 使用相应的安全功能代替,(将*替换为*_s)

这个方法是一劳永逸的办法,但是比较困难,需要大量的改动。很多老项目都会有较大的改动量。

方法三-在头文件前添加代码

1。在使用头文件,即源文件的第一行(必须放在.c文件的第一行。)之前,添加一行代码

#define _CRT_SECURE_NO_DEPRECATE

演示程序如下:

#define _CRT_SECURE_NO_DEPRECATE

#包括

int main(void)

{

int n;

scanf("%d", &n);

返回0;

}

编译,C4996(警告或错误)消失

关灯