Исчерпывающее руководство по написанию всплывающих подсказок - [13]
CODListBox::DrawItem рисует строку по информации из структуры DrawItemStruct. Этот код аналогичен коду в функции CTitleTip::OnPaint, за исключением того, что вместо цветов по умолчанию используются красный и белый цвета. Помните, что этот метод может вызываться из класса CTitleTip для рисования внутри его окна.
CODListBox::MeasureItem вычисляет высоту строки на основе шрифта и заданного пустого пространства вокруг текста. Этот метод вызывается Windows только один раз, потому что у этого элемента "список" установлен стиль LBS_OWNERDRAWFIXED. В случае со стилем LBS_OWNERDRAWVARIABLE метод будет вызываться для каждой строки.
В диалоге CTTDemoDlg присутствуют оба рассмотренных элемента "список", и большая часть кода была сгенерирована AppWizard'ом (см. рис.14). Я добавил в класс переменные m_RegListBox и m_ODListBox для обычного списка и списка с пользовательской отрисовкой, соответственно. Еще я добавил код в функцию CTTDemoDlg::OnInitDialog, где производится сабклассинг обоих элементов "список" вызовом CWnd::SubclassWindow. Я загружаю оба списка из статического массива pszItemArray.
Рис.14. CTTDemoDlg
>// TTDemoDlg.h : header file /////////////////////////////////////////////////////////////////////////////
>// CTTDemoDlg dialog
>#include "TitleTipListBox.h"
>#include "ODListBox.h"
>class CTTDemoDlg : public CDialog { // Construction public:
> CTTDemoDlg(CWnd* pParent = NULL); // standard constructor
>// Dialog Data
> //{{AFX_DATA(CTTDemoDlg)
> enum { IDD = IDD_TTDEMO_DIALOG };
> // NOTE: the ClassWizard will add data members here
> //}}AFX_DATA
> // ClassWizard generated virtual function overrides
> //{{AFX_VIRTUAL(CTTDemoDlg)
>protected:
> virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
> //}}AFX_VIRTUAL
> // Implementation
>protected:
> HICON m_hIcon;
> CTitleTipListBox m_RegListBox; // Обычный список
> CODListBox m_ODListBox; // Список с пользовательской отрисовкой
> // Generated message map functions
> //{{AFX_MSG(CTTDemoDlg)
> virtual BOOL OnInitDialog();
> afx_msg void OnPaint();
> afx_msg HCURSOR OnQueryDragIcon();
> //}}AFX_MSG
> DECLARE_MESSAGE_MAP()
>};
>// TTDemoDlg.cpp : implementation file
>#include "stdafx.h"
>#include "TTDemo.h"
>#include "TTDemoDlg.h"
>#ifdef _DEBUG
>#define new DEBUG_NEW
>#undef THIS_FILE
>static char THIS_FILE[] = __FILE__;
>#endif
>/////////////////////////////////////////////////////////////////////////////
>// CTTDemoDlg dialog
>CTTDemoDlg::CTTDemoDlg(CWnd* pParent /*=NULL*/) : CDialog(CTTDemoDlg::IDD, pParent) {
> //{{AFX_DATA_INIT(CTTDemoDlg)
> // NOTE: the ClassWizard will add member initialization here
> //}}AFX_DATA_INIT
> // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
> m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
>}
>void CTTDemoDlg::DoDataExchange(CDataExchange* pDX) {
> CDialog::DoDataExchange(pDX);
> //{{AFX_DATA_MAP(CTTDemoDlg)
> // NOTE: the ClassWizard will add DDX and DDV calls here
> //}}AFX_DATA_MAP
>}
>BEGIN_MESSAGE_MAP(CTTDemoDlg, CDialog)
> //{{AFX_MSG_MAP(CTTDemoDlg)
> ON_WM_PAINT()
> ON_WM_QUERYDRAGICON()
> //}}AFX_MSG_MAP
>END_MESSAGE_MAP()
>/////////////////////////////////////////////////////////////////////////////
>// CTTDemoDlg message handlers
>BOOL CTTDemoDlg::OnInitDialog() {
> CDialog::OnInitDialog();
> // Set the icon for this dialog. The framework does this automatically
> // when the application's main window is not a dialog
> SetIcon(m_hIcon, TRUE); // Set big icon
> SetIcon(m_hIcon, FALSE); // Set small icon
> // Сабклассинг обычного элемента "список"
> HWND hwndRegListBox = ::GetDlgItem(GetSafeHwnd(), IDC_REGLISTBOX);
> ASSERT(hwndRegListBox);
> VERIFY(m_RegListBox.SubclassWindow(hwndRegListBox));
> // Сабклассинг списка с пользовательской отрисовкой
> HWND hwndODListBox = ::GetDlgItem(GetSafeHwnd(), IDC_ODLISTBOX);
> ASSERT(hwndODListBox);
> VERIFY(m_ODListBox.SubclassWindow(hwndODListBox));
> // Заполнение обоих списков строками
> static char* pszItemArray[] = {
> "The C++ Programming Language",
> "C++ Primer",
> "OLE Controls Inside Out",
> "Inside OLE 2nd Edition",
> "Inside ODBC",
> "Code Complete",
> "Rapid Software Development",
> "The Design Of Everyday Things",
> "Object-Oriented Analysis And Design",
> "MFC Internals",
> "Animation Techniques In Win32",
> "Inside Visual C++",
> "Writing Solid Code",
> "Learn Java Now"
> };
> static int nItemArrayCount = sizeof(pszItemArray) / sizeof(pszItemArray[0]);
> for (int n = 0; n < nItemArrayCount; n++) {
> VERIFY(m_RegListBox.AddString(pszItemArray[n]) != LB_ERR);
> VERIFY(m_ODListBox.AddString(pszItemArray[n]) != LB_ERR);
> }
> return TRUE; // return TRUE unless you set the focus to a control
>}
>// If you add a minimize button to your dialog, you will need the code below
>// to draw the icon. For MFC applications using the document/view model,
>// this is automatically done for you by the framework.
>void CTTDemoDlg::OnPaint() {
> if (IsIconic()) {
> CPaintDC dc(this); // device context for painting
> SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
> // Center icon in client rectangle
> int cxIcon = GetSystemMetrics(SM_CXICON);
> int cyIcon = GetSystemMetrics(SM_CYICON);
> CRect rect;
> GetClientRect(&rect);

Java Enterprise Edition (Java EE) остается одной из ведущих технологий и платформ на основе Java. Данная книга представляет собой логичное пошаговое руководство, в котором подробно описаны многие спецификации и эталонные реализации Java EE 7. Работа с ними продемонстрирована на практических примерах. В этом фундаментальном издании также используется новейшая версия инструмента GlassFish, предназначенного для развертывания и администрирования примеров кода. Книга написана ведущим специалистом по обработке запросов на спецификацию Java EE, членом наблюдательного совета организации Java Community Process (JCP)

Что такое ГЕЙМДИЗАЙН? Это не код, графика или звук. Это не создание персонажей или раскрашивание игрового поля. Геймдизайн – это симулятор мечты, набор правил, благодаря которым игра оживает. Как создать игру, которую полюбят, от которой не смогут оторваться? Знаменитый геймдизайнер Тайнан Сильвестр на примере кейсов из самых популярных игр рассказывает как объединить эмоции и впечатления, игровую механику и мотивацию игроков. Познакомитесь с принципами дизайна, которыми пользуются ведущие студии мира! Создайте игровую механику, вызывающую эмоции и обеспечивающую разнообразие.

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.

Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.