Базы данныхИнтернетКомпьютерыОперационные системыПрограммированиеСетиСвязьРазное
Поиск по сайту:
Подпишись на рассылку:

Назад в раздел

Элемент управления CheckFrame

div.main {margin-left: 20pt; margin-right: 20pt}

Элемент управления CheckFrame


Оригинал находится по адресу:
http://codeguru.earthweb.com/controls/check_frame.shtml

Статья предоставлена Christian Skovdal Andersen.

Иногда может быть полезно основываясь на выборе пользователя отключить некоторый набор опций (элементов управления). Например, если пользователь не желает сохранять log файл, то это должно быть соответствующим образом отображено пользователю.

Рис.1. CheckFrame отключен вместе со всеми содержащимися в нем элементами управления.


Рис.2. CheckFrame включен и все его элементы могут использоваться.

Определения. CheckFrame.h


BOOL IsRectContainedInRect(CRect &rcChild, CRect &rcMother); class CCheckFrame : public CObject { public: virtual void Enable(BOOL bEnable); void Set(CWnd *pParentWnd,UINT nFrmCtl); CWnd* m_pFrame; CWnd* m_pDialog; CRect m_rFrm; CDWordArray m_adwWndHandles; protected: };

Реализация. CheckFrame.cpp


Код достаточно прокоментирован

#include "stdafx.h" #include "Checkfrm.h" ////////////////////////////////////// // EnumChildWnds Callback BOOL CALLBACK EnumChildWnds(HWND hwnd, CCheckFrame *pObj) { CRect R; GetWindowRect(hwnd, &R); pObj->m_pDialog->ScreenToClient(&R); if (hwnd != pObj->m_pFrame->m_hWnd) { if (IsRectContainedInRect(R, pObj->m_rFrm)) pObj->m_adwWndHandles.Add((DWORD)hwnd); } return TRUE; } ////////////////////////////////////// // Function name : Set void CCheckFrame::Set(CWnd *pParentWnd, UINT nFrmCtl) { m_pDialog = pParentWnd; // Вычисляет размер прямоугольника, содержащий элементы управления. m_pFrame = m_pDialog->GetDlgItem(nFrmCtl); if (!m_pFrame) { AfxMessageBox("Не могу найти элемент управления - Frame"); return; } m_pFrame->GetWindowRect(&m_rFrm); m_pDialog->ScreenToClient(&m_rFrm); // Необходимо убедится, что массив пуст m_adwWndHandles.RemoveAll(); // В этом массиве хранятся указатели на элементы управления окруженные // прямоугольником рамки Frame'а. EnumChildWindows(m_pDialog->m_hWnd, (WNDENUMPROC)EnumChildWnds, (LONG)(CCheckFrame *)this); } ////////////////////////////////////// // Function name : CCheckFrame::Enable void CCheckFrame::Enable(BOOL bEnable) { for (int i=0 ; i<m_adwWndHandles.GetSize() ; i++) EnableWindow((HWND)m_adwWndHandles[i], bEnable); } ////////////////////////////////////// // Function name : IsRectContainedInRect BOOL IsRectContainedInRect(CRect &rcChild, CRect &rcMother) { if (rcMother.PtInRect(CPoint(rcChild.left, rcChild.top)) && rcMother.PtInRect(CPoint(rcChild.left, rcChild.bottom)) && rcMother.PtInRect(CPoint(rcChild.right, rcChild.top)) && rcMother.PtInRect(CPoint(rcChild.right, rcChild.bottom))) return TRUE; return FALSE; }

Проблеммы:
Если сам элемент управления СheckBox Отключается при выполнении программы попробуйте поднять его на несколько пикселев.



  • Главная
  • Новости
  • Новинки
  • Скрипты
  • Форум
  • Ссылки
  • О сайте




  • Emanual.ru – это сайт, посвящённый всем значимым событиям в IT-индустрии: новейшие разработки, уникальные методы и горячие новости! Тонны информации, полезной как для обычных пользователей, так и для самых продвинутых программистов! Интересные обсуждения на актуальные темы и огромная аудитория, которая может быть интересна широкому кругу рекламодателей. У нас вы узнаете всё о компьютерах, базах данных, операционных системах, сетях, инфраструктурах, связях и программированию на популярных языках!
     Copyright © 2001-2024
    Реклама на сайте