Важная информация
Показано с 1 по 2 из 2

Тема: Проблема с программным размещением компонента на странице

  1. #1 Проблема с программным размещением компонента на странице 
    Новичок
    Регистрация
    12.10.2016
    Сообщений
    1
    Сказал(а) спасибо
    0
    Поблагодарили 0 раз(а) в 0 сообщениях
    Я создал диалоговое приложение на Visual C++ 2012 с использованием MFC.

    В этом приложении на диалоговом окне находится CTabCtrl, на который повешено несколько страниц. На одной из этих страниц я программно поместил прокручиваемый компонент (который я взял с [Ссылки могут видеть только зарегистрированные пользователи. ] ).
    На этом компоненте находятся чекбоксы и текстовые поля. Этот компонент нормально прокручивается, на нём нормально отрабатываются нажатия чекбоксов и связанное с этим включение/отключение (энейбление/дизейбление) этих текстовых полей.

    Но у меня почему-то при перемещении окна приложения этот вставленный компонент не перемещается вместе с этим окном, а остаётся на том же месте экрана, куда он был программно помещён.

    Как сделать так, чтобы этот программное размещаемый компонент перемещался вместе с окном приложения при перемещении этого окна?

    Вот код:

    C++ Code:
    1. class CPage2 : public CDialog
    2. {
    3.     DECLARE_DYNAMIC(CPage2)
    4.  
    5. public:
    6.     CPage2(CWnd* pParent = NULL);   // стандартный конструктор
    7.     virtual ~CPage2();
    8.  
    9. // Данные диалогового окна
    10.     enum { IDD = IDD_DIALOG2 };
    11.  
    12. protected:
    13.     virtual void DoDataExchange(CDataExchange* pDX);    // поддержка DDX/DDV
    14.     DECLARE_MESSAGE_MAP()
    15. public:
    16.     CScrollDialog1* m_pScrollDialog1;
    17.         // прочие компоненты и функции;
    18. };
    19.  
    20. void CPage2:<img src="http://iforum.pro/images/smilies/biggrin.png" border="0" alt="" title="Big Grin" class="inlineimg" />oDataExchange(CDataExchange* pDX)
    21. {
    22.     CDialog:<img src="http://iforum.pro/images/smilies/biggrin.png" border="0" alt="" title="Big Grin" class="inlineimg" />oDataExchange(pDX);
    23.     // соответствия между компонентами на странице CPage2 и переменными на этой странице,
    24.         // переменная m_pScrollDialog сюда не вставлена;
    25. }
    26.  
    27. BOOL COrbitaPage::OnInitDialog()
    28. {
    29.    CPropertyPage::OnInitDialog();
    30.  
    31.    CRect cr;  
    32.    CPage1 *pPage1;
    33.    CPage2 *pPage2;
    34.    CPage3 *pPage3;
    35.    CPage4 *pPage4;
    36.  
    37.    CClientDC  dc(this);
    38.    m_IDC_TAB1.startbc = dc.GetDCPenColor();
    39.    TC_ITEM  TabItem;
    40.    TabItem.mask = TCIF_TEXT;
    41.    TabItem.pszText = "Исходные НУ";
    42.    m_IDC_TAB1.InsertItem(0,&TabItem);
    43.    TabItem.pszText = "Модель движения";
    44.    m_IDC_TAB1.InsertItem(1,&TabItem);
    45.    TabItem.pszText = "Измерения";
    46.    m_IDC_TAB1.InsertItem(2,&TabItem);
    47.    TabItem.pszText = "Краевая задача";
    48.    m_IDC_TAB1.InsertItem(3,&TabItem);
    49.   
    50.    CSize  csize;
    51.    csize.SetSize(100,28);
    52.    m_IDC_TAB1.SetItemSize(csize);
    53.  
    54.    LOGFONT  lf2;
    55.    CFont  font4;
    56.    memset(&lf2,0,sizeof(LOGFONT));
    57.    strcpy(lf2.lfFaceName,"Ms Shell Dlg");
    58.    lf2.lfHeight = 12;
    59.    lf2.lfWeight = 700;
    60.  
    61.    pPage2 = new CPage2(this);
    62.    TabItem.mask = TCIF_PARAM;
    63.    TabItem.lParam = (LPARAM)pPage2;
    64.    m_IDC_TAB1.SetItem(0,&TabItem);
    65.    VERIFY(pPage2->Create(CPage2::IDD,&m_IDC_TAB1));
    66.    pPage2->SetWindowPos(NULL,10,30,0,0,SWP_NOSIZE|SWP_NOZORDER);
    67.    pPage2->ShowWindow(SW_SHOW);
    68.    pPage2->m_pScrollDialog1 = new CScrollDialog1(pPage2);
    69.    pPage2->m_pScrollDialog1->Create(IDD_SCROLLDIALOG1,pPage2);
    70.    CRect  rc;
    71.    rc.left = 530;
    72.    rc.top = 660;
    73.    rc.right = 780;
    74.    rc.bottom = 780;
    75.    pPage2->m_pScrollDialog1->MoveWindow(rc);
    76.    pPage2->m_pScrollDialog1->EnableWindow(0);
    77.    pPage2->m_pScrollDialog1->ShowWindow(SW_SHOW);
    78.    // работа с другими компонентами на странице CPage2;
    79.   
    80.    // работа со страницами CPage1*, CPage3*, CPage4* ;
    81. }



    Файл ScrollDialog1.h :

    C++ Code:
    1. #ifndef SCROLLDIALOG1_H
    2. #define SCROLLDIALOG1_H
    3.  
    4. #include "VertScrollDialog.h"
    5. #include "afxwin.h"
    6.  
    7. //#pragma once
    8.  
    9. // диалоговое окно CScrollDialog1
    10.  
    11. //class CScrollDialog1 : public CDialog
    12. class CScrollDialog1 : public CVertScrollDialog
    13. {
    14.     DECLARE_DYNAMIC(CScrollDialog1)
    15.  
    16. public:
    17.     CScrollDialog1(CWnd* pParent = NULL);   // стандартный конструктор
    18.     virtual ~CScrollDialog1();
    19.     //void  EndDrag();
    20.  
    21.     //CRect  m_rcOriginalRect;
    22.     //BOOL  m_bDragging;
    23.     //CPoint  m_ptDragPoint;
    24.     //int  m_nScrollPos;
    25.     //int  m_nCurHeight;
    26. // Данные диалогового окна
    27.     enum { IDD = IDD_SCROLLDIALOG1 };
    28.  
    29. protected:
    30.     virtual void DoDataExchange(CDataExchange* pDX);    // поддержка DDX/DDV
    31.     /* virtual BOOL OnInitDialog();
    32.     afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
    33.     afx_msg void OnSize(UINT nType, int cx, int cy);
    34.     afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);
    35.     //virtual void OnCancel();
    36.     //virtual void OnOK();
    37.     afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
    38.     afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
    39.     afx_msg void OnMouseMove(UINT nFlags, CPoint point);
    40.     afx_msg void OnKillFocus(CWnd* pNewWnd);
    41.     DECLARE_MESSAGE_MAP() */
    42.     //DECLARE_MESSAGE_MAP()
    43. public:
    44.     //afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
    45.     CButton m_IDC_CHECK5;
    46.     CEdit m_IDC_EDIT16;
    47.     CEdit m_IDC_EDIT13;
    48.     CEdit m_IDC_EDIT14;
    49.     CEdit m_IDC_EDIT17;
    50.     DECLARE_MESSAGE_MAP()
    51.     afx_msg void OnBnClickedCheck5();
    52. };
    53.  
    54. #endif



    В файле ScrollDialog1.cpp :

    C++ Code:
    1. IMPLEMENT_DYNAMIC(CScrollDialog1, CDialog)
    2.  
    3. CScrollDialog1::CScrollDialog1(CWnd* pParent /*=NULL*/)
    4.     : CVertScrollDialog(CScrollDialog1::IDD, pParent)
    5. {
    6.     //m_bDragging = FALSE;
    7.     //Create(CScrollDialog1::IDD,pParent);
    8.     /* RECT  rc;
    9.     rc.left = 7;
    10.     rc.top = 2;
    11.     rc.right = 99;
    12.     rc.bottom = 10;
    13.     m_IDC_CHECK5.Create(" импульс коррекции Ak1",BS_AUTOCHECKBOX|WS_TABSTOP,rc,this,IDC_CHECK5);
    14.     m_IDC_CHECK5.SetCheck(0);
    15.     rc.left = 58;
    16.     rc.top = 31;
    17.     rc.right = 76;
    18.     rc.bottom = 14;
    19.     m_IDC_EDIT13.Create(ES_AUTOHSCROLL,rc,this,IDC_EDIT13);
    20.     rc.left = 58;
    21.     rc.top = 44;
    22.     rc.right = 75;
    23.     rc.bottom = 14;
    24.     m_IDC_EDIT14.Create(ES_AUTOHSCROLL,rc,this,IDC_EDIT14);
    25.     rc.left = 32;
    26.     rc.top = 15;
    27.     rc.right = 102;
    28.     rc.bottom = 14;
    29.     m_IDC_EDIT16.Create(ES_AUTOHSCROLL,rc,this,IDC_EDIT16);
    30.     rc.left = 58;
    31.     rc.top = 56;
    32.     rc.right = 75;
    33.     rc.bottom = 14;
    34.     m_IDC_EDIT17.Create(ES_AUTOHSCROLL,rc,this,IDC_EDIT17); */
    35. }
    36.  
    37. CScrollDialog1::~CScrollDialog1()
    38. {
    39. }
    40.  
    41. void CScrollDialog1:<img src="http://iforum.pro/images/smilies/biggrin.png" border="0" alt="" title="Big Grin" class="inlineimg" />oDataExchange(CDataExchange* pDX)
    42. {
    43.     CVertScrollDialog:<img src="http://iforum.pro/images/smilies/biggrin.png" border="0" alt="" title="Big Grin" class="inlineimg" />oDataExchange(pDX);
    44.  
    45.     DDX_Control(pDX, IDC_CHECK5, m_IDC_CHECK5);
    46.     DDX_Control(pDX, IDC_EDIT16, m_IDC_EDIT16);
    47.     DDX_Control(pDX, IDC_EDIT13, m_IDC_EDIT13);
    48.     DDX_Control(pDX, IDC_EDIT14, m_IDC_EDIT14);
    49.     DDX_Control(pDX, IDC_EDIT17, m_IDC_EDIT17);
    50. }
    51.  
    52. BEGIN_MESSAGE_MAP(CScrollDialog1, CVertScrollDialog)
    53. ON_BN_CLICKED(IDC_CHECK5, &CScrollDialog1::OnBnClickedCheck5)
    54. END_MESSAGE_MAP()
    55.  
    56.  
    57. void CScrollDialog1::OnBnClickedCheck5()
    58. {
    59.     // TODO: добавьте свой код обработчика уведомлений
    60.     //if (m_IDC_CHECK5.GetCheck()==1)
    61.     int check;
    62.  
    63.     /* this->UpdateData();
    64.     this->UpdateWindow();
    65.     this->UpdateDialogControls(this,FALSE); */
    66.     check = m_IDC_CHECK5.GetCheck();
    67.     if (check==BST_CHECKED)
    68.     {
    69.         m_IDC_EDIT13.EnableWindow(1);
    70.         m_IDC_EDIT14.EnableWindow(1);
    71.         m_IDC_EDIT16.EnableWindow(1);
    72.         m_IDC_EDIT17.EnableWindow(1);
    73.     }
    74.     if (check==BST_UNCHECKED)
    75.     {
    76.         m_IDC_EDIT13.EnableWindow(0);
    77.         m_IDC_EDIT14.EnableWindow(0);
    78.         m_IDC_EDIT16.EnableWindow(0);
    79.         m_IDC_EDIT17.EnableWindow(0);
    80.         //check = m_IDC_CHECK5.GetCheck();
    81.     }
    82. }



    Файл VertScrollDialog.h :

    C++ Code:
    1. #ifndef VERTSCROLLDIALOG_H
    2. #define VERTSCROLLDIALOG_H
    3.  
    4. class CVertScrollDialog : public CDialog
    5. {
    6.     //DECLARE_DYNAMIC(CScrollDialog1)
    7.  
    8. public:
    9.     CPoint  m_ptDragPoint;
    10.     int  m_nScrollPos;
    11.     int  m_nCurHeight;
    12. // Данные диалогового окна
    13.     enum { IDD };
    14.  
    15. protected:
    16.     virtual void DoDataExchange(CDataExchange* pDX);    // поддержка DDX/DDV
    17.     virtual BOOL OnInitDialog();
    18.     afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
    19.     afx_msg void OnSize(UINT nType, int cx, int cy);
    20.     afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);
    21.     //virtual void OnCancel();
    22.     //virtual void OnOK();
    23.     afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
    24.     afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
    25.     afx_msg void OnMouseMove(UINT nFlags, CPoint point);
    26.     afx_msg void OnKillFocus(CWnd* pNewWnd);
    27.     DECLARE_MESSAGE_MAP()
    28. public:
    29.     //afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
    30. };
    31.  
    32. #endif


    В файле VertScrollDialog.cpp :

    C++ Code:
    1. CVertScrollDialog::CVertScrollDialog(CWnd* pParent /*=NULL*/)
    2.     : CDialog(CVertScrollDialog::IDD, pParent)
    3. {
    4.     m_bDragging = FALSE;
    5.     //Create(IDD,pParent);
    6. }
    7.  
    8. CVertScrollDialog::CVertScrollDialog(int idd, CWnd* pParent)
    9.     : CDialog(idd, pParent)
    10. {
    11.     m_bDragging = FALSE;
    12.     //Create(idd,pParent);
    13. }
    14.  
    15. CVertScrollDialog::~CVertScrollDialog()
    16. {
    17. }
    18.  
    19. void CVertScrollDialog:<img src="http://iforum.pro/images/smilies/biggrin.png" border="0" alt="" title="Big Grin" class="inlineimg" />oDataExchange(CDataExchange* pDX)
    20. {
    21.     CDialog:<img src="http://iforum.pro/images/smilies/biggrin.png" border="0" alt="" title="Big Grin" class="inlineimg" />oDataExchange(pDX);
    22. }
    23.  
    24. BEGIN_MESSAGE_MAP(CVertScrollDialog, CDialog)
    25.     ON_WM_VSCROLL()
    26.     ON_WM_SIZE()
    27.     ON_WM_MOUSEWHEEL()
    28.     ON_WM_LBUTTONDOWN()
    29.     ON_WM_LBUTTONUP()
    30.     ON_WM_MOUSEMOVE()
    31.     ON_WM_KILLFOCUS()
    32.     ON_WM_SETCURSOR()
    33. END_MESSAGE_MAP()
    34.  
    35.  
    36. // обработчики сообщений CScrollDialog1
    37.  
    38. BOOL  CVertScrollDialog::OnInitDialog()
    39. {
    40.     CDialog::OnInitDialog();
    41.  
    42.     GetWindowRect(m_rcOriginalRect);
    43.     m_nScrollPos = 0;
    44.     return TRUE;
    45. }
    46.  
    47. // прочие методы класса CVertScrollDialog;


    (Я создал два класса CVertScrollDialog1 и его наследник CScrollDialog1 потому что я хочу потом создать ещё один потомок класса CVertScrollDialog1--то есть ещё один прокручиваемый диалог на основе существующего).
    Ответить с цитированием  
     

  2. #2  
    Профи Аватар для Сионист
    Регистрация
    21.01.2016
    Адрес
    Галактика Млечный Путь
    Сообщений
    509
    Сказал(а) спасибо
    11
    Поблагодарили 21 раз(а) в 20 сообщениях
    Parent присвоен?
    Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на си.
    Ответить с цитированием  
     

Информация о теме
Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Сколько кейвордов должно быть на главной странице?
    от Людмила в разделе Внутренняя оптимизация
    Ответов: 3
    Последнее сообщение: 30.08.2016, 20:30
  2. Вставка компонента TextBox в Word
    от CottonHill в разделе VBA
    Ответов: 0
    Последнее сообщение: 03.12.2015, 17:12
  3. Помогите настроить код счетчика на странице подтверждения заказа
    от Дмитрий Новиков в разделе Общие вопросы программирования
    Ответов: 0
    Последнее сообщение: 18.12.2014, 20:37
  4. Поиск элементов на другой странице
    от chudikos в разделе JavaScript
    Ответов: 0
    Последнее сообщение: 09.11.2012, 23:14
Ваши права
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •