Понедельник, Май 25, 2020

Cursor

#pragma once
#include "serialport.h"
#include "afxext.h"
#include "atltypes.h"


// Frame frame

class Frame : public CFrameWnd
{
    DECLARE_DYNCREATE(Frame)
public:
    Frame();           // protected constructor used by dynamic creation
    virtual ~Frame();

protected:
    DECLARE_MESSAGE_MAP()
public:
    CSerialPort port;
    afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
private:
    CStatusBar m_wndStatusBar;
    CMenu m_wndMenu;
public:
    afx_msg void OnFileExit();
    afx_msg void OnPaint();
public:
    afx_msg void OnKillFocus(CWnd* pNewWnd);
    afx_msg void OnSetFocus(CWnd* pOldWnd);
    afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
protected:
    int x;
    int y;
    CString data;
    boolean CaretCreated;
    CPoint CaretPosition;
public:
    afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);
};


// Frame.cpp : implementation file
//

#include "stdafx.h"
#include "Frame.h"
#include "resource.h"
#include "serialport.h"

// Frame

IMPLEMENT_DYNCREATE(Frame, CFrameWnd)

Frame::Frame()
:  x(0)
, y(0)
, data(_T(""))
{
    Create(NULL,"FT232",WS_OVERLAPPEDWINDOW,rectDefault,
        NULL,NULL);    // Создать окно программы
    CaretCreated=false;
}

Frame::~Frame()
{
}


BEGIN_MESSAGE_MAP(Frame, CFrameWnd)
    ON_WM_CREATE()
    ON_COMMAND(ID_FILE_EXIT, &Frame::OnFileExit)
    ON_WM_PAINT()
    ON_WM_KILLFOCUS()
    ON_WM_SETFOCUS()
    ON_WM_LBUTTONDOWN()
    ON_WM_CHAR()
END_MESSAGE_MAP()


// Frame message handlers


int Frame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
        return -1;

    m_wndStatusBar.Create(this);
    m_wndMenu.LoadMenu(IDR_MAIN_MENU);    // Загрузить меню из файла ресурса
    SetMenu(&m_wndMenu);                // Установить меню
    return 0;
}


void Frame::OnFileExit()
{
    DestroyWindow();                   // Уничтожить окно
}


void Frame::OnPaint()
{
    CPaintDC dc(this); // device context for painting
    if(!CaretCreated)
    {
        TEXTMETRIC textmetric;
        dc.GetTextMetrics(&textmetric);
        CreateSolidCaret(textmetric.tmAveCharWidth,textmetric.tmHeight);
        CaretPosition.x=CaretPosition.y=0;
        SetCaretPos(CaretPosition);
        CaretCreated=true;
    }
    
    //CString str="AB CD  00 00  1F DE 11 34 00 1A 63 EF";
    CRect rect;
    GetWindowRect(rect);
    dc.DrawTextEx(data,CRect(x,y,rect.right,rect.bottom),DT_TOP|DT_WORD_ELLIPSIS,NULL);
    HideCaret();
    CSize size=dc.GetTextExtent(data);
    CaretPosition.x=x+size.cx;
    CaretPosition.y=y;
    SetCaretPos(CaretPosition);
    ShowCaret();
}


void Frame::OnKillFocus(CWnd* pNewWnd)
{
    CFrameWnd::OnKillFocus(pNewWnd);
    HideCaret();
    // TODO: Add your message handler code here
}


void Frame::OnSetFocus(CWnd* pOldWnd)
{
    CFrameWnd::OnSetFocus(pOldWnd);
    ShowCaret();
    // TODO: Add your message handler code here
}


void Frame::OnLButtonDown(UINT nFlags, CPoint point)
{
    // TODO: Add your message handler code here and/or call default
    x=point.x;
    y=point.y;
    data.Empty();
    Invalidate();
    CFrameWnd::OnLButtonDown(nFlags, point);
}


void Frame::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
    // TODO: Add your message handler code here and/or call default
    data+=(char)nChar;
    Invalidate();
    CFrameWnd::OnChar(nChar, nRepCnt, nFlags);
}


Back to Top