lnhv013710 2019-08-02 00:11 采纳率: 96.7%
浏览 228
已采纳

mfc vs2010 listctl如何让新加入的行闪烁3秒(半秒高亮半秒恢复),并取消其他行的高亮显示。

mfc vs2010 listctl如何让新加入的行闪烁3秒(半秒高亮半秒恢复),并取消其他行的高亮显示。

如上,求代码,谢谢。

  • 写回答

1条回答 默认 最新

  • threenewbee 2019-08-02 09:48
    关注

    完整代码下载:https://download.csdn.net/download/caozhy/11461763

    图片说明

    有一个小bug,修改如下

    if (str != "")
    {
        if (newid != -1) plist->SetItemState(newid, 0, -1); //加上这一行,把之前选择的取消选择
        newid = m_list.InsertItem(0, str);
        repeat = 0;
    }
    
    
    // Q771320Dlg.cpp : implementation file
    //
    
    #include "stdafx.h"
    #include "Q771320.h"
    #include "Q771320Dlg.h"
    #include "afxdialogex.h"
    
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #endif
    
    
    // CAboutDlg dialog used for App About
    
    class CAboutDlg : public CDialogEx
    {
    public:
        CAboutDlg();
    
    // Dialog Data
        enum { IDD = IDD_ABOUTBOX };
    
        protected:
        virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
    
    // Implementation
    protected:
        DECLARE_MESSAGE_MAP()
    };
    
    CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD)
    {
    }
    
    void CAboutDlg::DoDataExchange(CDataExchange* pDX)
    {
        CDialogEx::DoDataExchange(pDX);
    }
    
    BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
    END_MESSAGE_MAP()
    
    
    // CQ771320Dlg dialog
    
    
    
    
    CQ771320Dlg::CQ771320Dlg(CWnd* pParent /*=NULL*/)
        : CDialogEx(CQ771320Dlg::IDD, pParent)
    {
        m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    }
    
    void CQ771320Dlg::DoDataExchange(CDataExchange* pDX)
    {
        CDialogEx::DoDataExchange(pDX);
        DDX_Control(pDX, IDC_EDIT1, m_edit);
        DDX_Control(pDX, IDC_LIST1, m_list);
    }
    
    BEGIN_MESSAGE_MAP(CQ771320Dlg, CDialogEx)
        ON_WM_SYSCOMMAND()
        ON_WM_PAINT()
        ON_WM_QUERYDRAGICON()
        ON_BN_CLICKED(IDC_BUTTON1, &CQ771320Dlg::OnBnClickedButton1)
        ON_WM_CLOSE()
    END_MESSAGE_MAP()
    
    
    // CQ771320Dlg message handlers
    
    
    int newid;
    int repeat;
    CListCtrl * plist;
    void CALLBACK TimerProc(HWND hWnd, UINT nMsg, UINT_PTR nTimerid, DWORD dwTime)
    {
        if (newid != -1 && repeat != -1)
        {
            if (repeat % 2 == 0)
            {       
                plist->SetFocus();
                plist->SetItemState(newid, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED);
                plist->EnsureVisible(newid, FALSE);
            }
            else
            {
                plist->SetFocus();
                plist->SetItemState(newid, 0, -1);
                plist->EnsureVisible(newid, FALSE);
            }
            repeat++;
            if (repeat >= 6)
            {
                repeat = -1;
                newid = -1;
            }
        }
        return;
    }
    
    BOOL CQ771320Dlg::OnInitDialog()
    {
        CDialogEx::OnInitDialog();
    
        // Add "About..." menu item to system menu.
    
        // IDM_ABOUTBOX must be in the system command range.
        ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
        ASSERT(IDM_ABOUTBOX < 0xF000);
    
        CMenu* pSysMenu = GetSystemMenu(FALSE);
        if (pSysMenu != NULL)
        {
            BOOL bNameValid;
            CString strAboutMenu;
            bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
            ASSERT(bNameValid);
            if (!strAboutMenu.IsEmpty())
            {
                pSysMenu->AppendMenu(MF_SEPARATOR);
                pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
            }
        }
    
        // Set the icon for this dialog.  The framework does this automatically
        //  when the application's main window is not a dialog
        SetIcon(m_hIcon, TRUE);         // Set big icon
        SetIcon(m_hIcon, FALSE);        // Set small icon
    
        // TODO: Add extra initialization here
    
        m_list.InsertColumn(0, _T("Name"), LVCFMT_LEFT, 100);
        newid = -1;
        repeat = 0;
        SetTimer(100, 500, TimerProc);
        plist = &(this->m_list);
        return TRUE;  // return TRUE  unless you set the focus to a control
    }
    
    void CQ771320Dlg::OnSysCommand(UINT nID, LPARAM lParam)
    {
        if ((nID & 0xFFF0) == IDM_ABOUTBOX)
        {
            CAboutDlg dlgAbout;
            dlgAbout.DoModal();
        }
        else
        {
            CDialogEx::OnSysCommand(nID, lParam);
        }
    }
    
    // If you add a minimize button to your dialog, you will need the code below
    //  to draw the icon.  For MFC applications using the document/view model,
    //  this is automatically done for you by the framework.
    
    void CQ771320Dlg::OnPaint()
    {
        if (IsIconic())
        {
            CPaintDC dc(this); // device context for painting
    
            SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
    
            // Center icon in client rectangle
            int cxIcon = GetSystemMetrics(SM_CXICON);
            int cyIcon = GetSystemMetrics(SM_CYICON);
            CRect rect;
            GetClientRect(&rect);
            int x = (rect.Width() - cxIcon + 1) / 2;
            int y = (rect.Height() - cyIcon + 1) / 2;
    
            // Draw the icon
            dc.DrawIcon(x, y, m_hIcon);
        }
        else
        {
            CDialogEx::OnPaint();
        }
    }
    
    // The system calls this function to obtain the cursor to display while the user drags
    //  the minimized window.
    HCURSOR CQ771320Dlg::OnQueryDragIcon()
    {
        return static_cast<HCURSOR>(m_hIcon);
    }
    
    
    
    void CQ771320Dlg::OnBnClickedButton1()
    {
        // TODO: Add your control notification handler code here
        CString str;
        m_edit.GetWindowText(str);
        m_edit.SetWindowText(_T(""));
        if (str != "")
        {
            newid = m_list.InsertItem(0, str);
            repeat = 0;
        }
    }
    
    
    void CQ771320Dlg::OnClose()
    {
        // TODO: Add your message handler code here and/or call default
        KillTimer(100);
        CDialogEx::OnClose();
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试,帮帮忙吧
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建