Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Реализация ТулТипса, Где ошибка ??? 
V
    Опции темы
Moonlit_angel
  Дата 12.10.2007, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 14.9.2007
Где: Вильнюс, Литва

Репутация: нет
Всего: нет



Имеется код для реализации ТулТипса. При его вписании у меня дергается окно программы, как лапповый телик, что вот вот да и сгорит...

Хедер
Код

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// TableToolTip.h : header file
//
namespace RsUiSpecifications
{

/////////////////////////////////////////////////////////////////////////////
// TableToolTip window

typedef BOOL (*TRANSPARENTWINDOWPROC)(
HWND hwnd, // handle to the layered window
COLORREF crKey, // specifies the color key
BYTE bAlpha, // value for the blend function
DWORD dwFlags // action
);

class TableToolTip : public CWnd
{
// Construction
public:
    TableToolTip();

// Attributes
public:

// Operations
public:
    /// @ create the tool tip
    BOOL Create(CSize szSize, CWnd *pWnd = NULL);

    /// @ adjust tip size
    void SetToolTipSize(CSize szSize);

    /// @ Show tip 
    void ShowTips(int nX, int nY,CString sSizeTxt);

    /// @ hide tip
    void HideTips();

    /// @ Set back ground color
    void SetBkColor(COLORREF clrBack);

    /// @ Set tip text color
    void SetTipTextColor(COLORREF clrText);

    /// @ Set Frame color
    void SetFrameColor(COLORREF clrFrame);


// Implementation
public:
    virtual ~TableToolTip();
private: 
    CPoint  m_ptOrg;
    CSize   m_TipSize;
    CString m_strTips;
    COLORREF m_clrBack;
    COLORREF m_clrText;
    COLORREF m_clrFrameColor;

    // Generated message map functions
protected:
    //{{AFX_MSG(C_ColorToolTip)
    afx_msg void OnPaint();
    afx_msg BOOL OnEraseBkgnd(CDC* pDC);
    //}}AFX_MSG
    DECLARE_MESSAGE_MAP()
};
}



Соурсе 
Код

// TableToolTip.cpp : implementation file
//

#include "stdafx.h"
#include "TableToolTip.h"

#ifndef  WS_EX_LAYERED
#define  WS_EX_LAYERED           0x00080000
#endif

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

using namespace RsUiSpecifications;

/////////////////////////////////////////////////////////////////////////////
// TableToolTip

TableToolTip::TableToolTip()
:m_ptOrg(0,0),
m_TipSize(0,0)
{
    m_clrFrameColor = RGB(155, 110, 53);
    m_clrBack = RGB(249, 249, 238);
    m_clrText = RGB(0, 0, 0);

}

TableToolTip::~TableToolTip()
{

}


BEGIN_MESSAGE_MAP(TableToolTip, CWnd)
    //{{AFX_MSG_MAP(TableToolTip)
    ON_WM_PAINT()
    ON_WM_ERASEBKGND()
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()


BOOL TableToolTip::Create(CSize szSize, CWnd *pWnd)
{
    HWND hWnd = NULL;
    if (pWnd != NULL && IsWindow(pWnd->m_hWnd))
    {
        hWnd = pWnd->m_hWnd;
    }
    // register class 
    LPCTSTR lpszClassName = AfxRegisterWndClass(NULL);
    BOOL bRet = CreateEx(WS_EX_TOPMOST | WS_EX_TOOLWINDOW, lpszClassName, _T(""),
        WS_POPUP /*| WS_BORDER*/, 0, 0, 1, 1, NULL, NULL);
    if (bRet)
    {
        MoveWindow(CRect(m_ptOrg, szSize));    
        m_TipSize = szSize;
    }
    return bRet;
}

void TableToolTip::SetToolTipSize(CSize szSize)
{
    if (IsWindow(m_hWnd))
    {
        MoveWindow(CRect(m_ptOrg, szSize));
    }
}

void TableToolTip::ShowTips(int nX, int nY, CString sSizeTxt)
{      
      m_ptOrg = CPoint(nX, nY);
      m_strTips = sSizeTxt;
      MoveWindow(nX, nY, m_TipSize.cx, m_TipSize.cy, TRUE);
      if (!IsWindowVisible())
      {
         ShowWindow(SW_SHOW);
      }
      Invalidate(TRUE);  
}


/////////////////////////////////////////////////////////////////////////////
// TableToolTip message handlers

void TableToolTip::OnPaint() 
{
    CPaintDC dc(this); // device context for painting
    
    // TODO: Add your message handler code here
    CRect rtWin;
    GetClientRect(rtWin);
    dc.FillSolidRect(rtWin, m_clrBack);
    dc.SetBkMode(TRANSPARENT);
    dc.Draw3dRect(rtWin, m_clrFrameColor, m_clrFrameColor);
    dc.SetTextColor(m_clrText);                
    dc.DrawText(m_strTips, rtWin,  DT_CENTER |DT_VCENTER | DT_SINGLELINE);    
}


BOOL TableToolTip::OnEraseBkgnd(CDC* pDC) 
{
    // TODO: Add your message handler code here and/or call default    
    // return CWnd::OnEraseBkgnd(pDC);
    return TRUE;
}

void TableToolTip::HideTips()
{
    if (IsWindow(m_hWnd))
    {
        ShowWindow(SW_HIDE);
    }
}


void TableToolTip::SetBkColor(COLORREF clrBack)
{
    m_clrBack = clrBack;
}

void TableToolTip::SetFrameColor(COLORREF clrFrame)
{
    m_clrFrameColor = clrFrame;
}

void TableToolTip::SetTipTextColor(COLORREF clrText)
{
    m_clrText = clrText;
}




Реализация ( результатом должен быть вывод и в хедер таблицы параметр и так же тул типсом)
Код

void CTableTempGrid::OnColSizing(int col, int *width)
{
   CBaseGridCtrl::OnColSizing(col, width);

   int iTableCol = GetTableColumn(col);
   CString sSizeTxt;
  
   int iNewWidth = (int)GetSizeInTable((*width), true);
   sSizeTxt.Format("%s%d", LOAD_STRING(IDS_TABLETEMP_WIDTH),iNewWidth); 
   //TableToolTip ToolTip;
   CDataColumn* pCol = m_pTempData->GetColumn(iTableCol);
   
   if (pCol->IsA() == CCellBase::CTDYNAMICCOLUMN)
   {
       int iFirstDynColInd = GetGridColumnIndex(iTableCol);

       for (int i = iFirstDynColInd; i < iFirstDynColInd+3; i++)
       {
          if (col == i)
             continue;
          SetColWidth(i, *width);
          QuickSetText(i, -1, sSizeTxt);
         //m_Tips.ShowTips(i, -1, sSizeTxt);   // это то что я реализую, но в результате просто дёргаутся окно...
        
       }
                 QuickSetText(col, -1, sSizeTxt);
    //m_Tips.ShowTips(col, -1, sSizeTxt);
      
   }
   else
   {
      QuickSetText(col, -1, sSizeTxt);  // эта функция в хедер грида выводит "Ширина - хх"
                //m_Tips.ShowTips(col, -1, sSizeTxt);
   }
      
}


 Что я не дописала или где моя ошибка ???!  smile 

Это сообщение отредактировал(а) Moonlit_angel - 12.10.2007, 12:19
PM MAIL Skype   Вверх
Rapalex
Дата 12.10.2007, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 732
Регистрация: 20.1.2006
Где: Украина -> Ник олаев

Репутация: 6
Всего: 8



А чем тебе виндовый тултип не угодил?
Его используй...


--------------------
In vitium ducit culpae fuga.
Желание избежать ошибки вовлекает в другую.
(Horatius)
PM ICQ   Вверх
Moonlit_angel
Дата 15.10.2007, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 14.9.2007
Где: Вильнюс, Литва

Репутация: нет
Всего: нет



Дело в том, что тут идет реч о сетке. Винндовский ... А думаеш прокатит ??? Да, ктсате, с этим, что пытаюсь реализовать, в дочернем окне не выводит даже мессаги, а корнемое окно, дрыгается, как при последнем вздохе, при драгинге...
PM MAIL Skype   Вверх
Rapalex
Дата 15.10.2007, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 732
Регистрация: 20.1.2006
Где: Украина -> Ник олаев

Репутация: 6
Всего: 8



Цитата(Moonlit_angel @  15.10.2007,  10:48 Найти цитируемый пост)
Дело в том, что тут идет реч о сетке

Непонял, причём ту то над чем он появлятся будет.

Цитата(Moonlit_angel @  15.10.2007,  10:48 Найти цитируемый пост)
 Винндовский ... А думаеш прокатит ???

А что с ним не то?


--------------------
In vitium ducit culpae fuga.
Желание избежать ошибки вовлекает в другую.
(Horatius)
PM ICQ   Вверх
Moonlit_angel
Дата 15.10.2007, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 14.9.2007
Где: Вильнюс, Литва

Репутация: нет
Всего: нет



Код


void RsBitmapButton::SetTooltip(UINT strId, HINSTANCE hInstance)
{
   CString tooltip;
   tooltip.LoadString(hInstance, strId);
   CButton::SetWindowText(tooltip);
}




Такова структура ?? Виндовского ?? Или есть проще что-то ?
PM MAIL Skype   Вверх
FREEDEV
Дата 15.10.2007, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 6.3.2007
Где: Украина->Одесс а

Репутация: нет
Всего: 3



что-то типа этого:

Код

this->toolTip1->ToolTipIcon = System::Windows::Forms::ToolTipIcon::Info;
            this->toolTip1->ToolTipTitle = L"Title";
            this->toolTip1->SetToolTip(this->button1,"Text");


Добавлено через 47 секунд
это для 2005. Ассоциируем тул тип с конкретной кнопкой
--------------------
Microsoft Windows Visla ©
PM MAIL   Вверх
Moonlit_angel
Дата 15.10.2007, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 14.9.2007
Где: Вильнюс, Литва

Репутация: нет
Всего: нет



Ещё, мне не на буттон нужен тул тип... а чтоб он зависал вместе с хедером..

Добавлено через 9 минут и 46 секунд
У меня нет кнопок!!! У меня только сетка!!!
PM MAIL Skype   Вверх
Rapalex
Дата 15.10.2007, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 732
Регистрация: 20.1.2006
Где: Украина -> Ник олаев

Репутация: 6
Всего: 8



И что, туттип может над чем угодно висеть, при желании его можно заставить висеть в любой точке экрана.
Юзай TOOLTIPS_CLASS и TTM_TRACKPOSITION


--------------------
In vitium ducit culpae fuga.
Желание избежать ошибки вовлекает в другую.
(Horatius)
PM ICQ   Вверх
Moonlit_angel
Дата 15.10.2007, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 14.9.2007
Где: Вильнюс, Литва

Репутация: нет
Всего: нет



В любой точке экрана - да, его к мышке в таком случае привязать... 
ТулТип в любой точке экрана
И опять же, тут есть к чему привязать.. Хм... Хотя на мысль натолкнул...
Кстате, в моём случае эта реализация не подошла, так как у меня не одно, а 2 как ми окна, а он всё время перерисовывает коренное окно... Вот...  smile 
PM MAIL Skype   Вверх
FREEDEV
Дата 15.10.2007, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 6.3.2007
Где: Украина->Одесс а

Репутация: нет
Всего: 3



.. ну. на том же кодепрожекте не льзя порыскать! Там столько примеров на эту тему:
http://www.codeproject.com/miscctrl/tooltipex.asp

рась 
Создаешь тул тип и указываеш родительское окно для него
Код

tooltip.Create(this)
tooltip.AddTool(GetDlgItem(IDC_CONTROL), 
               _T("Tooltip text\rThis is the extended\ntooltip text"));


дьва 
обрабатываешь сообщение TTN_NEEDTEXT
при отображении тултипа (функция OnToolTipNotify) установи в него нужный текст
Код

BEGIN_MESSAGE_MAP(CMyDlg, CDialog)
... 
ON_NOTIFY_EX( TTN_NEEDTEXT, 0, OnToolTipNotify)
END_MESSAGE_MAP()

BOOL CMyDlg::OnToolTipNotify(UINT id, NMHDR* pNMHDR, LRESULT* pResult)

    TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pNMHDR; 
    UINT nID = pNMHDR->idFrom;

    if (nID == IDC_CONTROL) // Fill in the text buffer
    {
        _tcscpy(pTTT->szText, _T("Tooltip text\rExtended tooltip text"));
        return TRUE;
    }

    return FALSE;
}



вот пример создания ListBoxa с поддержкой ToolTipa

Добавлено через 6 минут и 42 секунды
Цитата(Moonlit_angel @  15.10.2007,  15:02 Найти цитируемый пост)
Кстате, в моём случае эта реализация не подошла, так как у меня не одно, а 2 как ми окна, а он всё время перерисовывает коренное окно... Вот...   


че перерисовывает, какие 2 окна?
ты его на каждое перемещение курсора выводишь?

Добавлено через 7 минут и 12 секунд
прикрепи проект сюда
--------------------
Microsoft Windows Visla ©
PM MAIL   Вверх
Moonlit_angel
Дата 15.10.2007, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 14.9.2007
Где: Вильнюс, Литва

Репутация: нет
Всего: нет



Нет, значит имеентся базовое окно->окно темплайта таблицы. В нём грид... И при драгинге нужен этот выводится в хедер таблицы длинна\высота, но когда сужаешь до 1 или же 0,5 , естественно не видно что в таблице, какие данные. Эти данные нужно в тултип вувести. Но твой метод попробую... Надеюсь всё получится...
Прикрепляю именно тот сррб что связан с задачей.. Если весь проект... он тяжёлый... 

Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  TableTempGrid.cpp 48,42 Kb
PM MAIL Skype   Вверх
FREEDEV
Дата 15.10.2007, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 6.3.2007
Где: Украина->Одесс а

Репутация: нет
Всего: 3



Цитата(Moonlit_angel @  15.10.2007,  18:10 Найти цитируемый пост)
нужен этот выводится в хедер таблицы длинна\высота, но когда сужаешь до 1 или же 0,5 , естественно не видно что в таблице, какие данные. Эти данные нужно в тултип вувести.


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


Цитата(Moonlit_angel @  15.10.2007,  18:10 Найти цитируемый пост)
Если весь проект... он тяжёлый... 

нужно облегчить  smile  что б можно было запустить и посмотреть что происходит
--------------------
Microsoft Windows Visla ©
PM MAIL   Вверх
Moonlit_angel
Дата 15.10.2007, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 14.9.2007
Где: Вильнюс, Литва

Репутация: нет
Всего: нет



Цитата

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


Тул тип должен постоянно висеть...

Цитата

нужно облегчить    что б можно было запустить и посмотреть что происходит 



Ем... Если толко скришот...Весб код сдесь не влезит... Увы...  smile 

Это сообщение отредактировал(а) Moonlit_angel - 15.10.2007, 21:19
PM MAIL Skype   Вверх
Moonlit_angel
Дата 16.10.2007, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 14.9.2007
Где: Вильнюс, Литва

Репутация: нет
Всего: нет



Как в случае с сеткой создать Control, чтоб к нему прикрепить тултип??
PM MAIL Skype   Вверх
FREEDEV
Дата 16.10.2007, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 6.3.2007
Где: Украина->Одесс а

Репутация: нет
Всего: 3



унаследуйся от сетки которую используешь
давал же ссылку http://www.codeproject.com/combobox/cexlistboc.asp smile
--------------------
Microsoft Windows Visla ©
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0851 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.