请问:
问题1:鼠标点击住图标,可以随意拖动。并且图标下的文字也跟随移动。而且图标下的文字要随时可以更改。
要实现该功能,有什么好的方法。
可以的话,贴代码给我。谢谢!注:移动图标,我可以实现。但是下面的文字要跟随图标一起移动,并且文字要可以更改的话,不知道有什么好的方法。
问题2:串口通信:上位机软件要同时实时监控16台下位机设备。能实时读取数据。出现的问题是:有时候不能实时读取某台设备的数据,因为给每台设备不断发包的时间间隔太长了(每次写数据后:延时60ms,16台设备的话,给一台设备的发包的时间周期约等于1s),导致这个问题。
可我把每次发包后的延时时间改小了,我想压缩这个时间,周期为500ms.就接收不到正常的数据。(每次写数据后:延时60ms,这个时间低于60ms都不能正常接收到数据。)。除了硬件的程序上去改程序外,软件上有方法可以规避该问题吗?
有做过相关485串口开发的朋友,能讲讲相关的方法吗?串口读,写延时相关

解决方案 »

  1.   

    下面这段代码可以实现文字跟随鼠标移动。// CharFollowView.cpp : implementation of the CCharFollowView class
    /////////////////////////////////////////////////////////////////////////////
    // CCharFollowViewIMPLEMENT_DYNCREATE(CCharFollowView, CView)BEGIN_MESSAGE_MAP(CCharFollowView, CView)
    //{{AFX_MSG_MAP(CCharFollowView)
    ON_WM_MOUSEMOVE()
    ON_WM_TIMER()
    //}}AFX_MSG_MAP
    // Standard printing commands
    ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
    ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
    ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
    END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////
    // CCharFollowView construction/destruction
    CString message[10]={"欢","迎","使","用","明","日","科","技","软","件"};
    CCharFollowView::CCharFollowView()
    {
    //message[10]={"欢","迎","使","用","明","日","科","技","软","件"};
    for(int i=0;i<10;i++)
    {
    m_mousepoint[i].x=-50;
    m_mousepoint[i].y=-200;
    }
    }CCharFollowView::~CCharFollowView()
    {
    }
    BOOL CCharFollowView::PreCreateWindow(CREATESTRUCT& cs)
    {
    // TODO: Modify the Window class or styles here by modifying
    //  the CREATESTRUCT cs return CView::PreCreateWindow(cs);
    }/////////////////////////////////////////////////////////////////////////////
    // CCharFollowView drawingvoid CCharFollowView::OnDraw(CDC* pDC)
    {
    CCharFollowDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    for(int i=0;i<10;i++)
    {
    pDC->TextOut(m_mousepoint[i].x,m_mousepoint[i].y,message[i]);
    }
    }/////////////////////////////////////////////////////////////////////////////
    // CCharFollowView printingBOOL CCharFollowView::OnPreparePrinting(CPrintInfo* pInfo)
    {
    // default preparation
    return DoPreparePrinting(pInfo);
    }void CCharFollowView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
    {
    // TODO: add extra initialization before printing
    }void CCharFollowView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
    {
    // TODO: add cleanup after printing
    }/////////////////////////////////////////////////////////////////////////////
    // CCharFollowView diagnostics#ifdef _DEBUG
    void CCharFollowView::AssertValid() const
    {
    CView::AssertValid();
    }void CCharFollowView::Dump(CDumpContext& dc) const
    {
    CView::Dump(dc);
    }CCharFollowDoc* CCharFollowView::GetDocument() // non-debug version is inline
    {
    ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CCharFollowDoc)));
    return (CCharFollowDoc*)m_pDocument;
    }
    #endif //_DEBUG/////////////////////////////////////////////////////////////////////////////
    // CCharFollowView message handlersvoid CCharFollowView::OnMouseMove(UINT nFlags, CPoint point) 
    {
    m_point=point;
    CView::OnMouseMove(nFlags, point);
    }void CCharFollowView::OnInitialUpdate() 
    {
    CView::OnInitialUpdate();
    SetTimer(1,30,NULL);
    }void CCharFollowView::OnTimer(UINT nIDEvent) 
    {
    for(int i=9;i>=1;i--)
    {
    m_mousepoint[i].x=m_mousepoint[i-1].x+18;
    m_mousepoint[i].y=m_mousepoint[i-1].y;
    }
    m_mousepoint[0].x=m_point.x+18;
    m_mousepoint[0].y=m_point.y;
    Invalidate();

    CView::OnTimer(nIDEvent);
    }