void CQListCtrl::ShowFullDescription(bool bFromAuto) { int nItem = GetCaret(); CRect rc, crWindow; GetWindowRect(&crWindow); GetItemRect(nItem, rc, LVIR_BOUNDS); ClientToScreen(rc); CPoint pt; if(bFromAuto == false) { pt = CPoint(rc.left, rc.bottom); } else pt = CPoint((crWindow.left + (crWindow.right - crWindow.left)/2), rc.bottom); CString csDescription; GetToolTipText(nItem, csDescription); m_pToolTip->DestroyWindow(); m_pToolTip = new CToolTipEx; m_pToolTip->Create(this); m_pToolTip->SetNotifyWnd(GetParent()); if(m_pToolTip) { m_pToolTip->SetToolTipText(_T("")); m_pToolTip->SetRTFText(" "); bool bSetPlainText = false; CClipFormat Clip; Clip.m_cfType = CF_UNICODETEXT; if(GetClipData(nItem, Clip) && Clip.m_hgData) { LPVOID pvData = GlobalLock(Clip.m_hgData); if(pvData) { CString csText = (WCHAR*)pvData; m_pToolTip->SetToolTipText(csText); bSetPlainText = true; } GlobalUnlock(Clip.m_hgData); Clip.Free(); Clip.Clear(); } if(bSetPlainText == false) { Clip.m_cfType = CF_TEXT; if(GetClipData(nItem, Clip) && Clip.m_hgData) { LPVOID pvData = GlobalLock(Clip.m_hgData); if(pvData) { CString csText = (char*)pvData; m_pToolTip->SetToolTipText(csText); bSetPlainText = true; } GlobalUnlock(Clip.m_hgData); Clip.Free(); Clip.Clear(); } } if(bSetPlainText == false) { m_pToolTip->SetToolTipText(csDescription); } Clip.m_cfType = RegisterClipboardFormat(CF_RTF); if(GetClipData(nItem, Clip) && Clip.m_hgData) { LPVOID pvData = GlobalLock(Clip.m_hgData); if(pvData) { m_pToolTip->SetRTFText((char*)pvData); } GlobalUnlock(Clip.m_hgData); Clip.Free(); Clip.Clear(); } Clip.m_cfType = CF_DIB; if(GetClipData(nItem, Clip) && Clip.m_hgData) { CBitmap *pBitMap = new CBitmap; if(pBitMap) { CRect rcItem; GetWindowRect(rcItem); CDC *pDC = GetDC();; CBitmapHelper::GetCBitmap(&Clip, pDC, pBitMap, (rcItem.Width() * 2)); ReleaseDC(pDC); //Tooltip wnd will release m_pToolTip->SetBitmap(pBitMap); } Clip.Free(); Clip.Clear(); } m_pToolTip->Show(pt); } }
bool CQListCtrl::ShowFullDescription(bool bFromAuto, bool fromNextPrev) { if (this->GetSelectedCount() == 0) { return false; } int clipId = this->GetItemData(this->GetCaret()); if(VALID_TOOLTIP && m_pToolTip->GetClipId() == clipId && ::IsWindow(m_toolTipHwnd)) { return false; } int nItem = GetCaret(); CRect rc, crWindow; GetWindowRect(&crWindow); GetItemRect(nItem, rc, LVIR_BOUNDS); ClientToScreen(rc); CPoint pt; if(CGetSetOptions::GetRememberDescPos()) { CGetSetOptions::GetDescWndPoint(pt); } else if(bFromAuto == false) { pt = CPoint(rc.left, rc.bottom); } else { pt = CPoint((crWindow.left + (crWindow.right - crWindow.left)/2), rc.bottom); } CString csDescription; GetToolTipText(nItem, csDescription); if (m_pToolTip == NULL || fromNextPrev == false || ::IsWindow(m_toolTipHwnd) == FALSE) { m_pToolTip->DestroyWindow(); m_pToolTip = new CToolTipEx; m_pToolTip->Create(this); m_toolTipHwnd = m_pToolTip->GetSafeHwnd(); m_pToolTip->SetNotifyWnd(GetParent()); } else if(VALID_TOOLTIP) { CRect r; m_pToolTip->GetWindowRect(r); pt = r.TopLeft(); m_pToolTip->SetBitmap(NULL); m_pToolTip->SetRTFText(""); m_pToolTip->SetToolTipText(_T("")); } if(VALID_TOOLTIP) { m_pToolTip->SetClipId(clipId); m_pToolTip->SetSearchText(m_searchText); m_pToolTip->SetToolTipText(_T("")); m_pToolTip->SetRTFText(" "); bool bSetPlainText = false; CClipFormat Clip; Clip.m_cfType = CF_UNICODETEXT; if(GetClipData(nItem, Clip) && Clip.m_hgData) { LPVOID pvData = GlobalLock(Clip.m_hgData); if(pvData) { CString csText = (WCHAR*)pvData; m_pToolTip->SetToolTipText(csText); bSetPlainText = true; } GlobalUnlock(Clip.m_hgData); Clip.Free(); Clip.Clear(); } if(bSetPlainText == false) { Clip.m_cfType = CF_TEXT; if(GetClipData(nItem, Clip) && Clip.m_hgData) { LPVOID pvData = GlobalLock(Clip.m_hgData); if(pvData) { CString csText = (char*)pvData; m_pToolTip->SetToolTipText(csText); bSetPlainText = true; } GlobalUnlock(Clip.m_hgData); Clip.Free(); Clip.Clear(); } } if(bSetPlainText == false) { m_pToolTip->SetToolTipText(csDescription); } Clip.m_cfType = RegisterClipboardFormat(CF_RTF); if(GetClipData(nItem, Clip) && Clip.m_hgData) { LPVOID pvData = GlobalLock(Clip.m_hgData); if(pvData) { m_pToolTip->SetRTFText((char*)pvData); } GlobalUnlock(Clip.m_hgData); Clip.Free(); Clip.Clear(); } Clip.m_cfType = CF_DIB; if(GetClipData(nItem, Clip) && Clip.m_hgData) { CBitmap *pBitMap = new CBitmap; if(pBitMap) { CRect rcItem; GetWindowRect(rcItem); CDC *pDC = GetDC();; CBitmapHelper::GetCBitmap(&Clip, pDC, pBitMap, MAXINT); ReleaseDC(pDC); //Tooltip wnd will release m_pToolTip->SetBitmap(pBitMap); } Clip.Free(); Clip.Clear(); } m_pToolTip->Show(pt); } return true; }
bool CDittoRulerRichEditCtrl::LoadItem(long lID, CString csDesc) { bool bSetText = false; CClipFormat Clip; m_lID = lID; m_csDescription = csDesc; //If creating a new clip if(m_lID < 0) { m_rtf.SetModify(FALSE); return false; } Clip.m_cfType = RegisterClipboardFormat(CF_RTF); if(theApp.GetClipData(lID, Clip) && Clip.m_hgData) { LPVOID pvData = GlobalLock(Clip.m_hgData); if(pvData) { SetRTF((char*)pvData); bSetText = true; } GlobalUnlock(Clip.m_hgData); Clip.Free(); Clip.Clear(); } if(bSetText == false) { Clip.m_cfType = CF_UNICODETEXT; if(theApp.GetClipData(lID, Clip) && Clip.m_hgData) { LPVOID pvData = GlobalLock(Clip.m_hgData); if(pvData) { CString csText = (WCHAR*)pvData; SetText(csText); bSetText = true; } GlobalUnlock(Clip.m_hgData); Clip.Free(); Clip.Clear(); } } if(bSetText == false) { Clip.m_cfType = CF_TEXT; if(theApp.GetClipData(lID, Clip) && Clip.m_hgData) { LPVOID pvData = GlobalLock(Clip.m_hgData); if(pvData) { CString csText = (char*)pvData; SetText(csText); bSetText = true; } GlobalUnlock(Clip.m_hgData); Clip.Free(); Clip.Clear(); } } m_rtf.SetModify(FALSE); return bSetText; }