Как синхронизировать курсор и оси для двух областей диаграммы в приложении MFC

#c #mfc #onmousemove

Вопрос:

У меня есть проект MFC, в котором есть две диаграммы в диалоговом окне.

Я пытаюсь синхронизировать движение курсора между этими двумя диаграммами. Поэтому, когда я перемещаю курсор на одну диаграмму, вторая диаграмма отслеживает это движение мыши, и ее курсор следует по тому же пути. Я использую пользовательский курсор. Не системная стрелка. То же самое и с аксисом. Как только я обновлю ось для одного из них, вторая должна быть обновлена таким же образом. Пока что не везет.

Так что очевидно, что OnMouseMove должен быть как-то использован здесь. Настройки координат и осей с одной диаграммы должны быть перенесены на вторую после их изменения.

Не смог найти ни одного хорошего примера по аналогичному случаю.

Чтобы добавить диаграмму в диалоговое окно, я обновил CMyDlg rc с помощью «пользовательского элемента управления», установил поле класса в «CMyChart», идентификатор в «IDC_CHART_TOP». Сделал то же самое для нижней диаграммы.

пожалуйста, найдите какую-нибудь упрощенную версию моего кода.

 //// CMyDlg.cpp //// void CMyDlg::DoDataExchange(CDataExchange* pDX) {  CDialog::DoDataExchange(pDX);  DDX_Control(pDX, IDC_CHART_TOP, m_ChartTop);  DDX_Control(pDX, IDC_CHART_BOTTOM, m_ChartBottom); } BEGIN_MESSAGE_MAP(CMyDlg, CDialog) END_MESSAGE_MAP() void CMyDlg::plotDataTop() {  // init and plot m_ChartTop } void CMyDlg::plotDataBottom() {  // init and plot m_ChartBottom } BOOL CMyDlg::OnInitDialog() {  CDialog::OnInitDialog();  plotDataTop();  plotDataBottom();  return TRUE; }  //// MyDlg.h //// class CMyDlg : public CDialog { public:  CMyDlg(CWnd* pParent = nullptr);  virtual ~CMyDlg();  #ifdef AFX_DESIGN_TIME  enum { IDD = DLG_MYDLG }; #endif  protected:  virtual void DoDataExchange(CDataExchange* pDX);  virtual BOOL OnInitDialog();  DECLARE_MESSAGE_MAP()  CMyChart m_ChartTop;  CMyChart m_ChartBottom; public:  // plot data  void plotDataTop();  void plotDataBottom(); };  

Комментарии:

1. Извините, но не совсем понятно, что именно вы хотите сделать (обновлять оси одновременно?), т. Е. Какие «обновления» вы хотите. Неясно даже, о чем вы просите, например, как создать пользовательский курсор, как использовать OnMouseMove() событие и т. Д. Вы также не опубликовали то, что делаете в своей OnMouseMove() реализации. И, наконец, я не думаю, что вы можете найти пример кода в i-net об этом одновременном обновлении диаграмм, это очень особенное. Лучше опубликуйте свою реализацию до сих пор (с комментариями, пожалуйста), и пусть участники форума рассмотрят ее и внесут предложения.

2. Спасибо вам за ваши отзывы. Я обновил описание. Я хочу, чтобы два курсора синхронизировали свое поведение для двух диаграмм. когда я перемещаю курсор влево над одним диаграммой, то же самое движение должно быть сделано одновременно для курсора второго графика. как только ось будет обновлена для одного символа, те же обновления должны быть применены для второго.

3. Я считаю, что та же техника будет использоваться, если мы будем заполнять текстовые поля одновременно одним и тем же текстом. мы вводим один, и тот же текст появляется во втором текстовом поле.

4. Одновременно у вас может быть только один системный курсор. Вы используете какую-то пользовательскую диаграмму, возможно, у нее есть функция «похожая на курсор». Посмотрите, можете ли вы упростить свой вопрос таким образом, чтобы он касался стандартных функций MFC.

5. Спасибо вам, но я думаю, что мой код работает сейчас, просто отправил wm_mouseMove в родительский, оттуда я могу обновить вторую диаграмму с новым положением курсора и осями. Я не использую системный курсор. существует пользовательский курсор, состоящий из двух строк