MFC友好信息提示类
2015-09-01 16:12
267 查看
如需转载请标明出处:http://blog.csdn.net/itas109
QQ技术交流群:129518033
本文实现了类似QQ弹出窗口的功能,并封装成类。
主要功能:
1、动画弹出,可以设置类型
2、弹出信息后自动消失。
3、可以设置字体大小和颜色。
4、设置窗口停留时间和显示类型。
5、不占用主窗口的焦点。
整个工程下载地址: http://download.csdn.net/detail/itas109/9070741
实现效果如下:
![](http://img.blog.csdn.net/20150901160824338?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
弹出窗类的代码如下:
ShowInfoDlg.h
ShowInfoDlg.cpp
如需转载请标明出处:http://blog.csdn.net/itas109
QQ技术交流群:129518033
QQ技术交流群:129518033
本文实现了类似QQ弹出窗口的功能,并封装成类。
主要功能:
1、动画弹出,可以设置类型
2、弹出信息后自动消失。
3、可以设置字体大小和颜色。
4、设置窗口停留时间和显示类型。
5、不占用主窗口的焦点。
整个工程下载地址: http://download.csdn.net/detail/itas109/9070741
实现效果如下:
弹出窗类的代码如下:
ShowInfoDlg.h
<span style="font-size:18px;">/* ** FILENAME ShowInfoDlg.h ** ** PURPOSE 这个类可以友好的弹出提示窗口,并且不占用主窗口的焦点。 ** 提示信息字体的大小和颜色等可以设置 ** 默认弹出框在桌面可用区域的右下角 ** ** ** CREATION DATE 2015-09-01 ** LAST MODIFICATION 2015-09-01 ** ** AUTHOR itas109 ** Blog blog.csdn.net/itas109 ** */ #if !defined(AFX_SHOWINFODLG_H__273027B9_8244_4624_BC2B_44491EA67BE8__INCLUDED_) #define AFX_SHOWINFODLG_H__273027B9_8244_4624_BC2B_44491EA67BE8__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 // ShowInfoDlg.h : header file // #include "resource.h" //IDD_DIALOG_SHOWINFO的头文件 //定义动画类型 #define AW_CENTER 0x00000010 // 若使用了AW_HIDE标志,则使窗口向内重叠,即收缩窗口;若未使用AW_HIDE标志,则使窗口向外扩展,即展开窗口 #define AW_HOR_POSITIVE 0x00000001 // 自左向右显示窗口。该标志可以在滚动动画和滑动动画中使用。当使用AW_CENTER标志时,该标志将被忽略 #define AW_HOR_NEGATIVE 0x00000002 #define AW_VER_POSITIVE 0x00000004 // 自顶向下显示窗口。该标志可以在滚动动画和滑动动画中使用。当使用AW_CENTER标志时,该标志将被忽略 #define AW_VER_NEGATIVE 0x00000008 // 自下向上显示窗口。该标志可以在滚动动画和滑动动画中使用。当使用AW_CENTER标志时,该标志将被忽略 #define AW_HIDE 0x00010000 // 隐藏窗口,缺省则显示窗口 #define AW_ACTIVATE 0x00020000 // 激活窗口。在使用了AW_HIDE标志后不能使用这个标志 #define AW_SLIDE 0x00040000 // 使用滑动类型。缺省则为滚动动画类型。当使用AW_CENTER标志时,这个标志就被忽略 #define AW_BLEND 0x00080000 // 实现淡出效果。只有当hWnd为顶层窗口的时候才可以使用此标志 ///////////////////////////////////////////////////////////////////////////// // ShowInfoDlg dialog class ShowInfoDlg : public CDialog { // Construction public: void ShowDlg(CString str, int showType=1, int showTimeMS = 500); ShowInfoDlg(CWnd* pParent = NULL); // standard constructor // Dialog Data //{{AFX_DATA(ShowInfoDlg) //如果DLG改变,此处修改为需要显示的DLG的IDD GX 20150826 enum { IDD = IDD_DIALOG_SHOWINFO }; // NOTE: the ClassWizard will add data members here //}}AFX_DATA // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(ShowInfoDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: // Generated message map functions //{{AFX_MSG(ShowInfoDlg) afx_msg void OnTimer(UINT nIDEvent); virtual BOOL OnInitDialog(); afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor); //}}AFX_MSG DECLARE_MESSAGE_MAP() private: CBrush* m_Brush; CFont m_font; void ShowType(int nType = 1); }; //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ will insert additional declarations immediately before the previous line. #endif // !defined(AFX_SHOWINFODLG_H__273027B9_8244_4624_BC2B_44491EA67BE8__INCLUDED_) </span>
ShowInfoDlg.cpp
<span style="font-size:18px;">/* ** FILENAME ShowInfoDlg.h ** ** PURPOSE 这个类可以友好的弹出提示窗口,并且不占用主窗口的焦点。 ** 提示信息字体的大小和颜色等可以设置 ** 默认弹出框在桌面可用区域的右下角 ** ** ** CREATION DATE 2015-09-01 ** LAST MODIFICATION 2015-09-01 ** ** AUTHOR itas109 ** Blog blog.csdn.net/itas109 ** */ // ShowInfoDlg.cpp : implementation file // #include "stdafx.h" #include "ShowInfoDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // ShowInfoDlg dialog ShowInfoDlg::ShowInfoDlg(CWnd* pParent /*=NULL*/) : CDialog(ShowInfoDlg::IDD, pParent) { //{{AFX_DATA_INIT(ShowInfoDlg) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT } void ShowInfoDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(ShowInfoDlg) // NOTE: the ClassWizard will add DDX and DDV calls here //}}AFX_DATA_MAP } BOOL ShowInfoDlg::OnInitDialog() { CDialog::OnInitDialog(); // TODO: Add extra initialization here // 获得桌面大小 CRect rectWorkArea; SystemParametersInfo(SPI_GETWORKAREA, 0, &rectWorkArea, SPIF_SENDCHANGE); // 获得对话框大小 CRect rectDlg; GetWindowRect(&rectDlg); int nW = rectDlg.Width(); int nH = rectDlg.Height(); // CWnd::SetWindowPos See from MSDN //工作区域右下角显示 //SWP_NOACTIVATE 窗口置顶不激活 SetWindowPos(&CWnd::wndTopMost, rectWorkArea.right-nW-5, rectWorkArea.bottom-nH-5, nW, nH, SWP_NOACTIVATE); // 窗口置顶不激活 //字体及大小 m_font.CreatePointFont(100,"宋体"); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } BEGIN_MESSAGE_MAP(ShowInfoDlg, CDialog) //{{AFX_MSG_MAP(ShowInfoDlg) ON_WM_TIMER() ON_WM_CTLCOLOR() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // ShowInfoDlg message handlers void ShowInfoDlg::OnTimer(UINT nIDEvent) { // TODO: Add your message handler code here and/or call default if (nIDEvent == 1) { /* HINSTANCE hInst = LoadLibrary("User32.DLL"); typedef BOOL(WINAPI MYFUNC(HWND, DWORD, DWORD)); // 声明函数 MYFUNC* AnimateWindow; AnimateWindow = (MYFUNC*)::GetProcAddress(hInst, "AnimateWindow"); AnimateWindow(this->GetSafeHwnd(), 200, AW_HIDE | AW_BLEND); FreeLibrary(hInst); */ CDialog::OnOK(); //这种方式会受到时间的影响 因为定时器有延时 //CMainFrame *pMainFrame = (CMainFrame *)AfxGetApp()->m_pMainWnd;//当前程序的主窗口的指针 //::SetActiveWindow(pMainFrame->m_hWnd);//激活主窗口程序,把焦点还给主窗口 KillTimer(1); } CDialog::OnTimer(nIDEvent); } void ShowInfoDlg::ShowDlg(CString str, int showType/* =1 */, int showTimeMS /* = 500 */) { //只改变字体大小和字体类型 //this->GetDlgItem(IDC_STATIC_TIP)->SetFont(&m_font); //窗体文字 this->GetDlgItem(IDC_STATIC_TIP)->SetWindowText(_T(str)); ShowType(showType); SetTimer(1, showTimeMS, NULL); } void ShowInfoDlg::ShowType(int nType /* = 1 */) { if (1 == nType) { // 淡入、淡出 // CenterWindow(); // 对话框处于中心位置 HINSTANCE hInst = LoadLibrary("User32.DLL"); // 导入动态链接库User32.DLL typedef BOOL(WINAPI MYFUNC(HWND hwnd, DWORD dwTime, DWORD dwFlags));//dwTime动画持续的时间(标准200ms) // 声明函数 MYFUNC* AnimateWindow; AnimateWindow = (MYFUNC*)::GetProcAddress(hInst, "AnimateWindow"); AnimateWindow(this->m_hWnd, 300, AW_BLEND); FreeLibrary(hInst); } else if (2 == nType) { // 从下向上 HINSTANCE hInst = LoadLibrary("user32.dll"); typedef UINT(WINAPI* PMYFUNC)(HWND hwnd, DWORD dwTime,DWORD dwFlags); // 声明函数 PMYFUNC pAnimateWindow; if(NULL != hInst) { pAnimateWindow = (PMYFUNC)::GetProcAddress(hInst, "AnimateWindow"); pAnimateWindow(GetSafeHwnd(), 300, AW_SLIDE | AW_VER_NEGATIVE); FreeLibrary(hInst); } } //Sleep会使CPU暂停 尽量不使用该函数 //DLG显示时间 //Sleep(showTimeMS); } HBRUSH ShowInfoDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); // TODO: Change any attributes of the DC here if (pWnd->GetDlgCtrlID() == IDC_STATIC_TIP) { //pDC->SetBkMode(TRANSPARENT);//字体背景透明 pDC->SetTextColor(RGB(255,0,0));//字体颜色 pDC->SelectObject(&m_font);//字体大小 } // TODO: Return a different brush if the default is not desired return hbr; } </span>
如需转载请标明出处:http://blog.csdn.net/itas109
QQ技术交流群:129518033
相关文章推荐
- DataView 对日期的筛选
- 从Office到Cortana,微软巨头在想什么?
- mysql错误: waiting for table metadata lock
- putty配置
- cocos2dx Auto-batching的使用
- LeetCode Distinct Subsequences DP
- 大四之前的最后思考
- 广播 注册和xml形式
- 汇编推荐书籍
- Ing_Redis
- 使用nginx-http-concat优化网站响应
- Ugly Number I 和 II LeetCode
- Android入门:广播发送者与广播接收者(同步广播和有序广播)
- UILabel圆角、边框、宽度自适应
- Linux RHCS 基础维护命令
- Windows批处理:自动开关程序
- iOS-Quartz2D绘图的基础用法总结
- 《播客》项目总结——项目管理方面
- phpStorm for mac 7.1.4注册码
- 进程管理