QQ登录

只需一步,快速开始

上位机MFC省略号功能静态控件

[ 复制链接 ]
效果演示
当前程序从CStatic派生一个CStaticFilespec类,用于实现带省略号的长文件名。效果如图

上位机MFC省略号功能静态控件

上位机MFC省略号功能静态控件

点击按钮后,会将编辑框内容复制到文本框中,文本框空间不够显示内容的话,
会用省略号表示。
使用的文件源代码可以在后面复制使用,或直接下载工程项目:
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:CTest.rar 
文件大小:31.94 KB  售价:1金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我



实现过程:
1.新建立对话框工程,如上图添加控件并排版
控件ID:
IDC_EDIT1
IDC_EDIT2
IDC_STATIC1
IDC_STATIC2

2.将例程内两文件STATICFILESPEC.CPP,STATICFILESPEC.H复制与导入工程。
这样工程会多出一集成类CStaticFilespec。这样就可以在主对话框内中使用了。

3.在主对话框中包含类头文件及添加实例
#include "StaticFilespec.h"
        CStaticFilespec   m_wndStaticFileEnd;
        CStaticFilespec   m_wndStaticFilePath;

再初始化控件

        SetDlgItemText(IDC_EDIT1,"GKBC8.COM,pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);");
        SetDlgItemText(IDC_EDIT2,"D:\\Documents and Settings\\Administrator\\桌面\\CTest");

        m_wndStaticFileEnd.SubclassDlgItem (IDC_STATIC1, this);
    m_wndStaticFilePath.SubclassDlgItem (IDC_STATIC2, this);
    m_wndStaticFilePath.SetPath (TRUE);


4.双击按钮控件,添加点击函数。实现控件内容设置,这样编译运行,就可以查看效果了。
  1. void CCTestDlg::OnButton1()
  2. {
  3.         CString   strText;    // text to be displayed
  4.   GetDlgItemText (IDC_EDIT1, strText);
  5.   SetDlgItemText (IDC_STATIC1, strText);
  6.   GetDlgItemText (IDC_EDIT2, strText);
  7.   SetDlgItemText (IDC_STATIC2, strText);
  8. }
复制代码
下面是两文件源代码,可以复制使用
  1. #ifndef _StaticFilespec_h
  2. #define _StaticFilespec_h

  3. #if _MSC_VER >= 1000
  4. #pragma once
  5. #endif // _MSC_VER >= 1000

  6. /////////////////////////////////////////////////////////////////////////////
  7. // CStaticFilespec window

  8. class CStaticFilespec : public CWnd
  9. {
  10. // Construction
  11. public:
  12.         CStaticFilespec
  13.     (DWORD  dwFormat = DT_LEFT | DT_NOPREFIX | DT_VCENTER,
  14.      BOOL   bPathEllipsis = FALSE);

  15. // Attributes
  16. public:

  17. // Operations
  18. public:
  19.   BOOL    IsPath() { return m_bPathEllipsis; }
  20.   void    SetPath (BOOL bPathEllipsis)  { m_bPathEllipsis = bPathEllipsis; }
  21.   DWORD   GetFormat() { return m_dwFormat; }
  22.   void    SetFormat (DWORD dwFormat) { m_dwFormat = dwFormat; }

  23. // Overrides
  24.         // ClassWizard generated virtual function overrides
  25.         //{{AFX_VIRTUAL(CStaticFilespec)
  26.         //}}AFX_VIRTUAL

  27. // Implementation
  28. public:
  29.         virtual ~CStaticFilespec();

  30.         // Generated message map functions
  31. protected:
  32.         //{{AFX_MSG(CStaticFilespec)
  33.         afx_msg void OnPaint();
  34.         afx_msg BOOL OnEraseBkgnd(CDC* pDC);
  35.         afx_msg BOOL OnSetText (WPARAM wParam, LPARAM lParam);
  36.         //}}AFX_MSG
  37.         DECLARE_MESSAGE_MAP()

  38.   BOOL    m_bPathEllipsis;    // flag: draw text as path
  39.   DWORD   m_dwFormat;         // text format
  40. };

  41. /////////////////////////////////////////////////////////////////////////////

  42. //{{AFX_INSERT_LOCATION}}
  43. // Microsoft Developer Studio will insert additional declarations immediately before the previous line.

  44. #endif

  45. // End StaticFilespec.h
复制代码

  1. #include "stdafx.h"
  2. #include "StaticFilespec.h"

  3. #ifdef _DEBUG
  4. #define new DEBUG_NEW
  5. #undef THIS_FILE
  6. static char THIS_FILE[] = __FILE__;
  7. #endif

  8. /////////////////////////////////////////////////////////////////////////////
  9. // CStaticFilespec

  10. CStaticFilespec::CStaticFilespec
  11.   (DWORD  dwFormat      /* = DT_LEFT | DT_NOPREFIX | DT_VCENTER */,
  12.    BOOL   bPathEllipsis /* = FALSE */ )
  13. {
  14.   m_bPathEllipsis = bPathEllipsis;
  15.   m_dwFormat = dwFormat;
  16. }

  17. CStaticFilespec::~CStaticFilespec()
  18. {
  19. }

  20. BEGIN_MESSAGE_MAP(CStaticFilespec, CWnd)
  21.         //{{AFX_MSG_MAP(CStaticFilespec)
  22.   ON_MESSAGE( WM_SETTEXT, OnSetText )
  23.         ON_WM_ERASEBKGND()
  24.         ON_WM_PAINT()
  25.         //}}AFX_MSG_MAP
  26. END_MESSAGE_MAP()

  27. /////////////////////////////////////////////////////////////////////////////
  28. // CStaticFilespec message handlers

  29. BOOL CStaticFilespec::OnEraseBkgnd(CDC* pDC)
  30. {
  31. RECT  rectWnd;    // window rectangle
  32.        
  33.   // Erase background
  34.   GetClientRect (&rectWnd);
  35.   pDC->FillSolidRect (&rectWnd, ::GetSysColor (COLOR_3DFACE));
  36.         return (TRUE);
  37. }

  38. void CStaticFilespec::OnPaint()
  39. {
  40. CPaintDC                dc (this);            // device context for painting
  41. DWORD       dwFormat;             // text format
  42. RECT                                rectWnd;                                                  // window rectangle
  43. CString                        strText;              // window text
  44. CWnd*       pWndParent = NULL;    // parent window

  45.         // Set default font
  46.   pWndParent = GetParent();
  47.   if (pWndParent)
  48.      dc.SelectObject (pWndParent->GetFont());

  49.         // Draw text
  50.   GetWindowText (strText);
  51.   GetClientRect (&rectWnd);
  52.   dwFormat = m_dwFormat | (m_bPathEllipsis ? DT_PATH_ELLIPSIS : DT_END_ELLIPSIS);
  53.   ::DrawTextEx (dc.m_hDC,
  54.                 strText.GetBuffer (0),
  55.                 strText.GetLength(),
  56.                 &rectWnd,
  57.                 dwFormat,
  58.                 NULL);
  59.   strText.ReleaseBuffer();
  60.        
  61.         // Do not call CWnd::OnPaint() for painting messages
  62. }

  63. BOOL CStaticFilespec::OnSetText
  64.   (WPARAM wParam,
  65.    LPARAM lParam)
  66. {
  67.   DefWindowProc (WM_SETTEXT, wParam, lParam);
  68.   Invalidate();
  69.   return (TRUE);
  70. }
  71.    
  72. // End StaticFilespec.cpp
复制代码


回复

使用道具 举报

快速回复 返回列表 客服中心 搜索